From: Seungbae Shin Date: Thu, 30 Nov 2023 08:28:47 +0000 (+0900) Subject: fixup! Support time unit type (millisecond, microsecond) X-Git-Tag: accepted/tizen/unified/20231205.171421^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F03%2F302103%2F7;p=platform%2Fcore%2Fmultimedia%2Ftrackrenderer.git fixup! Support time unit type (millisecond, microsecond) refactoring by introducing immutable TimeConverter class to handle various time conversion. Change-Id: I4eb6be8fd7a181bb3a2377ed84ebfd3b97acc9cd --- diff --git a/src/include_internal/trackrenderer/trackrenderer.h b/src/include_internal/trackrenderer/trackrenderer.h index 8afac69..e769d4e 100644 --- a/src/include_internal/trackrenderer/trackrenderer.h +++ b/src/include_internal/trackrenderer/trackrenderer.h @@ -209,6 +209,36 @@ class TrackRenderer : public ResourceConflictListener, kUs, }; + class TimeConverter { + public: + explicit TimeConverter(TimeUnit timeUnit = TimeUnit::kMs) + : unit_(timeUnit) {} + ~TimeConverter() = default; + + gint64 timeToNs_(uint64_t time) const { + return static_cast(time * std::get<0>(timeMap_.at(unit_))); + } + + uint64_t nsToTime_(gint64 ns) const { + return static_cast(ns / std::get<0>(timeMap_.at(unit_))); + } + + const std::string& timeUnitStr_() const { + return std::get<1>(timeMap_.at(unit_)); + } + + const char* timeUnitCStr_() const { + return std::get<1>(timeMap_.at(unit_)).c_str(); + } + + private: + const std::map> timeMap_ { + { TimeUnit::kMs, { GST_MSECOND, "ms" } }, + { TimeUnit::kUs, { GST_USECOND, "us" } } + }; + const TimeUnit unit_ { TimeUnit::kMs }; + }; + struct TrackContext { int index = kInvalidTrackIndex; bool is_enough_data = false; @@ -341,10 +371,6 @@ class TrackRenderer : public ResourceConflictListener, void EnableVideoHole_(); void ApplySoundStreamInfo_(); - const char* ConvertTimeUnitToString_(); - gint64 ConvertTimeUnitToNS_(uint64_t time); - uint64_t ConvertNsToTimeUnit_(gint64 time); - private: EventListener* eventlistener_ = nullptr; // eventlistener is Defaultplayer std::mutex resource_m_; @@ -394,7 +420,7 @@ class TrackRenderer : public ResourceConflictListener, std::map config_setter_table_; int64_t start_time = -1; - TimeUnit time_unit_type_ = TimeUnit::kMs; + std::unique_ptr time_converter_; private: static const Attributes kAttributes_; diff --git a/src/trackrenderer.cpp b/src/trackrenderer.cpp index 7faa10b..4b659b5 100644 --- a/src/trackrenderer.cpp +++ b/src/trackrenderer.cpp @@ -458,6 +458,7 @@ TrackRenderer::TrackRenderer() noexcept : caps_builder_(kCapsRecipes_) { playback_info_ = debug::PlayinfoSetter::Create(); SetDefaultAttributeValue_(); InitConfigSetterTable_(); + time_converter_.reset(new TimeConverter()); } TrackRenderer::~TrackRenderer() {} @@ -683,9 +684,9 @@ bool TrackRenderer::Seek(uint64_t time, "async", async); } - gint64 start = ConvertTimeUnitToNS_(time), stop = GST_CLOCK_TIME_NONE; + gint64 start = time_converter_->timeToNs_(time), stop = GST_CLOCK_TIME_NONE; TRACKRENDERER_INFO("[%p] > target %" PRIu64 " %s rate [%lf]", this, time, - ConvertTimeUnitToString_(), playback_rate); + time_converter_->timeUnitCStr_(), playback_rate); if (playback_rate < 0) { stop = start; @@ -737,17 +738,17 @@ bool TrackRenderer::Seek(uint64_t time, else flags |= GST_SEEK_FLAG_KEY_UNIT; - auto convert_time = ConvertTimeUnitToNS_(time); + auto convert_time = time_converter_->timeToNs_(time); TRACKRENDERER_INFO("[%p] > target %" PRIu64 " %s rate [%lf] mute [%d]", - this, convert_time, ConvertTimeUnitToString_(), + this, convert_time, time_converter_->timeUnitCStr_(), playback_rate, audio_mute); if (!pipeline_->Seek(playback_rate, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH), GST_SEEK_TYPE_SET, convert_time, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { TRACKRENDERER_ERROR("[%p] > Fail to seek to [%" PRIu64 "] %s", - this, convert_time, ConvertTimeUnitToString_()); + this, convert_time, time_converter_->timeUnitCStr_()); } is_seeking_ = true; @@ -1685,7 +1686,7 @@ gboolean TrackRenderer::GstSeekDataCb_(GstElement* element, guint64 offset, return true; trackrenderer->eventlistener_->OnSeekData(type, - trackrenderer->ConvertNsToTimeUnit_(static_cast(offset))); + trackrenderer->time_converter_->nsToTime_(static_cast(offset))); TRACKRENDERER_LEAVE; return true; @@ -2274,14 +2275,12 @@ bool TrackRenderer::GetPlayingTime_(uint64_t* curtime) { bool ret_audio = pipeline_->QueryPosition(Elements::kSinkAudio, GST_FORMAT_TIME, &pos_audio); if (ret_video || ret_audio) { - last_position_ = *curtime = pos_audio > pos_video - ? (ConvertNsToTimeUnit_(pos_audio)) - : (ConvertNsToTimeUnit_(pos_video)); - } else { - *curtime = last_position_; + last_position_ = + time_converter_->nsToTime_(pos_audio > pos_video ? pos_audio : pos_video); } + *curtime = last_position_; // TRACKRENDERER_INFO("playing time [%" PRIu64 " %s]", - // *curtime, ConvertTimeUnitToString_()); + // *curtime, time_converter_->timeUnitCStr_()); return true; } @@ -2716,12 +2715,12 @@ bool TrackRenderer::SetStartRenderingTime_(const boost::any& value) { bool TrackRenderer::SetPlayerTimeUnitType_(const boost::any& value) { std::uint32_t val = boost::any_cast(value); + + time_converter_.reset(new TimeConverter(val == 0 ? TimeUnit::kMs : TimeUnit::kUs)); + TRACKRENDERER_ERROR_P(this, " PlayerTimeUnitType [%s]", - (val == 0) ? "Ms" : "Us"); - if (val == 0) - time_unit_type_ = TimeUnit::kMs; - else if (val == 1) - time_unit_type_ = TimeUnit::kUs; + time_converter_->timeUnitCStr_()); + return true; } @@ -3067,22 +3066,6 @@ void TrackRenderer::EnableVideoHole_() { } } -const char* TrackRenderer::ConvertTimeUnitToString_() { - return time_unit_type_ == TimeUnit::kUs ? "us" : "ms"; -} - -gint64 TrackRenderer::ConvertTimeUnitToNS_(uint64_t time) { - return time_unit_type_ == TimeUnit::kUs ? - static_cast(time * GST_USECOND) : - static_cast(time * GST_MSECOND); -} - -uint64_t TrackRenderer::ConvertNsToTimeUnit_(gint64 time) { - return time_unit_type_ == TimeUnit::kUs ? - static_cast(time / GST_USECOND) : - static_cast(time / GST_MSECOND); -} - } // namespace trackrenderer } // namespace plusplayer