[0.6.286] Change the property name for setting max-bitrate used in adaptivedemux
[platform/core/multimedia/libmm-player.git] / src / include / mm_player.h
index e4fbacd..6ca6646 100644 (file)
  *
  */
 #define MM_PLAYER_VIDEO_HEIGHT              "content_video_height"
+
+/**
+ * MM_PLAYER_VIDEO_FPS:
+ */
+#define MM_PLAYER_VIDEO_FPS                 "content_video_fps"
+
+/**
+ * MM_PLAYER_VIDEO_BITRATE:
+ */
+#define MM_PLAYER_VIDEO_BITRATE             "content_video_bitrate"
+
 /**
  * MM_PLAYER_VIDEO_EVAS_SURFACE_SINK:
  *
  */
 #define MM_PLAYER_TAG_DATE                  "tag_date"
 /**
- * MM_PLAYER_TAG_DESCRIPRION
+ * MM_PLAYER_TAG_DESCRIPTION
  *
  * short text describing the content of the data (string)
  */
-#define MM_PLAYER_TAG_DESCRIPRION           "tag_description"
+#define MM_PLAYER_TAG_DESCRIPTION           "tag_description"
 /**
  * MM_PLAYER_TAG_TRACK_NUM
  *
 #define MM_PLAYER_AUDIO_CODEC_TYPE          "audio_codec_type"
 
 /**
+ * MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE (int)
+ */
+#define MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE   "video_buffer_total_size"
+
+/**
+ * MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE (int)
+ */
+#define MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE   "video_buffer_extra_size"
+
+/**
  * MM_PLAYER_PREBUFFER_MS
  *
  * prebuffer ms (int)
  * rebuffer ms (int)
  */
 #define MM_PLAYER_REBUFFER_MS               "rebuffer_ms"
+
 /**
  * MM_PLAYER_AUDIO_OFFLOAD (int)
  */
 #define MM_PLAYER_AUDIO_OFFLOAD             "audio_offload"
 
 /**
+ * MM_PLAYER_AUDIO_OFFLOAD_FORMAT (int array)
+ */
+#define MM_PLAYER_AUDIO_OFFLOAD_FORMAT      "audio_offload_format"
+
+/**
  * MM_PLAYER_PITCH_CONTROL (int)
  */
 #define MM_PLAYER_PITCH_CONTROL             "pitch_control"
  */
 #define MM_PLAYER_PITCH_VALUE               "pitch_value"
 
+/**
+ * MM_PLAYER_PCM_EXT_FORMAT (string)
+ */
+#define MM_PLAYER_PCM_EXT_FORMAT            "pcm_extraction_format"
 
-#define BUFFER_MAX_PLANE_NUM (4)
+/**
+ * MM_PLAYER_PCM_EXT_CHANNELS (int)
+ */
+#define MM_PLAYER_PCM_EXT_CHANNELS          "pcm_extraction_channels"
 
-typedef struct {
-       MMPixelFormatType format;              /**< image format */
-       int width;                             /**< width of video buffer */
-       int height;                            /**< height of video buffer */
-       unsigned int timestamp;                /**< timestamp of stream buffer (msec)*/
-       unsigned int length_total;             /**< total length of stream buffer (in byte)*/
-       void *data[BUFFER_MAX_PLANE_NUM];
-       void *bo[BUFFER_MAX_PLANE_NUM];        /**< TBM buffer object */
-       void *internal_buffer;                 /**< Internal buffer pointer */
-       int stride[BUFFER_MAX_PLANE_NUM];      /**< stride of plane */
-       int elevation[BUFFER_MAX_PLANE_NUM];   /**< elevation of plane */
-       int orientation;                       /**< orientation */
-       int bo_size;                           /**< TBM buffer object size */
-       int plane_num;                         /**< number of Plane */
-} mmplayer_video_decoded_data_info_t;
+/**
+ * MM_PLAYER_PCM_EXT_SAMPLERATE (int)
+ */
+#define MM_PLAYER_PCM_EXT_SAMPLERATE        "pcm_extraction_samplerate"
+
+/**
+ * MM_PLAYER_MEDIA_STREAM_INPUT_FORMAT (int array)
+ */
+#define MM_PLAYER_MEDIA_STREAM_INPUT_FORMAT "media_stream_input_format"
+
+/**
+ * MM_PLAYER_AUDIO_ONLY (int)
+ */
+#define MM_PLAYER_AUDIO_ONLY                "audio_only"
+
+#define BUFFER_MAX_PLANE_NUM (4)
 
 /**
  * Enumerations of player state.
@@ -377,10 +412,17 @@ typedef enum {
 } mmplayer_stream_type_e;
 
 typedef enum {
-       MM_PLAYER_CODEC_TYPE_DEFAULT = 0, /**< codec is selected by the priority */
        MM_PLAYER_CODEC_TYPE_HW,          /**< HW codec can only be selected */
        MM_PLAYER_CODEC_TYPE_SW,          /**< SW codec can only be selected */
