Add attr to set render time offset 31/291531/3
authorEunhye Choi <eunhae1.choi@samsung.com>
Tue, 18 Apr 2023 05:37:52 +0000 (14:37 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Tue, 18 Apr 2023 07:24:38 +0000 (16:24 +0900)
[Version] 0.0.21

- support kLowLatencyModeDisablePreroll latency mode
- add attribute to set render time offset
- remove vconf dependency

Change-Id: I65966893f8cfedb6ab779feec10f37241ee4885a

packaging/libtrackrenderer.spec
src/CMakeLists.txt
src/include_internal/trackrenderer/trackrenderer.h
src/include_internal/trackrenderer/trackrenderer_attr.h
src/include_internal/trackrenderer/trackrenderer_debug.h
src/trackrenderer.cpp
src/trackrenderer_attr.cpp
src/trackrenderer_debug.cpp

index 1ce4d65e2e2e767d5e56b47883565f1bae6d60d2..7dcd8af4b3ad83bff77cb7a8709dc01a981b6c9a 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libtrackrenderer
 Summary:    new multimedia streaming player trackrenderer
-Version:    0.0.20
+Version:    0.0.21
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
@@ -21,8 +21,6 @@ BuildRequires:  pkgconfig(ecore-wl2)
 BuildRequires:  pkgconfig(wayland-client)
 BuildRequires:  pkgconfig(tizen-extension-client)
 BuildRequires:  pkgconfig(jsoncpp)
-BuildRequires:  pkgconfig(icu-i18n)
-BuildRequires:  pkgconfig(vconf)
 BuildRequires:  pkgconfig(capi-system-info)
 BuildRequires:  pkgconfig(gio-2.0)
 BuildRequires:  pkgconfig(libtbm)
index eedc7c991146124b8b637a891b1c35d7436f2801..a75306097a35482660b2773c253d6a1c8b64b557 100644 (file)
@@ -13,7 +13,6 @@ SET(${fw_name}_CXXFLAGS "-Wall -Werror -std=c++11 -fPIC -Wl,-z,relro -fstack-pro
 
 SET(dependents "gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-video-1.0 gstreamer-allocators-1.0"
                "boost"
-               "vconf"
                "elementary ecore ecore-wl2"
                "libtbm"
                "jsoncpp"
index 887d936ebbd32b81e46c6e0bf5edf42ac35828c0..817cdb201b4d58a957d667ab746a7ba66aedb431 100644 (file)
@@ -182,8 +182,15 @@ class TrackRenderer : public ResourceConflictListener,
     kLowLatencyModeNone = 0x0000,
     kLowLatencyModeAudio = 0x0001,
     kLowLatencyModeVideo = 0x0010,
+    kLowLatencyModeVideoDistortionConcealment =
+      kLowLatencyModeVideo | 0x0020,
     kLowLatencyModeDisableAVSync = 0x0100,
-    kLowLatencyModeDisableVideoQuality = 0x1000
+    kLowLatencyModeDisablePreroll = 0x0200,
+    kLowLatencyModeDisableVideoQuality = 0x1000,
+    kLowLatencyModeEnableGameMode =
+      kLowLatencyModeAudio | kLowLatencyModeVideo | 0x2000,
+    kLowLatencyModeEnableGameModeWithFixedResolution =
+      kLowLatencyModeEnableGameMode | 0x4000
   };
 
   enum class SubState {
index 6f3e17ef9654453838c23aca33f1a068636a4889..f09451d9fce8b1d86941081b9c10b3d1100dce4c 100644 (file)
@@ -25,6 +25,8 @@ enum class Attribute {
   kAudioMinByteThreshold,       // std::uint32_t
   kVideoQueueMaxBuffer,         // std::uint64_t
   kAudioQueueMaxBuffer,         // std::uint64_t
+  kVideoRenderTimeOffset,       // std::int64_t
+  kAudioRenderTimeOffset,       // std::int64_t
   kMax,
 };
 
@@ -74,7 +76,13 @@ static const std::map<std::string, TrackRendererAttrInfo>
           plusplayer::trackrenderer::Attribute::kVideoQueueMaxBuffer}},
         {"audio-queue-max-buffer",
          {ValueType::kUInt64,
-          plusplayer::trackrenderer::Attribute::kAudioQueueMaxBuffer}}};
+          plusplayer::trackrenderer::Attribute::kAudioQueueMaxBuffer}},
+        {"video-render-time-offset",
+         {ValueType::kInt64,
+          plusplayer::trackrenderer::Attribute::kVideoRenderTimeOffset}},
+        {"audio-render-time-offset",
+         {ValueType::kInt64,
+          plusplayer::trackrenderer::Attribute::kAudioRenderTimeOffset}}};
 
 static const std::map<std::string, ValueType> kConfigInfoTable = {
     {ConfigNameAccurateSeekMode, ValueType::kUInt32},
index 2de64bf4819bf974f7fc4b020084ff097d382f6c..5b9df9ea52e813b60c922aa461eab04b6acd2d0f 100644 (file)
@@ -49,9 +49,6 @@ class PlayinfoSetter : private boost::noncopyable {
                              GstCaps* a_decoder_caps,
                              const std::vector<Track>& tracks,
                              drm::Type drm_type) = 0;
-  virtual void VconfSetMsgShow() = 0;
-  virtual void VconfSetMsgUpdate() = 0;
-  virtual void VconfSetMsgHide() = 0;
 
  protected:
   PlayinfoSetter() noexcept {}
index 2a7dff3f4529eb59df640c9e1d40b66cdb1341ac..1c85c1cf9a6c7e16ed54508da01dc900cbb4c77c 100644 (file)
@@ -478,7 +478,6 @@ bool TrackRenderer::Stop() {
   TRACKRENDERER_INFO("Set pipeline state to GST_STATE_NULL.");
   pipeline_->SetState(Elements::kPipeline, GST_STATE_NULL);
   ReleaseResource_();
-  playback_info_->VconfSetMsgHide();
   TRACKRENDERER_LEAVE;
   return true;
 }
@@ -2583,31 +2582,20 @@ void TrackRenderer::GstElementLowLatency_(const TrackType& type) {
   if (low_latency_mode_ == 0) return;
   switch (type) {
     case kTrackTypeAudio:
-      if (low_latency_mode_ & kLowLatencyModeAudio) {
-        pipeline_->SetProperty(Elements::kDecAudio, "decoding-type", 0x01);
-        pipeline_->SetProperty(Elements::kSinkAudio, "device-latency", 0);
-      }
-      if (low_latency_mode_ & kLowLatencyModeDisableAVSync) {
-        pipeline_->SetProperty(Elements::kSinkAudio, "sync", FALSE, "async",
-                               FALSE);
-        pipeline_->SetProperty(Elements::kSinkAudio, "fast-rendering", 0);
-        pipeline_->SetProperty(Elements::kSinkAudio, "game-mode", TRUE);
-        pipeline_->SetProperty(Elements::kSinkAudio, "free-run", TRUE);
+      if (low_latency_mode_ & kLowLatencyModeDisablePreroll) {
+        pipeline_->SetProperty(Elements::kSinkAudio, "async", FALSE);
       }
       break;
     case kTrackTypeVideo:
-      if (low_latency_mode_ & kLowLatencyModeVideo) {
-        pipeline_->SetProperty(Elements::kDecVideo, "decoding-type", 0x01);
-      }
-      if (low_latency_mode_ & kLowLatencyModeDisableAVSync) {
-        pipeline_->SetProperty(Elements::kSinkVideo, "sync", FALSE, "async",
-                               FALSE);
+      if (low_latency_mode_ & kLowLatencyModeDisablePreroll) {
+        pipeline_->SetProperty(Elements::kSinkVideo, "async", FALSE);
       }
       break;
     case kTrackTypeSubtitle:
       break;
     default:
       TRACKRENDERER_ERROR("wrong track type");
+      break;
   }
 }
 
@@ -2639,10 +2627,6 @@ void TrackRenderer::UpdatePlaybackInfo_(bool is_updating) {
           video_sink_caps.get(), video_decoder_caps.get(),
           audio_decoder_caps.get(), trackinfo_, drm_property_.type))
     return;
-  if (is_updating)
-    playback_info_->VconfSetMsgUpdate();
-  else
-    playback_info_->VconfSetMsgShow();
 }
 
 GstPadProbeReturn TrackRenderer::GstSrcPadProbeBlockCb_(GstPad* pad,
index 61ab019137dbdd83da3d70024a24d77288fd91c6..db6709763d5dac5ab5afd07fe22c1e2b8c6d3d88 100644 (file)
@@ -34,6 +34,7 @@ constexpr std::uint32_t kMinTimeThresholdOfVideo = 0;           // 0%
 constexpr std::uint32_t kMinTimeThresholdOfAudio = 0;           // 0%
 constexpr std::uint64_t kMaxBufferOfVideoSrcQueue = 5;          // cnt
 constexpr std::uint64_t kMaxBufferOfAudioSrcQueue = 5;          // cnt
+constexpr std::int64_t kDefaultRenderTimeOffset = 0;
 
 template <typename ValueType>
 bool IsSameValue(const boost::any& v1, const boost::any& v2) {
@@ -128,6 +129,18 @@ const TrackRenderer::Attributes TrackRenderer::kAttributes_ = {
                    PROPERTY("max-buffers"),                     //
                    WITH_INIT,                                   //
                    DEFAULT_VALUE(::kMaxBufferOfAudioSrcQueue)), //
+    MAKE_ATTRIBUTE(kVideoRenderTimeOffset,                      //
+                   ELEMENT(kSinkVideo),                         //
+                   VALUE_TYPE(std::int64_t),                    //
+                   PROPERTY("ts-offset"),                       //
+                   WITHOUT_INIT,                                //
+                   DEFAULT_VALUE(::kDefaultRenderTimeOffset)),  //
+    MAKE_ATTRIBUTE(kAudioRenderTimeOffset,                      //
+                   ELEMENT(kSinkAudio),                         //
+                   VALUE_TYPE(std::int64_t),                    //
+                   PROPERTY("ts-offset"),                       //
+                   WITHOUT_INIT,                                //
+                   DEFAULT_VALUE(::kDefaultRenderTimeOffset)),  //
 };
 
 const TrackRenderer::AttributesByElement TrackRenderer::kAttributesByElem_ =
index bac2b4e44ed39d9233966c1c94ac739dea71ebe2..1b9a56e4cb530b02ad77a82975818fa344d30ac9 100644 (file)
@@ -4,7 +4,6 @@
 
 #include "trackrenderer/trackrenderer_debug.h"
 
-#include <vconf.h>
 #include <boost/filesystem/fstream.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/path.hpp>
@@ -29,31 +28,12 @@ class ConcretePlayinfoSetter : public PlayinfoSetter {
   bool SetStreamInfo(GstCaps* v_sink_caps, GstCaps* v_decoder_caps,
                      GstCaps* a_decoder_caps, const std::vector<Track>& tracks,
                      drm::Type drm_type) override;
-  void VconfSetMsgShow() override;
-  void VconfSetMsgUpdate() override;
-  void VconfSetMsgHide() override;
 
  private:
   bool is_shown_ = false;
   StreamInfo stream_info_;
 };
 
-static const char* VCONF_KEY_FOR_PLAYBACK_INFO = "memory/mm/playinfo";
-
-static gboolean SendMessage(gpointer data) {
-  std::stringstream* msg = (std::stringstream*)data;
-  // TRACKRENDERER_INFO("%s", msg->str().c_str());
-  vconf_set_str(VCONF_KEY_FOR_PLAYBACK_INFO, msg->str().c_str());
-  return false;
-}
-
-static void MessageDestructor(gpointer data) {
-  std::stringstream* msg = (std::stringstream*)data;
-  // TRACKRENDERER_INFO("%s", msg->str().c_str());
-  delete msg;
-  return;
-}
-
 std::string toString(drm::Type type) {
   const char* drm_type = NULL;
   switch (type) {
@@ -243,43 +223,6 @@ bool ConcretePlayinfoSetter::SetStreamInfo(GstCaps* v_sink_caps,
   return true;
 }
 
-void ConcretePlayinfoSetter::VconfSetMsgShow() {
-  auto message = std::unique_ptr<std::stringstream>(new std::stringstream);
-  *message.get() << "&display_mode=show";
-  FillMsgWithStreamInfo(stream_info_, message.get());
-
-  TRACKRENDERER_INFO("display : %s", message.get()->str().c_str());
-  g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)SendMessage,
-                  (gpointer)message.release(), MessageDestructor);
-  is_shown_ = true;
-  return;
-}
-
-void ConcretePlayinfoSetter::VconfSetMsgUpdate() {
-  if (!is_shown_) return;
-
-  auto message = std::unique_ptr<std::stringstream>(new std::stringstream);
-  *message.get() << "&display_mode=update";
-  FillMsgWithStreamInfo(stream_info_, message.get());
-
-  TRACKRENDERER_INFO("display : %s", message.get()->str().c_str());
-  g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)SendMessage,
-                  (gpointer)message.release(), MessageDestructor);
-  return;
-}
-
-void ConcretePlayinfoSetter::VconfSetMsgHide() {
-  if (!is_shown_) return;
-  auto message = std::unique_ptr<std::stringstream>(new std::stringstream);
-  *message.get() << "&display_mode=hide";
-
-  TRACKRENDERER_INFO("display : %s", message.get()->str().c_str());
-  g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, (GSourceFunc)SendMessage,
-                  (gpointer)message.release(), MessageDestructor);
-  is_shown_ = false;
-  return;
-}
-
 }  // namespace debug
 
 }  // namespace trackrenderer