From: Eunhye Choi Date: Tue, 5 Sep 2023 08:46:39 +0000 (+0900) Subject: make audio decoder according to the use_swdecoder option X-Git-Tag: accepted/tizen/unified/20230913.172608~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F06%2F298306%2F2;p=platform%2Fcore%2Fmultimedia%2Ftrackrenderer.git make audio decoder according to the use_swdecoder option - make audio decoder according to the use_swdecoder option which is set by SetTrack or Activate interface [Version] 0.0.35 Change-Id: I95ba1cb69b6b1236f834037e53ebb586fa6c6238 --- diff --git a/packaging/libtrackrenderer.spec b/packaging/libtrackrenderer.spec index d9b25b2..b639bc3 100644 --- a/packaging/libtrackrenderer.spec +++ b/packaging/libtrackrenderer.spec @@ -1,6 +1,6 @@ Name: libtrackrenderer Summary: new multimedia streaming player trackrenderer -Version: 0.0.34 +Version: 0.0.35 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/trackrenderer.cpp b/src/trackrenderer.cpp index 0bf0dcf..2cc3521 100644 --- a/src/trackrenderer.cpp +++ b/src/trackrenderer.cpp @@ -1084,7 +1084,6 @@ bool TrackRenderer::CreateVideoPipeline_(const Track* track) { gstguard::make_guard(pipeline_->GetSrcPadCaps(Elements::kParseVideo)); GstElementFactoryListType factory_type = GST_ELEMENT_FACTORY_TYPE_DECODER; - if (!track->use_swdecoder && !internal::GetIniValue(properties_, "use_default_video_codec_sw")) factory_type |= GST_ELEMENT_FACTORY_TYPE_HARDWARE; @@ -1223,9 +1222,14 @@ bool TrackRenderer::CreateAudioPipeline_(const Track* track) { auto parse_caps = gstguard::make_guard(pipeline_->GetSrcPadCaps(Elements::kParseAudio)); + + GstElementFactoryListType factory_type = GST_ELEMENT_FACTORY_TYPE_DECODER; + if (!track->use_swdecoder) + factory_type |= GST_ELEMENT_FACTORY_TYPE_HARDWARE; + if (!pipeline_->FactoryMake(Elements::kDecAudio, static_cast(parse_caps ? parse_caps.get() : caps.GetCaps_()), - GST_ELEMENT_FACTORY_TYPE_DECODER, NULL)) { + factory_type, NULL)) { const ErrorType err = ErrorType::kNotSupportedAudioCodec; TRACKRENDERER_ERROR("fail to make decoder"); eventlistener_->OnError(err); @@ -2096,13 +2100,22 @@ bool TrackRenderer::ActivateAudioPipeline(GstCaps * caps) { pipeline_->FactoryMake(Elements::kParseAudio, caps, GST_ELEMENT_FACTORY_TYPE_PARSER, NULL); + Track track; + if (!track_util::GetActiveTrack(trackinfo_, kTrackTypeAudio, &track)) { + TRACKRENDERER_ERROR("Failed to find active audio track."); + return false; + } + GstElementFactoryListType factory_type = GST_ELEMENT_FACTORY_TYPE_DECODER; + if (!track.use_swdecoder) + factory_type |= GST_ELEMENT_FACTORY_TYPE_HARDWARE; + auto parse_caps = gstguard::make_guard(pipeline_->GetSrcPadCaps(Elements::kParseAudio)); auto parse_caps_str = gstguard::make_guard(gst_caps_to_string(parse_caps.get())); TRACKRENDERER_INFO("parse caps %s", parse_caps_str.get()); if (!pipeline_->FactoryMake(Elements::kDecAudio, (GstCaps*)parse_caps.get(), - GST_ELEMENT_FACTORY_TYPE_DECODER, NULL)) { + factory_type, NULL)) { const ErrorType err = ErrorType::kNotSupportedAudioCodec; eventlistener_->OnError(err); return false; @@ -2213,7 +2226,6 @@ bool TrackRenderer::Activate(TrackType type, const Track& track) { gstguard::make_guard(pipeline_->GetSrcPadCaps(Elements::kParseVideo)); GstElementFactoryListType factory_type = GST_ELEMENT_FACTORY_TYPE_DECODER; - if (!track.use_swdecoder && !internal::GetIniValue(properties_, "use_default_video_codec_sw")) factory_type |= GST_ELEMENT_FACTORY_TYPE_HARDWARE; @@ -2797,8 +2809,13 @@ bool TrackRenderer::ActivateAudio_() { auto caps = caps_builder_.Build(track, internal::IsDrmEmeElementNecessary( drm_property_, track.mimetype)); + + GstElementFactoryListType factory_type = GST_ELEMENT_FACTORY_TYPE_DECODER; + if (!track.use_swdecoder) + factory_type |= GST_ELEMENT_FACTORY_TYPE_HARDWARE; + pipeline_->FactoryMake(Elements::kDecAudio, (GstCaps*)caps.GetCaps_(), - GST_ELEMENT_FACTORY_TYPE_DECODER, NULL); + factory_type, NULL); pipeline_->FactoryMake(Elements::kSinkAudio, kAudioSinkName, NULL); if (volume_ != kVolumeNone) { SetVolume_();