-} mmplayer_video_codec_type_e;
+       MM_PLAYER_CODEC_TYPE_DEFAULT,     /**< codec is selected by the priority */
+} mmplayer_codec_type_e;
+
+typedef enum {
+       MM_PLAYER_AUDIO_CONTROL_OPT_EFFECT,
+       MM_PLAYER_AUDIO_CONTROL_OPT_REPLAYGAIN,
+       MM_PLAYER_AUDIO_CONTROL_OPT_PITCH,
+       MM_PLAYER_AUDIO_CONTROL_OPT_PCM_EXPORTING,
+} mmplayer_audio_control_opt_e;
 
 typedef enum {
        MM_PLAYER_AUDIO_EXTRACT_DEFAULT                        = 0x00,   /**< Sync with the playback clock and multichannel audio stream */
@@ -391,6 +433,18 @@ typedef enum {
        MM_PLAYER_AUDIO_EXTRACT_DEINTERLEAVE_WITH_PLAYBACK     = MM_PLAYER_AUDIO_EXTRACT_DEINTERLEAVE | MM_PLAYER_AUDIO_EXTRACT_WITH_PLAYBACK,
 } mmplayer_audio_extract_opt_e;
 
+/*
+ * Enumerations of video colorspace
+ */
+typedef enum {
+       MM_PLAYER_COLORSPACE_I420 = 0,                  /**< I420 format - planer */
+       MM_PLAYER_COLORSPACE_RGB888,                    /**< RGB888 pixel format */
+       MM_PLAYER_COLORSPACE_NV12_TILED,                /**< Customized color format */
+       MM_PLAYER_COLORSPACE_NV12,
+       MM_PLAYER_COLORSPACE_BGRx,                              /**< BGRx pixel format */
+       MM_PLAYER_COLORSPACE_MAX = 0x7FFFFFFF
+} mmplayer_video_color_space_e;
+
 /**
  * Attribute validity structure
  */
@@ -439,14 +493,39 @@ typedef struct {
        };
 } mmplayer_attrs_info_t;
 
-/**
- * Volume type.
- *
- * @see                mm_player_set_volume, mm_player_get_volume
- */
 typedef struct {
-       float level[MM_VOLUME_CHANNEL_NUM];     /**< Relative volume factor for each channels */
-} mmplayer_volume_type_t;
+       MMPixelFormatType format;              /**< image format */
+       int width;                             /**< width of video buffer */
+       int height;                            /**< height of video buffer */
+       unsigned int timestamp;                /**< timestamp of stream buffer (msec)*/
+       unsigned int length_total;             /**< total length of stream buffer (in byte)*/
+       void *data[BUFFER_MAX_PLANE_NUM];
+       void *bo[BUFFER_MAX_PLANE_NUM];        /**< TBM buffer object */
+       void *internal_buffer;                 /**< Internal buffer pointer */
+       int stride[BUFFER_MAX_PLANE_NUM];      /**< stride of plane */
+       int elevation[BUFFER_MAX_PLANE_NUM];   /**< elevation of plane */
+       int orientation;                       /**< orientation */
+       int bo_size;                           /**< TBM buffer object size */
+       int plane_num;                         /**< number of Plane */
+} mmplayer_video_decoded_data_info_t;
+
+typedef struct {
+       void *data;
+       int data_size;
+       int channel;
+       int bitrate;
+       guint64 channel_mask;
+       media_format_mimetype_e pcm_format;
+} mmplayer_audio_decoded_data_info_t;
+
+typedef struct {
+       unsigned char *data;                                    /* capture image buffer */
+       int size;                                                               /* capture image size */
+       mmplayer_video_color_space_e fmt;                       /* color space type */
+       unsigned int width;                                             /* width of captured image */
+       unsigned int height;                                    /* height of captured image */
+       unsigned int orientation;                               /* content orientation */
+} mmplayer_video_capture_t;
 
 /**
  * Video stream info in external demux case
@@ -494,47 +573,24 @@ typedef struct _SubtitleStreamInfo {
 } mmplayer_subtitle_stream_info_t;
 
 /**
- * selected subtitle track number callback function type.
- *
- * @param      track_num       [in]    Track number of subtitle
- * @param      user_param      [in]    User defined parameter
- *
- *
- * @return     This callback function have to return MM_ERROR_NONE.
+ * Called to notify the stream changed.
  */
