From 60ad21b9d74734098c822e8a74fb97c9281ff4db Mon Sep 17 00:00:00 2001 From: aahmed878 Date: Thu, 13 Nov 2025 14:21:46 +0000 Subject: [PATCH 1/3] RDKEMW-10411: aamp-cli does not work in non westeros sink decoder-sink in Polaris (Amlogic) Signed-off-by: aahmed878 --- middleware/InterfacePlayerRDK.cpp | 41 ++++++++-------- middleware/InterfacePlayerRDK.h | 0 middleware/vendor/SocInterface.cpp | 0 middleware/vendor/SocInterface.h | 6 +-- .../vendor/amlogic/AmlogicSocInterface.cpp | 47 +++++++++++++++++++ .../vendor/amlogic/AmlogicSocInterface.h | 6 ++- 6 files changed, 76 insertions(+), 24 deletions(-) mode change 100644 => 100755 middleware/InterfacePlayerRDK.cpp mode change 100644 => 100755 middleware/InterfacePlayerRDK.h mode change 100644 => 100755 middleware/vendor/SocInterface.cpp mode change 100644 => 100755 middleware/vendor/SocInterface.h mode change 100644 => 100755 middleware/vendor/amlogic/AmlogicSocInterface.cpp mode change 100644 => 100755 middleware/vendor/amlogic/AmlogicSocInterface.h diff --git a/middleware/InterfacePlayerRDK.cpp b/middleware/InterfacePlayerRDK.cpp old mode 100644 new mode 100755 index 7cb250c81..1a2438d54 --- a/middleware/InterfacePlayerRDK.cpp +++ b/middleware/InterfacePlayerRDK.cpp @@ -3881,13 +3881,13 @@ bool gst_StartsWith( const char *inputStr, const char *prefix ) * @param[in] pInterfacePlayerRDK pointer to InterfacePlayerRDK instance * @retval TRUE if element name is that of audio or video decoder */ -bool GstPlayer_isVideoOrAudioDecoder(const char *name, InterfacePlayerRDK *pInterfacePlayerRDK) +bool GstPlayer_isVideoOrAudioDecoder(const char *name, InterfacePlayerRDK *pInterfacePlayerRDK, GstElement* element) { // The idea is to identify video or audio decoder plugin created at runtime by playbin and register to its first-frame/pts-error callbacks // This support is available in plugins in RDK builds and hence checking only for such plugin instances here // For platforms that doesnt support callback, we use GST_STATE_PLAYING state change of playbin to notify first frame to app InterfacePlayerPriv* privatePlayer = pInterfacePlayerRDK->GetPrivatePlayer(); - return privatePlayer->socInterface->IsAudioOrVideoDecoder(name); + return privatePlayer->socInterface->IsAudioOrVideoDecoder(name, element); } /** @@ -3896,10 +3896,10 @@ bool GstPlayer_isVideoOrAudioDecoder(const char *name, InterfacePlayerRDK *pInte * @param[in] pInterfacePlayerRDK pointer to InterfacePlayerRDK instance * @retval TRUE if element name is that of the decoder */ -bool GstPlayer_isVideoDecoder(const char* name, InterfacePlayerRDK * pInterfacePlayerRDK) +bool GstPlayer_isVideoDecoder(const char* name, InterfacePlayerRDK * pInterfacePlayerRDK, GstElement* element) { InterfacePlayerPriv* privatePlayer = pInterfacePlayerRDK->GetPrivatePlayer(); - return privatePlayer->socInterface->IsVideoDecoder(name); + return privatePlayer->socInterface->IsVideoDecoder(name, element); } /** @@ -3954,10 +3954,10 @@ static GstPadProbeReturn GstPlayer_HandleInstantRateChangeSeekProbe(GstPad* pad, * @param[in] pInterfacePlayerRDK pointer to INterfacePlayerRDK instance * @retval TRUE if element name is that of video sink */ -bool GstPlayer_isVideoSink(const char* name, InterfacePlayerRDK* pInterfacePlayerRDK) +bool GstPlayer_isVideoSink(const char* name, InterfacePlayerRDK* pInterfacePlayerRDK, GstElement* element) { InterfacePlayerPriv* privatePlayer = pInterfacePlayerRDK->GetPrivatePlayer(); - return privatePlayer->socInterface->IsVideoSink(name); + return privatePlayer->socInterface->IsVideoSink(name,element); } /** @@ -4092,18 +4092,18 @@ static void GstPlayer_OnGstBufferUnderflowCb(GstElement* object, guint arg0, gpo if (privatePlayer->socInterface->IsVideoSinkHandleErrors()) { - isVideo = GstPlayer_isVideoSink(GST_ELEMENT_NAME(object), pInterfacePlayerRDK); + isVideo = GstPlayer_isVideoSink(GST_ELEMENT_NAME(object), pInterfacePlayerRDK, object); } else { - isVideo = GstPlayer_isVideoDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK); + isVideo = GstPlayer_isVideoDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK,object); } if (isVideo) { type = eGST_MEDIATYPE_VIDEO; } - else if (GstPlayer_isAudioSinkOrAudioDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK)) + else if (GstPlayer_isAudioSinkOrAudioDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK,object)) { type = eGST_MEDIATYPE_AUDIO; } @@ -4164,13 +4164,13 @@ static void GstPlayer_OnGstPtsErrorCb(GstElement *object, guint arg0, gpointer a bool isAudioSink = false; if (privatePlayer->socInterface->IsVideoSinkHandleErrors()) { - isVideo = GstPlayer_isVideoSink(GST_ELEMENT_NAME(object), pInterfacePlayerRDK); + isVideo = GstPlayer_isVideoSink(GST_ELEMENT_NAME(object), pInterfacePlayerRDK, object); } else { - isVideo = GstPlayer_isVideoDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK); + isVideo = GstPlayer_isVideoDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK,object); } - if (GstPlayer_isAudioSinkOrAudioDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK)) + if (GstPlayer_isAudioSinkOrAudioDecoder(GST_ELEMENT_NAME(object), pInterfacePlayerRDK,object)) { isAudioSink = true; } @@ -4378,11 +4378,11 @@ static gboolean bus_message(GstBus * bus, GstMessage * msg, InterfacePlayerRDK * } } //this code should be handled as part of IARM modification - if ((NULL != msg->src) && GstPlayer_isVideoOrAudioDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) + if ((NULL != msg->src) && GstPlayer_isVideoOrAudioDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement *)msg->src)) { // This is the video decoder, send this to the output protection module // so it can get the source width/height - if (GstPlayer_isVideoDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) + if (GstPlayer_isVideoDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement *)msg->src)) { if(PlayerExternalsInterface::IsPlayerExternalsInterfaceInstanceActive()) { @@ -4412,7 +4412,7 @@ static gboolean bus_message(GstBus * bus, GstMessage * msg, InterfacePlayerRDK * } } - if((NULL != msg->src) && ((privatePlayer->socInterface->IsVideoSinkHandleErrors() && GstPlayer_isVideoSink(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) || (!privatePlayer->socInterface->IsVideoSinkHandleErrors() && GstPlayer_isVideoOrAudioDecoder(GST_OBJECT_NAME(msg->src),pInterfacePlayerRDK))) && (!privatePlayer->gstPrivateContext->usingRialtoSink)) + if((NULL != msg->src) && ((privatePlayer->socInterface->IsVideoSinkHandleErrors() && GstPlayer_isVideoSink(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement *)msg->src)) || (!privatePlayer->socInterface->IsVideoSinkHandleErrors() && GstPlayer_isVideoOrAudioDecoder(GST_OBJECT_NAME(msg->src),pInterfacePlayerRDK, (GstElement *)msg->src))) && (!privatePlayer->gstPrivateContext->usingRialtoSink)) { if (old_state == GST_STATE_NULL && new_state == GST_STATE_READY) { @@ -4420,7 +4420,7 @@ static gboolean bus_message(GstBus * bus, GstMessage * msg, InterfacePlayerRDK * G_CALLBACK(GstPlayer_OnGstBufferUnderflowCb), pInterfacePlayerRDK); privatePlayer->SignalConnect(msg->src, "pts-error-callback", G_CALLBACK(GstPlayer_OnGstPtsErrorCb), pInterfacePlayerRDK); - if (!privatePlayer->socInterface->IsVideoSinkHandleErrors() && GstPlayer_isVideoDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) + if (!privatePlayer->socInterface->IsVideoSinkHandleErrors() && GstPlayer_isVideoDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement *)msg->src)) { privatePlayer->SignalConnect(msg->src, "decode-error-callback", G_CALLBACK(GstPlayer_OnGstDecodeErrorCb), pInterfacePlayerRDK); @@ -4815,7 +4815,7 @@ static GstBusSyncReply bus_sync_handler(GstBus * bus, GstMessage * msg, Interfac */ if (new_state == GST_STATE_PAUSED && old_state == GST_STATE_READY) { - if (GstPlayer_isVideoSink(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) + if (GstPlayer_isVideoSink(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement*) msg->src)) { // video scaling patch /* brcmvideosink doesn't sets the rectangle property correct by default @@ -4875,9 +4875,9 @@ static GstBusSyncReply bus_sync_handler(GstBus * bus, GstMessage * msg, Interfac } if (old_state == GST_STATE_NULL && new_state == GST_STATE_READY) { - if ((NULL != msg->src) && GstPlayer_isVideoOrAudioDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) + if ((NULL != msg->src) && GstPlayer_isVideoOrAudioDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement*) msg->src)) { - if (GstPlayer_isVideoDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK)) + if (GstPlayer_isVideoDecoder(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement *)msg->src)) { // video gst_object_replace((GstObject **)&privatePlayer->gstPrivateContext->video_dec, msg->src); type_check_instance("bus_sync_handle: video_dec ", privatePlayer->gstPrivateContext->video_dec); @@ -4903,7 +4903,7 @@ static GstBusSyncReply bus_sync_handler(GstBus * bus, GstMessage * msg, Interfac } } - if ((NULL != msg->src) && GstPlayer_isVideoSink(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK) && (!privatePlayer->gstPrivateContext->usingRialtoSink)) + if ((NULL != msg->src) && GstPlayer_isVideoSink(GST_OBJECT_NAME(msg->src), pInterfacePlayerRDK, (GstElement*) msg->src) && (!privatePlayer->gstPrivateContext->usingRialtoSink)) { if(privatePlayer->gstPrivateContext->enableSEITimeCode) { @@ -5347,3 +5347,4 @@ double InterfacePlayerRDK::FlushTrack(int mediaType, double pos, double audioDel return rate; } + diff --git a/middleware/InterfacePlayerRDK.h b/middleware/InterfacePlayerRDK.h old mode 100644 new mode 100755 diff --git a/middleware/vendor/SocInterface.cpp b/middleware/vendor/SocInterface.cpp old mode 100644 new mode 100755 diff --git a/middleware/vendor/SocInterface.h b/middleware/vendor/SocInterface.h old mode 100644 new mode 100755 index cdf88edb0..b5da5b3ce --- a/middleware/vendor/SocInterface.h +++ b/middleware/vendor/SocInterface.h @@ -296,7 +296,7 @@ class SocInterface * @param name Element name. * @return True if it's a video sink, false otherwise. */ - virtual bool IsVideoSink(const char* name) = 0; + virtual bool IsVideoSink(const char* name, GstElement *element = nullptr) = 0; /** * @brief Check if the given name is an audio sink or audio decoder. @@ -310,7 +310,7 @@ class SocInterface * @param name Element name. * @return True if it's a video decoder, false otherwise. */ - virtual bool IsVideoDecoder(const char* name) = 0; + virtual bool IsVideoDecoder(const char* name, GstElement* element = nullptr) = 0; /** * @brief Configure the audio sink. @@ -326,7 +326,7 @@ class SocInterface * @param name Element name * @return True if it's an audio or video decoder, false otherwise. */ - virtual bool IsAudioOrVideoDecoder(const char* name) = 0; + virtual bool IsAudioOrVideoDecoder(const char* name, GstElement* element = nullptr) = 0; /** * @brief Disable asynchronous audio. diff --git a/middleware/vendor/amlogic/AmlogicSocInterface.cpp b/middleware/vendor/amlogic/AmlogicSocInterface.cpp old mode 100644 new mode 100755 index f6c8c3a5a..34ee295cb --- a/middleware/vendor/amlogic/AmlogicSocInterface.cpp +++ b/middleware/vendor/amlogic/AmlogicSocInterface.cpp @@ -162,11 +162,30 @@ void AmlogicSocInterface::SetAC4Tracks(GstElement *src, int trackId) * @param name Element name. * @return True if it's a video sink, false otherwise. */ + bool AmlogicSocInterface::IsVideoSink(const char* name) { return name && StartsWith(name, "westerossink"); } +bool AmlogicSocInterface::IsVideoSink(const char* name, GstElement *element) +{ + // First check if it's a sink at all + if (!GST_OBJECT_FLAG_IS_SET(element, GST_ELEMENT_FLAG_SINK)) { + return FALSE; + } + + // Get element factory and check class metadata + GstElementFactory *factory = gst_element_get_factory(element); + if (!factory) return FALSE; + + const gchar *klass = gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS); + if (!klass) return FALSE; + + // Video sinks have both "Sink" and "Video" in their klass + return (strstr(klass, "Sink") != NULL && strstr(klass, "Video") != NULL); +} + /** * @brief Get SVP Context * @param svpCtx svp context @@ -208,6 +227,20 @@ bool AmlogicSocInterface::IsVideoDecoder(const char* name) return name && StartsWith(name, "westerossink"); } +bool AmlogicSocInterface::IsVideoDecoder(const char* name, GstElement* element) +{ + // Get element factory + GstElementFactory *factory = gst_element_get_factory(element); + if (!factory) return FALSE; + + // Get class metadata + const gchar *klass = gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS); + if (!klass) return FALSE; + + // Decoders usually have "Decoder" in their klass + return (strstr(klass, "Decoder") != NULL); +} + /** * @brief Configure the audio sink. * @param audio_sink Pointer to the audio sink element. @@ -248,6 +281,20 @@ bool AmlogicSocInterface::IsAudioOrVideoDecoder(const char* name) return name && StartsWith(name, "westerossink"); } +bool AmlogicSocInterface::IsAudioOrVideoDecoder(const char* name, GstElement* element) +{ + // Get element factory + GstElementFactory *factory = gst_element_get_factory(element); + if (!factory) return FALSE; + + // Get class metadata + const gchar *klass = gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS); + if (!klass) return FALSE; + + // Any decoder (audio or video) will have "Decoder" in its klass + return (strstr(klass, "Decoder") != NULL); +} + /** * @brief Set playback flags. * diff --git a/middleware/vendor/amlogic/AmlogicSocInterface.h b/middleware/vendor/amlogic/AmlogicSocInterface.h old mode 100644 new mode 100755 index 3d5373040..3a6d61672 --- a/middleware/vendor/amlogic/AmlogicSocInterface.h +++ b/middleware/vendor/amlogic/AmlogicSocInterface.h @@ -135,6 +135,8 @@ class AmlogicSocInterface : public SocInterface */ bool IsVideoSink(const char* name)override; + bool IsVideoSink(const char* name, GstElement *element)override; + /** * @brief Check if the given name is an audio sink or audio decoder. * @param name Element name. @@ -147,7 +149,7 @@ class AmlogicSocInterface : public SocInterface * @param name Element name. * @return True if it's a video decoder, false otherwise. */ - bool IsVideoDecoder(const char* name)override; + bool IsVideoDecoder(const char* name, GstElement* element)override; /** * @brief Configure the audio sink. @@ -166,6 +168,8 @@ class AmlogicSocInterface : public SocInterface */ bool IsAudioOrVideoDecoder(const char* name)override; + bool IsAudioOrVideoDecoder(const char* name, GstElement* element)override; + /** * @brief Retrieves the CC decoder handle. * @param[out] dec_handle Pointer to store the retrieved CC decoder handle. From f8e6c622e9c30cb7ae7db20cad8ac4907e4646e5 Mon Sep 17 00:00:00 2001 From: aahmed878 Date: Thu, 13 Nov 2025 16:34:41 +0000 Subject: [PATCH 2/3] RDKEMW-10411: aamp-cli does not work in non westeros sink decoder-sink in Polaris (Amlogic) Signed-off-by: aahmed878 --- middleware/InterfacePlayerRDK.cpp | 2 +- middleware/vendor/amlogic/AmlogicSocInterface.cpp | 12 ++++++------ middleware/vendor/amlogic/AmlogicSocInterface.h | 2 -- middleware/vendor/brcm/BrcmSocInterface.cpp | 6 +++--- middleware/vendor/brcm/BrcmSocInterface.h | 6 +++--- middleware/vendor/default/DefaultSocInterface.cpp | 6 +++--- middleware/vendor/default/DefaultSocInterface.h | 6 +++--- middleware/vendor/realtek/RealtekSocInterface.cpp | 6 +++--- middleware/vendor/realtek/RealtekSocInterface.h | 6 +++--- 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/middleware/InterfacePlayerRDK.cpp b/middleware/InterfacePlayerRDK.cpp index 1a2438d54..2b6c93901 100755 --- a/middleware/InterfacePlayerRDK.cpp +++ b/middleware/InterfacePlayerRDK.cpp @@ -4061,7 +4061,7 @@ static gboolean VideoDecoderPtsCheckerForEOS(gpointer user_data) * @param[in] pInterfacePlayerRDK pointer to InterfacePlayerRDK instance * @retval TRUE if element name is that of audio sink or audio decoder */ -bool GstPlayer_isAudioSinkOrAudioDecoder(const char* name, InterfacePlayerRDK * pInterfacePlayerRDK) +bool GstPlayer_isAudioSinkOrAudioDecoder(const char* name, InterfacePlayerRDK * pInterfacePlayerRDK, GstElement* element) { InterfacePlayerPriv* privatePlayer = pInterfacePlayerRDK->GetPrivatePlayer(); return privatePlayer->socInterface->IsAudioSinkOrAudioDecoder(name); diff --git a/middleware/vendor/amlogic/AmlogicSocInterface.cpp b/middleware/vendor/amlogic/AmlogicSocInterface.cpp index 34ee295cb..5a92601e8 100755 --- a/middleware/vendor/amlogic/AmlogicSocInterface.cpp +++ b/middleware/vendor/amlogic/AmlogicSocInterface.cpp @@ -163,11 +163,11 @@ void AmlogicSocInterface::SetAC4Tracks(GstElement *src, int trackId) * @return True if it's a video sink, false otherwise. */ -bool AmlogicSocInterface::IsVideoSink(const char* name) +/*bool AmlogicSocInterface::IsVideoSink(const char* name) { return name && StartsWith(name, "westerossink"); } - +*/ bool AmlogicSocInterface::IsVideoSink(const char* name, GstElement *element) { // First check if it's a sink at all @@ -222,11 +222,11 @@ bool AmlogicSocInterface::IsAudioSinkOrAudioDecoder(const char* name) * @param isWesteros Westeros flag. * @return True if it's a video decoder, false otherwise. */ -bool AmlogicSocInterface::IsVideoDecoder(const char* name) +/*bool AmlogicSocInterface::IsVideoDecoder(const char* name) { return name && StartsWith(name, "westerossink"); } - +*/ bool AmlogicSocInterface::IsVideoDecoder(const char* name, GstElement* element) { // Get element factory @@ -276,11 +276,11 @@ bool AmlogicSocInterface::ConfigureAudioSink(GstElement **audio_sink, GstObject * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ -bool AmlogicSocInterface::IsAudioOrVideoDecoder(const char* name) +/*bool AmlogicSocInterface::IsAudioOrVideoDecoder(const char* name) { return name && StartsWith(name, "westerossink"); } - +*/ bool AmlogicSocInterface::IsAudioOrVideoDecoder(const char* name, GstElement* element) { // Get element factory diff --git a/middleware/vendor/amlogic/AmlogicSocInterface.h b/middleware/vendor/amlogic/AmlogicSocInterface.h index 3a6d61672..25037a6b8 100755 --- a/middleware/vendor/amlogic/AmlogicSocInterface.h +++ b/middleware/vendor/amlogic/AmlogicSocInterface.h @@ -133,7 +133,6 @@ class AmlogicSocInterface : public SocInterface * @param name Element name. * @return True if it's a video sink, false otherwise. */ - bool IsVideoSink(const char* name)override; bool IsVideoSink(const char* name, GstElement *element)override; @@ -166,7 +165,6 @@ class AmlogicSocInterface : public SocInterface * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ - bool IsAudioOrVideoDecoder(const char* name)override; bool IsAudioOrVideoDecoder(const char* name, GstElement* element)override; diff --git a/middleware/vendor/brcm/BrcmSocInterface.cpp b/middleware/vendor/brcm/BrcmSocInterface.cpp index ebd0a9f55..dba7a24e4 100644 --- a/middleware/vendor/brcm/BrcmSocInterface.cpp +++ b/middleware/vendor/brcm/BrcmSocInterface.cpp @@ -117,7 +117,7 @@ GstElement* BrcmSocInterface::GetVideoSink(GstElement* sinkbin) * @param name Element name. * @return True if it's a video sink, false otherwise. */ -bool BrcmSocInterface::IsVideoSink(const char* name) +bool BrcmSocInterface::IsVideoSink(const char* name, GstElement* element) { return name && ( StartsWith(name, "brcmvideosink") || @@ -139,7 +139,7 @@ bool BrcmSocInterface::IsAudioSinkOrAudioDecoder(const char* name) * @param name Element name. * @return True if it's a video decoder, false otherwise. */ -bool BrcmSocInterface::IsVideoDecoder(const char* name) +bool BrcmSocInterface::IsVideoDecoder(const char* name, GstElement* element) { return name && ( StartsWith(name, "westerossink") || @@ -175,7 +175,7 @@ bool BrcmSocInterface::ConfigureAudioSink(GstElement **audio_sink, GstObject *sr * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ -bool BrcmSocInterface::IsAudioOrVideoDecoder(const char* name) +bool BrcmSocInterface::IsAudioOrVideoDecoder(const char* name, GstElement* element) { return name && ( StartsWith(name, "brcmvideodecoder") || diff --git a/middleware/vendor/brcm/BrcmSocInterface.h b/middleware/vendor/brcm/BrcmSocInterface.h index 5af6c48a8..3a2df941d 100644 --- a/middleware/vendor/brcm/BrcmSocInterface.h +++ b/middleware/vendor/brcm/BrcmSocInterface.h @@ -91,7 +91,7 @@ class BrcmSocInterface : public SocInterface * @param name Element name. * @return True if it's a video sink, false otherwise. */ - bool IsVideoSink(const char* name)override; + bool IsVideoSink(const char* name, GstElement *element)override; /** * @brief Check if the given name is an audio sink or audio decoder. @@ -105,7 +105,7 @@ class BrcmSocInterface : public SocInterface * @param name Element name. * @return True if it's a video decoder, false otherwise. */ - bool IsVideoDecoder(const char* name)override; + bool IsVideoDecoder(const char* name, GstElement *element)override; /** * @brief Configure the audio sink. @@ -122,7 +122,7 @@ class BrcmSocInterface : public SocInterface * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ - bool IsAudioOrVideoDecoder(const char* name) override; + bool IsAudioOrVideoDecoder(const char* name, GstElement* element) override; /** * @brief Set playback flags. diff --git a/middleware/vendor/default/DefaultSocInterface.cpp b/middleware/vendor/default/DefaultSocInterface.cpp index 0acc9ecfb..1b8b1294a 100644 --- a/middleware/vendor/default/DefaultSocInterface.cpp +++ b/middleware/vendor/default/DefaultSocInterface.cpp @@ -66,7 +66,7 @@ void DefaultSocInterface::SetAC4Tracks(GstElement *src, int trackId) g_object_set(src, "ac4-presentation-group-index", trackId, NULL); } -bool DefaultSocInterface::IsVideoSink(const char* name) +bool DefaultSocInterface::IsVideoSink(const char* name, GstElement* element) { return name && ( StartsWith(name,"rialtomsevideosink") || @@ -78,7 +78,7 @@ bool DefaultSocInterface::IsVideoSink(const char* name) * @param name Element name. * @return True if it's a video decoder, false otherwise. */ -bool DefaultSocInterface::IsVideoDecoder(const char* name) +bool DefaultSocInterface::IsVideoDecoder(const char* name, GstElement* element) { return name && ( StartsWith(name,"rialtomsevideosink") || @@ -90,7 +90,7 @@ bool DefaultSocInterface::IsVideoDecoder(const char* name) * @param name Element name. * @return True if it's an audio or video decoder, false otherwise. */ -bool DefaultSocInterface::IsAudioOrVideoDecoder(const char* name) +bool DefaultSocInterface::IsAudioOrVideoDecoder(const char* name, GstElement* element) { return name && ( StartsWith(name,"rialtomsevideosink") || diff --git a/middleware/vendor/default/DefaultSocInterface.h b/middleware/vendor/default/DefaultSocInterface.h index 29a1aa0ff..366b4d829 100644 --- a/middleware/vendor/default/DefaultSocInterface.h +++ b/middleware/vendor/default/DefaultSocInterface.h @@ -89,7 +89,7 @@ class DefaultSocInterface : public SocInterface * @param name Element name. * @return True if it's a video sink, false otherwise. */ - bool IsVideoSink(const char* name) override; + bool IsVideoSink(const char* name, GstElement *element) override; /** * @brief Check if the given name is an audio sink or audio decoder. @@ -103,7 +103,7 @@ class DefaultSocInterface : public SocInterface * @param name Element name. * @return True if it's a video decoder, false otherwise. */ - bool IsVideoDecoder(const char* name) override; + bool IsVideoDecoder(const char* name, GstElement *element) override; /** * @brief Configure the audio sink. @@ -120,7 +120,7 @@ class DefaultSocInterface : public SocInterface * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ - bool IsAudioOrVideoDecoder(const char* name) override; + bool IsAudioOrVideoDecoder(const char* name, GstElement *element) override; /** * @brief Set playback flags. diff --git a/middleware/vendor/realtek/RealtekSocInterface.cpp b/middleware/vendor/realtek/RealtekSocInterface.cpp index d4c0af757..0dd2f3352 100644 --- a/middleware/vendor/realtek/RealtekSocInterface.cpp +++ b/middleware/vendor/realtek/RealtekSocInterface.cpp @@ -127,7 +127,7 @@ void RealtekSocInterface::SetAC4Tracks(GstElement *src, int trackId) * @param name Element name. * @return True if it's a video sink, false otherwise. */ -bool RealtekSocInterface::IsVideoSink(const char* name) +bool RealtekSocInterface::IsVideoSink(const char* name, GstElement* element) { return name && ( StartsWith(name, "westerossink") || @@ -152,7 +152,7 @@ bool RealtekSocInterface::IsAudioSinkOrAudioDecoder(const char* name) * @param name Element name. * @return True if it's a video decoder, false otherwise. */ -bool RealtekSocInterface::IsVideoDecoder(const char* name) +bool RealtekSocInterface::IsVideoDecoder(const char* name, GstElement* element) { return name && ( StartsWith(name, "omxwmvdec") || @@ -197,7 +197,7 @@ bool RealtekSocInterface::ConfigureAudioSink(GstElement **audio_sink, GstObject * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ -bool RealtekSocInterface::IsAudioOrVideoDecoder(const char* name) +bool RealtekSocInterface::IsAudioOrVideoDecoder(const char* name, GstElement* element) { return name && StartsWith(name, "omx"); } diff --git a/middleware/vendor/realtek/RealtekSocInterface.h b/middleware/vendor/realtek/RealtekSocInterface.h index 50f2a651c..bda1d8689 100644 --- a/middleware/vendor/realtek/RealtekSocInterface.h +++ b/middleware/vendor/realtek/RealtekSocInterface.h @@ -138,7 +138,7 @@ class RealtekSocInterface : public SocInterface * @param name Element name. * @return True if it's a video sink, false otherwise. */ - bool IsVideoSink(const char* name)override; + bool IsVideoSink(const char* name, GstElement *element)override; /** * @brief Check if the given name is an audio sink or audio decoder. @@ -152,7 +152,7 @@ class RealtekSocInterface : public SocInterface * @param name Element name. * @return True if it's a video decoder, false otherwise. */ - bool IsVideoDecoder(const char* name)override; + bool IsVideoDecoder(const char* name, GstElement *element)override; /** * @brief Configure the audio sink. @@ -169,7 +169,7 @@ class RealtekSocInterface : public SocInterface * @param IsWesteros Westeros flag. * @return True if it's an audio or video decoder, false otherwise. */ - bool IsAudioOrVideoDecoder(const char* name)override; + bool IsAudioOrVideoDecoder(const char* name, GstElement* element)override; /** * @brief Disable asynchronous audio. From c02b4d911cf94c432216ae4b175395674cddd8d0 Mon Sep 17 00:00:00 2001 From: aahmed878 Date: Fri, 14 Nov 2025 07:59:20 +0000 Subject: [PATCH 3/3] RDKEMW-10411: aamp-cli does not work in non westeros sink decoder-sink in Polaris (Amlogic) Signed-off-by: aahmed878 --- middleware/vendor/amlogic/AmlogicSocInterface.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/middleware/vendor/amlogic/AmlogicSocInterface.cpp b/middleware/vendor/amlogic/AmlogicSocInterface.cpp index 5a92601e8..bb9bfe834 100755 --- a/middleware/vendor/amlogic/AmlogicSocInterface.cpp +++ b/middleware/vendor/amlogic/AmlogicSocInterface.cpp @@ -237,8 +237,8 @@ bool AmlogicSocInterface::IsVideoDecoder(const char* name, GstElement* element) const gchar *klass = gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS); if (!klass) return FALSE; - // Decoders usually have "Decoder" in their klass - return (strstr(klass, "Decoder") != NULL); +return (strstr(klass, "Decoder") != NULL) || + (strstr(klass, "Sink") != NULL && strstr(klass, "Video") != NULL); } /** @@ -292,7 +292,8 @@ bool AmlogicSocInterface::IsAudioOrVideoDecoder(const char* name, GstElement* el if (!klass) return FALSE; // Any decoder (audio or video) will have "Decoder" in its klass - return (strstr(klass, "Decoder") != NULL); +return (strstr(klass, "Decoder") != NULL) || + (strstr(klass, "Sink") != NULL && strstr(klass, "Video") != NULL); } /**