Add filling channel-mapping-family for opusdec 59/276159/9
authorJeongyoon Nam <just.nam@samsung.com>
Fri, 10 Jun 2022 07:54:52 +0000 (16:54 +0900)
committerJeongyoon Nam <just.nam@samsung.com>
Thu, 30 Jun 2022 04:41:05 +0000 (13:41 +0900)
Additionally,
revert the previous commit "Change type of GstRank"

[Version] 0.0.12
[Issue Type] Add

Change-Id: I757d05a0834f4790aca72ce9082168d63c68cdb3

packaging/libtrackrenderer.spec
src/include_internal/trackrenderer/core/pipeline.hpp
src/include_internal/trackrenderer/core/track.h
src/include_internal/trackrenderer/trackrenderer.h
src/trackrenderer.cpp

index f51666ac7244f67658c9062142a92ec9e9cb7a00..6731c5f444eb1b27fa88e3590aa7f51e4051e947 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libtrackrenderer
 Summary:    new multimedia streaming player trackrenderer
-Version:    0.0.11
+Version:    0.0.12
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 67d0895dcb7e4cd5efe9b8858bface8b162bb477..674956f6faa0e69307d02ce2b265733950333dd2 100644 (file)
@@ -129,7 +129,7 @@ class Pipeline : private boost::noncopyable {
 
     /* get all compatible factories for caps */
     factories =
-      gst_element_factory_list_get_elements (type, GST_RANK_NONE);
+      gst_element_factory_list_get_elements (type, GST_RANK_MARGINAL);
     if (factories) {
       filtered =
           gst_element_factory_list_filter (factories, caps, GST_PAD_SINK,
index 799d113619f0df9dc35c89575d058ba01b8ed6bc..0c48e6a862181e61db9a6d203f27afffbb9651df 100644 (file)
@@ -129,4 +129,4 @@ using SubtitleAttrListPtr = std::unique_ptr<SubtitleAttrList>;
 
 }  // namespace plusplayer
 
-#endif  // __PLUSPLAYER_TRACKRENDERER_CORE_TRACK_H__
\ No newline at end of file
+#endif  // __PLUSPLAYER_TRACKRENDERER_CORE_TRACK_H__
index a5117b24ffc6ae9cedb41f92ee6b2c7e5357c395..ec14878910e8dcaab991f4db1c34eeec8679a13a 100644 (file)
@@ -317,6 +317,7 @@ class TrackRenderer : public ResourceConflictListener,
   void CompleteSeeking_(void);
   bool HasSubtitleOnly_() const;
   bool ActivateAudioPipeline(GstCaps* caps);
+  void SetOpusChannelMappingFamily(const GstCapsWrapper& caps);
 
  private:
   EventListener* eventlistener_ = nullptr;  // eventlistener is Defaultplayer
index 7bef543ba7aca7c22af9af3e29adbb9c8a880be9..36d44faa7c71d185707750f008f2fc57d70960ed 100644 (file)
@@ -1204,11 +1204,31 @@ bool TrackRenderer::CreateDecodedVideoPipeline_(const Track* track) {
   return true;
 }
 
+void TrackRenderer::SetOpusChannelMappingFamily(const GstCapsWrapper& caps) {
+  auto p = gst_caps_get_structure((GstCaps*)caps.GetCaps_(), 0);
+  gint channels = 0;
+  gst_structure_get_int(p, "channels", &channels);
+
+  if (channels < 1 || channels > 8) {
+    TRACKRENDERER_WARN("skip setting channel-mapping-family, channels : %d", channels);
+    return;
+  }
+
+  int channel_mapping_family = (channels <= 2) ? 0 : 1;
+
+  TRACKRENDERER_INFO("set channel-mapping-family to %d", channel_mapping_family);
+  caps.SetValue("channel-mapping-family", G_TYPE_INT, channel_mapping_family);
+}
+
 bool TrackRenderer::CreateAudioPipeline_(const Track* track) {
   TRACKRENDERER_ENTER;
 
   CreateAppSrc_(kTrackTypeAudio, track->mimetype);
   auto caps = caps_builder_.Build(*track, false);
+
+  if (track->mimetype.find("audio/x-opus") != std::string::npos)
+    SetOpusChannelMappingFamily(caps);
+
   if (!pipeline_->FactoryMake(Elements::kParseAudio, (GstCaps*)caps.GetCaps_(),
                           GST_ELEMENT_FACTORY_TYPE_PARSER, NULL))
     TRACKRENDERER_ERROR("fail to make parser");