-typedef bool (*mm_player_track_selected_subtitle_language_callback)(int track_num, void *user_param);
+typedef bool (*mm_player_stream_changed_callback)(void *user_param);
 
 /**
- * Buffer underrun / overflow data callback function type.
- *
- * @param      status     [in] buffer status
- * @param      user_param [in] User defined parameter which is passed when set
- *                          to enough data callback or need data callback
- *
- * @return     This callback function have to return MM_ERROR_NONE.
+ * Video decoded callback function type.
  */
-typedef bool (*mm_player_media_stream_buffer_status_callback)(mmplayer_stream_type_e type, mmplayer_media_stream_buffer_status_e status, unsigned long long bytes, void *user_param);
+typedef bool (*mm_player_video_decoded_callback)(void *stream, void *user_param);
 
 /**
- * Buffer seek data callback function type.
- *
- * @param      offset     [in] offset for the buffer playback
- * @param      user_param [in] User defined parameter which is passed when set
- *                          to seek data callback
- *
- * @return     This callback function have to return MM_ERROR_NONE.
+ * Audio stream callback function type.
  */
-typedef bool (*mm_player_media_stream_seek_data_callback)(mmplayer_stream_type_e type, unsigned long long offset, void *user_param);
+typedef bool (*mm_player_video_capture_callback)(void *stream, int stream_size, void *user_param);
 
 /**
- * Called to notify the stream changed.
- *
- * @param user_data [in] The user data passed from the callback registration function
- *
- * @return     This callback function have to return MM_ERROR_NONE.
+ * Audio stream callback function type.
  */
-typedef bool (*mm_player_stream_changed_callback)(void *user_param);
-
+typedef bool (*mm_player_audio_decoded_callback)(void *stream, void *user_param);
 
 /*===========================================================================================
 |                                                                                           |
@@ -675,57 +731,14 @@ if (mm_player_get_state(g_player, &state) != MM_ERROR_NONE) {
 int mm_player_get_state(MMHandleType player, mmplayer_state_e *state);
 
 /**
- * This function is to set relative volume of player. \n
- * So, It controls logical volume value. \n
- * But, if developer want to change system volume, mm sound api should be used.
- *
- * @param      player          [in]    Handle of player
- * @param      volume          [in]    Volume factor of each channel
- *
- * @return     This function returns zero on success, or negative value with error code.
- * @see                mmplayer_volume_type_t, mm_player_get_volume
- * @remark     The range of factor range is from 0 to 1.0. (1.0 = 100%) And, default value is 1.0.
- * @par Example
- * @code
-mmplayer_volume_type_t volume;
-int i = 0;
-
-for (i = 0; i < MM_VOLUME_CHANNEL_NUM; i++)
-       volume.level[i] = MM_VOLUME_LEVEL_MAX;
-
-if (mm_player_set_volume(g_player, &volume) != MM_ERROR_NONE)
-{
-    LOGE("failed to set volume\n");
-}
- * @endcode
+ * This function is to control logical volume.
  */
