mm-resource manager integration patch
[platform/core/multimedia/libmm-wfd.git] / src / include / mm_wfd_sink_priv.h
index 5830683..5e7f92b 100644 (file)
@@ -32,6 +32,7 @@
 #include <mm_message.h>
 #include <mm_error.h>
 #include <mm_types.h>
+#include <mm_resource_manager.h>
 
 #include "mm_wfd_sink_ini.h"
 #include "mm_wfd_sink_attrs.h"
@@ -42,7 +43,11 @@ enum WFDSinkMainElementID {
        WFD_SINK_M_PIPE = 0, /* NOTE : WFD_SINK_M_PIPE should be zero */
        WFD_SINK_M_SRC,
        WFD_SINK_M_DEPAY,
+       WFD_SINK_M_QUEUE,
+       WFD_SINK_M_D_VALVE,
        WFD_SINK_M_DEMUX,
+       WFD_SINK_M_A_VALVE,
+       WFD_SINK_M_V_VALVE,
        WFD_SINK_M_NUM
 };
 
@@ -65,6 +70,7 @@ enum WFDSinkAudioSinkBinElementID {
        WFD_SINK_A_S_BIN = 0, /* NOTE : WFD_SINK_A_S_BIN should be zero */
        WFD_SINK_A_S_RESAMPLER,
        WFD_SINK_A_S_VOLUME,
+       WFD_SINK_A_S_QUEUE,
        WFD_SINK_A_S_SINK,
        WFD_SINK_A_S_NUM
 };
@@ -75,8 +81,11 @@ enum WFDSinkVideoDecodeBinElementID {
        WFD_SINK_V_D_QUEUE,
        WFD_SINK_V_D_HDCP,
        WFD_SINK_V_D_H264_PARSE,
-       WFD_SINK_V_D_CAPSSETTER,
        WFD_SINK_V_D_H264_DEC,
+       WFD_SINK_V_D_H265_PARSE,
+       WFD_SINK_V_D_H265_DEC,
+       WFD_SINK_V_D_VP9_PARSE,
+       WFD_SINK_V_D_VP9_DEC,
        WFD_SINK_V_D_NUM
 };
 
@@ -115,6 +124,8 @@ typedef enum {
        WFD_SINK_MANAGER_CMD_LINK_V_DECODEBIN,
        WFD_SINK_MANAGER_CMD_PREPARE_A_PIPELINE,
        WFD_SINK_MANAGER_CMD_PREPARE_V_PIPELINE,
+       WFD_SINK_MANAGER_CMD_UNPREPARE_A_PIPELINE,
+       WFD_SINK_MANAGER_CMD_UNPREPARE_V_PIPELINE,
        WFD_SINK_MANAGER_CMD_EXIT,
 } WFDSinkManagerCMDType;
 
@@ -133,6 +144,12 @@ typedef enum {
        MM_WFD_SINK_RESOLUTION_MAX = 128,
 } MMWFDSinkResolution;
 
