*/
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
}
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 {};
%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
bool SetUnlimitedMaxBufferMode() override;
bool SetAudioCodecType(const PlayerAudioCodecType& type) override;
bool SetVideoCodecType(const PlayerVideoCodecType& type) override;
+ bool EnableVideoHole(bool value) override;
private:
using SubmitPacketOperator =
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) {
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,
listener->media_packet_video_decoded_cb_ = media_packet_video_decoded_cb;
listener->media_packet_video_decoded_cb_userdata_ = userdata;
+
return convert_return_type_(true);
}
bool Flush(const StreamType& type);
bool Flush(const TrackType& type);
void GetAttribute(const Attribute& attr, boost::any* value);
+ bool EnableVideoHole(bool value);
private:
TrackRendererAdapter();
handle_, adapter_utils::ConvertToVideoFrameBufferType(type));
}
+bool TrackRendererAdapter::EnableVideoHole(bool value) {
+ return (trackrenderer_enable_video_hole(handle_, value) != kFailed);
+}
+
/////////////////////////////////////////////
/////////////// Callbacks ///////////////////
/////////////////////////////////////////////
CURRENT_STATUS_SET_DISPLAY_ROTATION,
CURRENT_STATUS_SET_VIDEO_ROI,
CURRENT_STATUS_SELECT_TRACK,
+ CURRENT_STATUS_ENABLE_VIDEO_HOLE,
};
/* for video display */
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;
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");
}
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");
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();
}
break;
}
+ case CURRENT_STATUS_ENABLE_VIDEO_HOLE:
+ {
+ value = atoi(cmd);
+ __test_enable_video_hole(value);
+ reset_menu_state();
+ break;
+ }
default:
break;
}