Support kTrackRendererDecodedVideoFrameBufferCopy type in trackrenderer_set_video_fra... 31/300131/3
authorGilbok Lee <gilbok.lee@samsung.com>
Tue, 17 Oct 2023 07:50:24 +0000 (16:50 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 17 Oct 2023 08:37:05 +0000 (17:37 +0900)
Change-Id: Id8dba9a1beacd7538720f9818fcca6b8ac00a593

packaging/libtrackrenderer.spec
src/include_internal/trackrenderer/core/buffer.h
src/trackrenderer.cpp

index 1909dbcc34ff7d5354d3a9f322ed217c5bfbc686..d0536f1ac6265da38fa8c32806be435d203a5e5e 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libtrackrenderer
 Summary:    new multimedia streaming player trackrenderer
-Version:    0.0.42
+Version:    0.0.43
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index d6587f5709b53bc25d9ed81c2f21a7122b29d814..066633171a738ed266219d7fc0ffa3138d8db4e0 100644 (file)
@@ -44,7 +44,16 @@ enum class GetDecodedVideoFrameState {
   kUnknownError,
 };
 
-enum class DecodedVideoFrameBufferType { kNone, kCopy, kReference };
+/**
+ * @brief Enumerations for video decoded buffer type
+ */
+enum class DecodedVideoFrameBufferType {
+  kNone,
+  kCopy,
+  kReference,
+  kScale,
+  kManualCopy,
+};
 
 struct DecodedVideoPacket {
   uint64_t pts = 0;
index a9ebb41c351dd350367bd4c9f1b38cd73f6fa2e8..0980073eb1a0c9514558b9df7498f9a18e0b7600 100644 (file)
@@ -1756,15 +1756,27 @@ void TrackRenderer::GstDecodedVideoBufferCb_(GstElement* element,
   TRACKRENDERER_ENTER;
 #endif
 
-  DecodedVideoPacket packet;
   auto trackrenderer = static_cast<TrackRenderer*>(userdata);
+  if ((trackrenderer->decoded_buffer_type_ == DecodedVideoFrameBufferType::kNone) ||
+      (trackrenderer->decoded_buffer_type_ == DecodedVideoFrameBufferType::kScale)) {
+    TRACKRENDERER_ERROR("Not supported DecodedVideoFrameBufferType(%d)",
+        static_cast<int>(trackrenderer->decoded_buffer_type_));
+    return;
+  }
+
   GstMemory* mem = gst_buffer_peek_memory(buffer, 0);
-  tbm_surface_h tbm_surf;
+  tbm_surface_h tbm_surf = nullptr;
+  DecodedVideoPacket packet;
 
   if (gst_is_tizen_memory(mem)) {
-    tbm_surf = (tbm_surface_h)gst_tizen_memory_get_surface(mem);
-    tbm_surface_internal_ref(tbm_surf);
-    packet.buffer_addr = gst_buffer_ref(buffer);
+    if ((trackrenderer->decoded_buffer_type_ == DecodedVideoFrameBufferType::kReference) ||
+        (trackrenderer->decoded_buffer_type_ == DecodedVideoFrameBufferType::kManualCopy)) {
+      tbm_surf = (tbm_surface_h)gst_tizen_memory_get_surface(mem);
+      tbm_surface_internal_ref(tbm_surf);
+      packet.buffer_addr = gst_buffer_ref(buffer);
+    } else if (trackrenderer->decoded_buffer_type_ == DecodedVideoFrameBufferType::kCopy) {
+      tbm_surf = internal::CopyTbmSurface(static_cast<tbm_surface_h>(gst_tizen_memory_get_surface(mem)));
+    }
   } else {
     auto caps = gstguard::make_guard(gst_pad_get_current_caps(pad));
     tbm_surf = internal::CreateTbmSurfaceWithBuffer(mem, caps.get());