+typedef enum {
+       MM_WFD_SINK_RESOURCE_TYPE_VIDEO_DECODER,
+       MM_WFD_SINK_RESOURCE_TYPE_VIDEO_OVERLAY,
+       MM_WFD_SINK_RESOURCE_TYPE_MAX,
+} MMWFDSinkResourceType;
+
 typedef struct {
        gint codec;
        gint width;
@@ -159,11 +176,11 @@ typedef struct {
 } MMWFDSinkGstElement;
 
 typedef struct {
-       MMWFDSinkGstElement     *mainbin;
-       MMWFDSinkGstElement     *a_decodebin;
-       MMWFDSinkGstElement     *v_decodebin;
-       MMWFDSinkGstElement     *a_sinkbin;
-       MMWFDSinkGstElement     *v_sinkbin;
+       MMWFDSinkGstElement     *mainbin;
+       MMWFDSinkGstElement     *a_decodebin;
+       MMWFDSinkGstElement     *v_decodebin;
+       MMWFDSinkGstElement     *a_sinkbin;
+       MMWFDSinkGstElement     *v_sinkbin;
 } MMWFDSinkGstPipelineInfo;
 
 typedef struct {
@@ -183,13 +200,15 @@ typedef struct {
        int(*unprepare)(MMHandleType wfd_sink);
 } MMWFDSinkPrivateFunc;
 
-#define MMWFDSINK_GET_ATTRS(x_wfd) ((x_wfd)? ((mm_wfd_sink_t*)x_wfd)->attrs : (MMHandleType)NULL)
+#define MMWFDSINK_GET_ATTRS(x_wfd) ((x_wfd) ? ((mm_wfd_sink_t*)x_wfd)->attrs : (MMHandleType)NULL)
 
 typedef struct {
        /* gstreamer pipeline */
        MMWFDSinkGstPipelineInfo *pipeline;
        gboolean audio_decodebin_is_linked;
        gboolean video_decodebin_is_linked;
+       gulong update_stream_info_sig_id;
+       gulong change_av_format_sig_id;
 
        /* timestamp compensation */
        gboolean need_to_reset_basetime;
@@ -234,6 +253,17 @@ typedef struct {
        gboolean manager_thread_exit;
 
        MMWFDSinkPrivateFunc *func_table;
+       MMHandleType extend_handle;
+       guint msg_callback_id;
+
+       guint coupled_sink_status;
+       gchar *coupled_sink_address;
+       gboolean is_coupled_sink_supported;
+
+       /* resource manager for H/W resources */
+       mm_resource_manager_h resource_manager;
+       mm_resource_manager_res_h hw_resource[MM_WFD_SINK_RESOURCE_TYPE_MAX];
+       gboolean interrupted_by_resource;
 } mm_wfd_sink_t;
 
 
@@ -251,10 +281,34 @@ int _mm_wfd_sink_set_resolution(mm_wfd_sink_t *wfd_sink, MMWFDSinkResolution res
 
 int __mm_wfd_sink_link_audio_decodebin(mm_wfd_sink_t *wfd_sink);
 int __mm_wfd_sink_link_video_decodebin(mm_wfd_sink_t *wfd_sink);
-int __mm_wfd_sink_prepare_video_pipeline(mm_wfd_sink_t *wfd_sink);
-int __mm_wfd_sink_prepare_audio_pipeline(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_prepare_video_pipeline(mm_wfd_sink_t *wfd_sink, GstPad **sinkpad);
+int __mm_wfd_sink_prepare_audio_pipeline(mm_wfd_sink_t *wfd_sink, GstPad **sinkpad);
+int __mm_wfd_sink_unprepare_audio_pipeline(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_unprepare_video_pipeline(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_activate_audio_stream(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_activate_video_stream(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_deactivate_audio_stream(mm_wfd_sink_t *wfd_sink, gboolean unprepare);
+int __mm_wfd_sink_deactivate_video_stream(mm_wfd_sink_t *wfd_sink, gboolean unprepare);
 
 const gchar *_mm_wfds_sink_get_state_name(MMWFDSinkStateType state);
+int __mm_wfd_sink_check_state(mm_wfd_sink_t *wfd_sink, MMWFDSinkCommandType cmd);
+int __mm_wfd_sink_create_audio_decodebin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_create_video_decodebin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_create_video_sinkbin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_create_audio_sinkbin(mm_wfd_sink_t *wfd_sink);
+void __mm_wfd_sink_print_ref_count(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_gst_element_add_bucket_to_bin(GstBin *bin, GList *element_bucket, gboolean need_prepare);
+int __mm_wfd_sink_gst_element_link_bucket(GList *element_bucket);
+
+int __mm_wfd_sink_set_pipeline_state(mm_wfd_sink_t *wfd_sink, GstState state, gboolean async);
+int __mm_wfd_sink_create_pipeline(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_destroy_audio_decodebin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_destroy_video_decodebin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_destroy_audio_sinkbin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_destroy_video_sinkbin(mm_wfd_sink_t *wfd_sink);
+int __mm_wfd_sink_destroy_pipeline(mm_wfd_sink_t *wfd_sink);
+
+/* state */
+int __mm_wfd_sink_set_state(mm_wfd_sink_t *wfd_sink, MMWFDSinkStateType state);
 
 #endif
-