support multi-track
[platform/core/multimedia/libmm-player.git] / src / include / mm_player_priv.h
index c2e4443..e31299a 100644 (file)
@@ -44,6 +44,7 @@
 #include "mm_player_ini.h"
 #include <mm_resource_manager.h>
 #include "mm_player_streaming.h"
+#include "mm_player_attrs.h"
 
 /*===========================================================================================
 |                                                                                                                                                                                      |
@@ -69,7 +70,7 @@
 
 #define VIDEO360_MAX_ZOOM      10.0f
 
-#define DEFAULT_NUM_OF_V_OUT_BUFFER            3
+#define DEFAULT_NUM_OF_V_OUT_BUFFER            4
 
 /*---------------------------------------------------------------------------
 |    GLOBAL CONSTANT DEFINITIONS:                                                                                      |
@@ -367,7 +368,7 @@ typedef enum {
 typedef enum {
        MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER,
        MMPLAYER_RESOURCE_TYPE_VIDEO_OVERLAY,
-       /* FIXME: need to add MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD */
+       MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD,
        MMPLAYER_RESOURCE_TYPE_MAX,
 } mmplayer_resource_type_e;
 
@@ -449,12 +450,12 @@ typedef struct {
 } mmplayer_video_roi_t;
 
 typedef struct {
-       gint active_pad_index;
+       gint active_track_index;
        gint total_track_num;
-       GPtrArray *channels;
-       gulong block_id;
-       gulong event_probe_id;
-} mmplayer_selector_t;
+       GPtrArray *streams;
+       gulong block_id;                /* FIXME: will be removed */
+       gulong event_probe_id;  /* FIXME: will be removed */
+} mmplayer_track_t;
 
 typedef struct {
        gboolean running;
@@ -471,8 +472,6 @@ typedef struct {
 typedef struct {
        int channel;
        int bitrate;
-       int depth;
-       bool is_little_endian;
        guint64 channel_mask;
        void *pcm_data;
        int data_size;
@@ -539,7 +538,8 @@ typedef struct {
 
        /* command lock */
        GMutex cmd_lock;
-       GMutex playback_lock;
+       GMutex reconfigure_lock;
+       GCond reconfigure_cond;
 
        /* gapless play thread */
        GThread *gapless_play_thread;
@@ -571,6 +571,7 @@ typedef struct {
 
        /* player attributes */
        MMHandleType attrs;
+       mmplayer_attrs_spec_t *default_attrs;
 
        /* message callback */
        MMMessageCallback msg_cb;
@@ -632,10 +633,12 @@ typedef struct {
 
        /* autoplugging */
        GList *factories;
-       GList *audio_decoders; /* list of linked audio name */
+       GList *audio_decoders; // list of linked audio name
        gboolean no_more_pad;
-       gint num_dynamic_pad;  /* only for rtsp */
+       gint num_dynamic_pad;
        gboolean has_many_types;
+       gboolean need_audio_dec_sorting;
+       gboolean need_video_dec_sorting;
 
        /* progress callback timer */
        /* FIXIT : since duplicated functionality with get_position
@@ -733,10 +736,11 @@ typedef struct {
        GCond subtitle_info_cond;
        GMutex subtitle_info_mutex;
 
-       /* To store the current running audio pad index of demuxer */
-       gint demux_pad_index;
+       /* stream collection */
+       GstStreamCollection *collection;
+       guint stream_notify_id;
 
-       mmplayer_selector_t selector[MM_PLAYER_TRACK_TYPE_MAX];
+       mmplayer_track_t track[MM_PLAYER_TRACK_TYPE_MAX];
 
        guint internal_text_idx;
        guint external_text_idx;
@@ -803,16 +807,6 @@ typedef struct {
        FILE *dump_element_file;
 } mmplayer_dump_t;
 
-typedef struct {
-       char *name;
-       int value_type;
-       int flags;                              // r, w
-       void *default_value;
-       int valid_type;                 // validity type
-       int value_min;                  //<- set validity value range
-       int value_max;          //->
-} mmplayer_attrs_spec_t;
-
 /*===========================================================================================
 |                                                                                                                                                                                      |
 |  GLOBAL FUNCTION PROTOTYPES                                                                                                                          |
@@ -847,8 +841,8 @@ int _mmplayer_set_subtitle_silent(MMHandleType hplayer, int silent);
 int _mmplayer_get_subtitle_silent(MMHandleType hplayer, int *silent);
 int _mmplayer_set_external_subtitle_path(MMHandleType hplayer, const char *filepath);
 int _mmplayer_get_buffer_position(MMHandleType hplayer, int *start_pos, int *end_pos);
-int _mmplayer_update_video_param(mmplayer_t *player, char *param_name);
-int _mmplayer_change_videosink(MMHandleType handle, MMDisplaySurfaceType surface_type, void *display_overlay);
+int _mmplayer_update_video_overlay_param(mmplayer_t *player, const char *param_name);
+int _mmplayer_change_videosink(MMHandleType handle, MMDisplaySurfaceType surface_type, int wl_surface_id);
 int _mmplayer_audio_effect_custom_apply(mmplayer_t *player);
 int _mmplayer_set_audio_decoded_cb(MMHandleType hplayer, mmplayer_audio_extract_opt_e opt, mm_player_audio_decoded_callback callback, void *user_param);
 int _mmplayer_change_track_language(MMHandleType hplayer, mmplayer_track_type_e type, int index);
@@ -868,12 +862,13 @@ int _mmplayer_get_max_adaptive_variant_limit(MMHandleType hplayer, int *bandwidt
 int _mmplayer_set_audio_only(MMHandleType hplayer, bool audio_only);
 int _mmplayer_get_audio_only(MMHandleType hplayer, bool *paudio_only);
 int _mmplayer_get_streaming_buffering_time(MMHandleType hplayer, int *prebuffer_ms, int *rebuffer_ms);
-int _mmplayer_set_codec_type(MMHandleType hplayer, mmplayer_stream_type_e stream_type, mmplayer_video_codec_type_e codec_type);
+int _mmplayer_set_codec_type(MMHandleType hplayer, mmplayer_stream_type_e stream_type, mmplayer_codec_type_e codec_type);
 int _mmplayer_set_replaygain_enabled(MMHandleType hplayer, bool enabled);
 int _mmplayer_is_replaygain_enabled(MMHandleType hplayer, bool *enabled);
 int _mmplayer_set_video_roi_area(MMHandleType hplayer, double scale_x, double scale_y, double scale_width, double scale_height);
 int _mmplayer_get_video_roi_area(MMHandleType hplayer, double *scale_x, double *scale_y, double *scale_width, double *scale_height);
-int _mmplayer_set_client_pid(MMHandleType hplayer, int pid);
+int _mmplayer_audio_offload_is_activated(MMHandleType hplayer, bool *activated);
+int _mmplayer_is_audio_control_available(MMHandleType hplayer, mmplayer_audio_control_opt_e opt, bool *available);
 
 /* internal */
 void _mmplayer_bus_msg_thread_destroy(MMHandleType hplayer);
@@ -888,6 +883,7 @@ gboolean _mmplayer_gst_remove_fakesink(mmplayer_t *player, mmplayer_gst_element_
 void _mmplayer_add_signal_connection(mmplayer_t *player, GObject *object, mmplayer_signal_type_e type, const gchar *signal, GCallback cb_funct, gpointer u_data);
 void _mmplayer_gst_decode_pad_added(GstElement *elem, GstPad *pad, gpointer data);
 gint _mmplayer_gst_decode_autoplug_select(GstElement *bin,  GstPad *pad, GstCaps *caps, GstElementFactory *factory, gpointer data);
+GValueArray *_mmplayer_gst_decode_autoplug_sort(GstElement *bin, GstPad *pad, GstCaps *caps, GValueArray *factories, gpointer data);
 gboolean _mmplayer_gst_create_decoder(mmplayer_t *player, GstPad *srcpad, const GstCaps *caps);
 void _mmplayer_gst_element_added(GstElement *bin, GstElement *element, gpointer data);
 GstElement *_mmplayer_gst_make_decodebin(mmplayer_t *player);
@@ -895,7 +891,8 @@ int _mmplayer_gst_element_add_bucket_to_bin(GstBin *bin, GList *element_bucket);
 int _mmplayer_gst_element_link_bucket(GList *element_bucket);
 void _mmplayer_typefind_have_type(GstElement *tf, guint probability, GstCaps *caps, gpointer data);
 int _mmplayer_parse_profile(const char *uri, void *param, mmplayer_parse_profile_t *data);
-
+int _mmplayer_set_client_pid(MMHandleType hplayer, int pid);
+void _mmplayer_set_reconfigure_state(mmplayer_t *player, gboolean state);
 void _mmplayer_gst_decode_pad_removed(GstElement *elem, GstPad *new_pad, gpointer data);
 void _mmplayer_gst_decode_no_more_pads(GstElement *elem, gpointer data);
 void _mmplayer_gst_decode_drained(GstElement *bin, gpointer data);