Enable path to use videohole 12/287112/1
authorJeongyoon Nam <just.nam@samsung.com>
Mon, 25 Apr 2022 00:25:59 +0000 (09:25 +0900)
committerJeongyoon Nam <just.nam@samsung.com>
Fri, 20 Jan 2023 01:46:24 +0000 (10:46 +0900)
[Version] 0.0.8
[Issue Type] Add

Change-Id: I76faa7d8ad419dfcbee62322b71a8bfe742ffcbe

include/esplusplayer_capi/esplusplayer_capi.h
include/plusplayer/esplusplayer.h
packaging/esplusplayer.spec
src/esplusplayer/include_internal/esplayer/esplayer.h
src/esplusplayer/src/esplayer.cpp
src/esplusplayer/src/esplusplayer_capi.cpp
src/plusplayer-core/include_internal/core/trackrendereradapter.h
src/plusplayer-core/src/trackrendereradapter.cpp
test/esplusplayer_test.c

index 0b3244f..d30323c 100644 (file)
@@ -1827,6 +1827,32 @@ int esplusplayer_set_audio_codec_type(esplusplayer_handle handle,
  */
 int esplusplayer_set_video_codec_type(esplusplayer_handle handle,
                                       esplusplayer_video_codec_type type);
+/**
+ * @brief     Provided api for enabling video hole.
+ * @param     [in] handle : esplusplayer handle.
+ * @param     [in] value : the value of video hole.
+ *            (@c true = video hole enabled, @c false = video hole disabled)
+ * @return    @c ESPLUSPLAYER_ERROR_TYPE_NONE on success, otherwise @c one of esplusplayer_error_type
+ *            values will be returned.
+ * @retval    #ESPLUSPLAYER_ERROR_TYPE_NONE Successful
+ * @retval    #ESPLUSPLAYER_ERROR_TYPE_INVALID_PARAMETER Invalid parameter
+ * @retval    #ESPLUSPLAYER_ERROR_TYPE_INVALID_OPERATION Internal operation failed
+ * @code
+ *            esplusplayer_open(esplayer);
+ *            esplusplayer_enable_video_hole(esplayer, false);
+ *            // ... your codes ...
+ *            esplusplayer_close(esplayer);
+ * @endcode
+ * @pre       The player state can be all of #esplusplayer_state except
+ *            #ESPLUSPLAYER_STATE_NONE.
+ *            But before #ESPLUSPLAYER_STATE_READY, esplusplayer_decoded_video_frame_buffer_type must
+ *            not be set to #ESPLUSPLAYER_DECODED_VIDEO_FRAME_BUFFER_TYPE_NONE.
+ * @post      None
+ * @exception None
+ * @see       esplusplayer_set_video_frame_buffer_type
+ *            esplusplayer_set_media_packet_video_decoded_cb
+ */
+int esplusplayer_enable_video_hole(esplusplayer_handle handle, const bool value);
 
 #ifdef __cplusplus
 }