-int mm_player_set_volume(MMHandleType player, mmplayer_volume_type_t *volume);
+int mm_player_set_volume(MMHandleType player, float volume);
 
 /**
  * This function is to get current volume factor of player.
- *
- * @param      player          [in]    Handle of player.
- * @param      volume          [out]   Volume factor of each channel.
- *
- * @return     This function returns zero on success, or negative value with error code.
- *
- * @see                mmplayer_volume_type_t, mm_player_set_volume
- * @remark  None
- * @par Example
- * @code
-mmplayer_volume_type_t volume;
-int i;
-
-if (mm_player_get_volume(g_player, &volume) != MM_ERROR_NONE)
-{
-       LOGW("failed to get volume\n");
-}
-
-for (i = 0; i < MM_VOLUME_CHANNEL_NUM; i++)
-       LOGD("channel[%d] = %d \n", i, volume.level[i]);
- * @endcode
  */
-int mm_player_get_volume(MMHandleType player, mmplayer_volume_type_t *volume);
+int mm_player_get_volume(MMHandleType player, float *volume);
 
 /**
  * This function is to start playing media contents. Demux(parser), codec and related plugins are decided \n
@@ -917,20 +930,13 @@ int mm_player_set_message_callback(MMHandleType player, MMMessageCallback callba
  * This function is to mute volume of player
  *
  * @param      player  [in]    Handle of player
- * @param      mute    [in]    Mute(1) or not mute(0)
+ * @param      mute    [in]    mute value
  *
  * @return     This function returns zero on success, or negative value with error code
  * @see                mm_player_get_mute
  * @remark  None
- * @par Example
- * @code
-if (mm_player_set_mute(g_player, TRUE) != MM_ERROR_NONE)
-{
-       LOGW("failed to set mute\n");
-}
- * @endcode
  */
-int mm_player_set_mute(MMHandleType player, int mute);
+int mm_player_set_mute(MMHandleType player, bool mute);
 
 /**
  * This function is to get mute value of player
@@ -941,26 +947,15 @@ int mm_player_set_mute(MMHandleType player, int mute);
  * @return     This function returns zero on success, or negative value with error code
  * @see                mm_player_set_mute
  * @remark  None
- * @par Example
- * @code
-int mute;
-
-if (mm_player_get_mute(g_player, &mute) != MM_ERROR_NONE)
-{
-       LOGW("failed to get mute\n");
-}
-
-LOGD("mute status:%d\n", mute);
- * @endcode
  */
-int mm_player_get_mute(MMHandleType player, int *mute);
+int mm_player_get_mute(MMHandleType player, bool *mute);
 
 /**
- * This function is to adjust subtitle postion. So, subtitle can show at the adjusted position. \n
+ * This function is to adjust subtitle position. So, subtitle can show at the adjusted position. \n
  * If pos is negative, subtitle will be displayed previous time, the other hand forward time. \n
  *
  * @param      player  [in]    Handle of player
- * @param      pos             [in]    postion to be adjusted
+ * @param      pos             [in]    position to be adjusted
  *
  * @return     This function returns zero on success, or negative value with error
  *                     code
@@ -973,7 +968,7 @@ int pos;
 pos = 5000;
 if (mm_player_adjust_subtitle_position(g_player, pos) != MM_ERROR_NONE)
 {
-       LOGW("failed to adjust subtitle postion.\n");
+       LOGW("failed to adjust subtitle position.\n");
 }
  * @endcode
  */
@@ -985,7 +980,7 @@ int mm_player_adjust_subtitle_position(MMHandleType player, int pos);
  * by this value. But, one subtitle file should be set with "subtitle_uri" attribute before calling mm_player_realize(); \n
  * Player FW parses subtitle file and send text data including timestamp to application \n
  * through message callback with MM_MESSAGE_UPDATE_SUBTITLE will be. \n
- * So, application have to render it. And, subtitle can be supported only in a seprate file. \n
+ * So, application have to render it. And, subtitle can be supported only in a separate file. \n
  * So, it's not supported for embedded case.
  *
  * @param      player  [in]    Handle of player
@@ -1087,7 +1082,7 @@ int mm_player_get_attribute(MMHandleType player,  char **err_attr_name, const ch
  *
  * @param   player          [in]  Handle of player.
  * @param   attribute_name  [in]  Name of the attribute to get
- * @param   info            [out] Attribute infomation
+ * @param   info            [out] Attribute information
  *
  * @return  This function returns zero on success, or negative value with error
  *          code.
@@ -1254,32 +1249,6 @@ int mm_player_set_audio_info(MMHandleType player, media_format_h format);
 int mm_player_set_subtitle_info(MMHandleType player, mmplayer_subtitle_stream_info_t *info);
 
 /**
- * This function set callback function for receiving need or enough data message from player.
- *
- * @param   player     [in] Handle of player.
- * @param   type       [in] stream type
- * @param   callback   [in] data callback function for stream type.
- * @param   user_param [in] User parameter.
- *
- * @return  This function returns zero on success, or negative value with error
- *          code.
- */
-int mm_player_set_media_stream_buffer_status_callback(MMHandleType player, mmplayer_stream_type_e type, mm_player_media_stream_buffer_status_callback callback, void *user_param);
-
-/**
- * This function set callback function for receiving seek data message from player.
- *
- * @param       player          [in]    Handle of player.
- * @param       type            [in]    stream type
- * @param       callback        [in]    Seek data callback function for stream type.
- * @param       user_param      [in]    User parameter.
- *
- * @return      This function returns zero on success, or negative value with error
- *                      code.
- */
-int mm_player_set_media_stream_seek_data_callback(MMHandleType player, mmplayer_stream_type_e type, mm_player_media_stream_seek_data_callback callback, void *user_param);
-
-/**
  * This function is to set max size of buffer(appsrc).
  *
  * @param       player          [in]    Handle of player.
@@ -1343,20 +1312,6 @@ int mm_player_get_media_stream_buffer_min_percent(MMHandleType player, mmplayer_
 int mm_player_set_audio_stream_changed_callback(MMHandleType player, mm_player_stream_changed_callback callback, void *user_param);
 
 /**
- * This function set callback function for changing video stream from player. \n
- * It's only supported when video stream is included in file. \n
- *
- * @param      player   [in] Handle of player.
- * @param      callback [in] Video stream changed callback function.
- * @param      user_param [in] User parameter.
- *
- * @return     This function returns zero on success, or negative value with error
- *                     code.
- * @see                mm_player_stream_changed_callback
- */
-int mm_player_set_video_stream_changed_callback(MMHandleType player, mm_player_stream_changed_callback callback, void *user_param);
-
-/**
  * This function is to get timeout value according to the content type for muse. \n
  * It's only supported when video stream is included in file. \n
  *
@@ -1370,20 +1325,6 @@ int mm_player_set_video_stream_changed_callback(MMHandleType player, mm_player_s
 int mm_player_get_timeout(MMHandleType player, int *timeout);
 
 /**
- * This function is to get the number of video output buffers. \n
- * It's only supported when video stream is included in file. \n
- *
- * @param      player  [in] Handle of player.
- * @param      num     [out] num of buffers.
- * @param      extra_num [out] extra num of buffers.
- *
- * @return     This function returns zero on success, or negative value with error
- *                     code.
- * @since 3.0
- */
-int mm_player_get_num_of_video_out_buffers(MMHandleType player, int *num, int *extra_num);
-
-/**
  * This function is to set the dynamic resolution information. \n
  * It's only supported when video stream is included in file. \n
  *
@@ -1430,10 +1371,9 @@ int mm_player_get_max_adaptive_variant_limit(MMHandleType player, int *bandwidth
  * These functions are to set/get the audio only mode
  */
 int mm_player_set_audio_only(MMHandleType player, bool audio_only);
-int mm_player_get_audio_only(MMHandleType player, bool *audio_only);
 
 /**
- * These functions are to get the streaming bufferint time
+ * These functions are to get the streaming buffering time
  */
 int mm_player_get_streaming_buffering_time(MMHandleType player, int *prebuffer_ms, int *rebuffer_ms);
 
@@ -1456,7 +1396,7 @@ int mm_player_360_get_field_of_view(MMHandleType player, int *horizontal_degrees
 /**
  * This function is to set codec type
  */
-int mm_player_set_codec_type(MMHandleType player, mmplayer_stream_type_e stream_type, mmplayer_video_codec_type_e codec_type);
+int mm_player_set_codec_type(MMHandleType player, mmplayer_stream_type_e stream_type, mmplayer_codec_type_e codec_type);
 
 /**
  * These functions are to apply the replaygain
@@ -1471,6 +1411,105 @@ int mm_player_set_video_roi_area(MMHandleType player, double scale_x, double sca
 int mm_player_get_video_roi_area(MMHandleType player, double *scale_x, double *scale_y, double *scale_width, double *scale_height);
 
 /**
+ * This function is to set play speed for playback.
+ *
+ * @param      player          [in]    Handle of player.
+ * @param      ratio           [in]    Speed for playback.
+ * @param      streaming       [in]    If @c true, rate value can be set even if it is streaming playback.
+ * @return     This function returns zero on success, or negative value with error
+ *                     code
+ * @remark     The current supported range is from -64x to 64x.
+ *             But, the quality is dependent on codec performance.
+ *             And, the sound is muted under normal speed and more than double speed.
+ * @see
+ * @since
+ */
+int mm_player_set_play_speed(MMHandleType player, float rate, bool streaming);
+
+/**
+ * This function set callback function for receiving video stream from player.
+ *
+ * @param      player          [in]    Handle of player.
+ * @param      callback        [in]    Video stream callback function.
+ * @param      user_param      [in]    User parameter.
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @remark
+ * @since
+ */
+int mm_player_set_video_decoded_callback(MMHandleType player, mm_player_video_decoded_callback callback, void *user_param);
+
+/**
+ * This function set callback function for receiving audio stream from player.
+ *
+ * @param      player          [in]    Handle of player.
+ * @param      opt             [in]    audio extract option.
+ * @param      callback        [in]    audio stream callback function.
+ * @param      user_param      [in]    User parameter.
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @remark
+ * @see                mm_player_audio_decoded_callback
+ * @since
+ */
+int mm_player_set_audio_decoded_callback(MMHandleType player, mmplayer_audio_extract_opt_e opt, mm_player_audio_decoded_callback callback, void *user_param);
+
+/**
+ * This function is to capture video frame.
+ *
+ * @param      player          [in]    Handle of player.
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ *
+ * @remark     Captured buffer is sent asynchronously through message callback with MM_MESSAGE_VIDEO_CAPTURED.
+ *                     And, application should free the captured buffer directly.
+ * @see                MM_MESSAGE_VIDEO_CAPTURED
+ * @since
+ */
+int mm_player_do_video_capture(MMHandleType player);
+
+/**
+ * This function changes the previous videosink plugin for a new one
+ *
+ * @param      player                  [in]    Handle of player.
+ * @param      display_surface_type    [in]    display surface type to set
+ * @param      wl_surface_id                   [in]    wayland surface id to set
+ *
+ * @return     This function returns zero on success, or negative value with error
+ *                     code.
+ * @remark
+ * @see
+ * @since
+ */
+int mm_player_change_videosink(MMHandleType player, MMDisplaySurfaceType display_surface_type, int wl_surface_id);
+
+/**
+ * This function set the application PID.
+ *
+ * @param      player          [in]    Handle of player
+ * @param      pid                     [in]    application PID
+ *
+ * @return     This function returns zero on success, or negative value with error code.
+ *
+ * @pre                Player state should be MM_PLAYER_STATE_NULL.
+ * @remark     None
+ */
+int mm_player_set_client_pid(MMHandleType player, int pid);
+
+/**
+ * This function gets the activation status of audio offload.
+ */
+int mm_player_audio_offload_is_activated(MMHandleType player, bool *activated);
+
+/**
+ * This function checks whether the controlling audio with opt is available or not.
+ */
+int mm_player_is_audio_control_available(MMHandleType player, mmplayer_audio_control_opt_e opt, bool *available);
+
+/**
        @}
  */