index f80ad6e..aa3bb27 100644 (file)
@@ -675,6 +675,11 @@ class EsPlusPlayer : private boost::noncopyable {
   virtual bool SetVideoCodecType(const PlayerVideoCodecType& type) {
     return false;
   }
+  /**
+   * @brief     Provided api for enabling video hole
+   * @return    @c True on success, otherwise @c False
+   */
+  virtual bool EnableVideoHole(bool value) { return false; }
 
  protected:
   EsPlusPlayer() noexcept {};
index cae9109..b82b4ec 100644 (file)
@@ -2,7 +2,7 @@
 %bcond_without ESPLUSPLAYER_UT
 Name:       esplusplayer
 Summary:    new multimedia streaming player
-Version:    0.0.7
+Version:    0.0.8
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index ded99be..74b4b6f 100644 (file)
@@ -93,6 +93,7 @@ class EsPlayer : public EsPlusPlayer {
   bool SetUnlimitedMaxBufferMode() override;
   bool SetAudioCodecType(const PlayerAudioCodecType& type) override;
   bool SetVideoCodecType(const PlayerVideoCodecType& type) override;
+  bool EnableVideoHole(bool value) override;
 
  private:
   using SubmitPacketOperator =
index bd79420..dcb3f13 100644 (file)
@@ -1609,6 +1609,15 @@ void EsPlayer::TrackRendererEventListener::OnFirstDecodingDone() {
   LOG_LEAVE_P(handler_);
 }
 
+bool EsPlayer::EnableVideoHole(bool value) {
+  if (state_manager_.GetState() < EsState::kIdle) {
+    LOG_ERROR_P(this, "Invalid State , current %d",
+                state_manager_.GetStateEnum());
+    return false;
+  }
+  return trackrenderer_->EnableVideoHole(value);
+}
+
 namespace es_conf {
 
 void LoadIniProperty(const Json::Value& root) {
index dc5152b..b6812d5 100644 (file)
@@ -1147,6 +1147,14 @@ int esplusplayer_set_buffer_size(esplusplayer_handle handle,
   return convert_return_type_(true);
 }
 
+int esplusplayer_enable_video_hole(esplusplayer_handle handle, const bool value) {
+  LOG_ENTER_P(cast_(handle))
+  if (is_null_(handle)) return ESPLUSPLAYER_ERROR_TYPE_INVALID_PARAMETER;
+
+  auto ret = cast_(handle)->EnableVideoHole(value);
+  return convert_return_type_(ret);
+}
+
 int esplusplayer_set_resource_conflicted_cb(
     esplusplayer_handle handle,
     esplusplayer_resource_conflicted_cb resource_conflicted_cb,
@@ -1248,6 +1256,7 @@ int esplusplayer_set_media_packet_video_decoded_cb(
 
   listener->media_packet_video_decoded_cb_ = media_packet_video_decoded_cb;
   listener->media_packet_video_decoded_cb_userdata_ = userdata;
+
   return convert_return_type_(true);
 }
 
index f8a7d47..9a0d3c3 100644 (file)
@@ -153,6 +153,7 @@ class TrackRendererAdapter {
   bool Flush(const StreamType& type);
   bool Flush(const TrackType& type);
   void GetAttribute(const Attribute& attr, boost::any* value);
+  bool EnableVideoHole(bool value);
 
  private:
   TrackRendererAdapter();
index d93442b..20032de 100644 (file)
@@ -649,6 +649,10 @@ void TrackRendererAdapter::SetVideoFrameBufferType(
       handle_, adapter_utils::ConvertToVideoFrameBufferType(type));
 }
 
+bool TrackRendererAdapter::EnableVideoHole(bool value) {
+  return (trackrenderer_enable_video_hole(handle_, value) != kFailed);
+}
+
 /////////////////////////////////////////////
 /////////////// Callbacks ///////////////////
 /////////////////////////////////////////////
index e04d8a4..8a36c10 100644 (file)
@@ -56,6 +56,7 @@ enum {
        CURRENT_STATUS_SET_DISPLAY_ROTATION,
        CURRENT_STATUS_SET_VIDEO_ROI,
        CURRENT_STATUS_SELECT_TRACK,
+       CURRENT_STATUS_ENABLE_VIDEO_HOLE,
 };
 
 /* for video display */
@@ -1235,6 +1236,20 @@ static void __test_set_display_rotation(int mode)
                g_print("                       => esplusplayer_set_display_rotation(%d) success\n", mode);
 }
 
+static void __test_enable_video_hole(bool value)
+{
+       if (!g_test_h) {
+               g_print("test handle is NULL\n");
+               return;
+       }
+
+       int ret = esplusplayer_enable_video_hole(g_test_h->espp_h, value);
+       if (ret != ESPLUSPLAYER_ERROR_TYPE_NONE)
+               g_print("                       => failed to esplusplayer_enable_video_hole\n");
+       else
+               g_print("                       => esplusplayer_enable_video_hole() success\n");
+}
+
 static void __input_filename(char *filename)
 {
        int len = 0;
@@ -1322,6 +1337,8 @@ static void __interpret_main_menu(char *cmd)
                        g_menu_state = CURRENT_STATUS_SET_DISPLAY_ROI;
                } else if (strncmp(cmd, "dv", 2) == 0) {
                        g_menu_state = CURRENT_STATUS_SET_DISPLAY_VISIBLE;
+               } else if (strncmp(cmd, "ev", 2) == 0) {
+                       g_menu_state = CURRENT_STATUS_ENABLE_VIDEO_HOLE;
                } else {
                        g_print("unknown menu \n");
                }
@@ -1376,6 +1393,7 @@ static void __display_sub_basic()
        g_print("prd.prepare demuxer\n\n");
 
        g_print("-- << display >> ------------------------------------------------------------------------\n");
+       g_print("ev.enable videohole\t\t");
        g_print("ds.set display\t\t");
        g_print("dm.set display mode\n");
        g_print("dr.set display roi\t");
@@ -1417,6 +1435,8 @@ static void __displaymenu()
                g_print("*** Input display rotation.(0: NONE, 1: 90, 2: 180, 3: 270)\n");
        } else if (g_menu_state == CURRENT_STATUS_SELECT_TRACK) {
                g_print("*** Input select track id(video_id, audio_id <unselect -1>)\n");
+       } else if (g_menu_state == CURRENT_STATUS_ENABLE_VIDEO_HOLE) {
+               g_print("*** Set videohole (1:enable, 0:disable)\n");
        } else {
                g_print("*** Unknown status.\n");
                quit_program();
@@ -1659,6 +1679,13 @@ static void interpret(char *cmd)
                }
                break;
        }
+       case CURRENT_STATUS_ENABLE_VIDEO_HOLE:
+       {
+               value = atoi(cmd);
+               __test_enable_video_hole(value);
+               reset_menu_state();
+               break;
+       }
        default:
                break;
        }