Add audioresample for supporting various samplerates
[platform/core/api/mediacodec.git] / include / media_codec_port.h
old mode 100755 (executable)
new mode 100644 (file)
index 440292c..f2a732c
 #define GET_IS_DECODER(x) CHECK_BIT(x, 1)
 #define GET_IS_HW(x) CHECK_BIT(x, 2)
 #define GET_IS_SW(x) CHECK_BIT(x, 3)
-
-//#define GET_IS_OMX(x) CHECK_BIT(x, 4)
-//#define GET_IS_GEN(x) CHECK_BIT(x, 5)
+/*
+#define GET_IS_OMX(x) CHECK_BIT(x, 4)
+#define GET_IS_GEN(x) CHECK_BIT(x, 5)
+*/
 
 #if 1
 #define MEDIACODEC_FENTER();
 #define MEDIACODEC_FLEAVE();
 #else
-#define MEDIACODEC_FENTER();          LOGW("%s Enter",__FUNCTION__);
-#define MEDIACODEC_FLEAVE();          LOGW("%s Exit",__FUNCTION__);
+#define MEDIACODEC_FENTER();   LOGW("%s Enter", __FUNCTION__);
+#define MEDIACODEC_FLEAVE();   LOGW("%s Exit", __FUNCTION__);
 #endif
 
 /*---------------------------------------------------------------------------
 /**
  * @brief Enumerations of media codec port's retrun value
  */
-typedef enum
-{
-    MC_ERROR_NONE               =    0,
-    MC_ERROR                    =   -1,     /**< codec happens error */
-    MC_MEMORY_ERROR             =   -2,     /**< codec memory is not enough */
-    MC_PARAM_ERROR              =   -3,     /**< codec parameter is error */
-    MC_INVALID_ARG              =   -4,     /** < codec has invalid arguments */
-    MC_PERMISSION_DENIED        =   -5,
-    MC_INVALID_STATUS           =   -6,     /**< codec works at invalid status */
-    MC_NOT_SUPPORTED            =   -7,     /**< codec can't support this specific video format */
-    MC_INVALID_IN_BUF           =   -8,
-    MC_INVALID_OUT_BUF          =   -9,
-    MC_INTERNAL_ERROR           =   -10,
-    MC_HW_ERROR                 =   -11,    /**< codec happens hardware error */
-    MC_NOT_INITIALIZED          =   -12,
-    MC_INVALID_STREAM           =   -13,
-    MC_CODEC_NOT_FOUND          =   -14,
-    MC_ERROR_DECODE             =   -15,
-    MC_OUTPUT_BUFFER_EMPTY      =   -16,
-    MC_OUTPUT_BUFFER_OVERFLOW   =   -17,    /**< codec output buffer is overflow */
-    MC_MEMORY_ALLOCED           =   -18,    /**< codec has got memory and can decode one frame */
-    MC_COURRPTED_INI            =   -19,
+typedef enum {
+       MC_ERROR_NONE               =    0,
+       MC_ERROR                    =   -1,     /**< codec happens error */
+       MC_MEMORY_ERROR             =   -2,     /**< codec memory is not enough */
+       MC_PARAM_ERROR              =   -3,     /**< codec parameter is error */
+       MC_INVALID_ARG              =   -4,     /** < codec has invalid arguments */
+       MC_PERMISSION_DENIED        =   -5,
+       MC_INVALID_STATUS           =   -6,     /**< codec works at invalid status */
+       MC_NOT_SUPPORTED            =   -7,     /**< codec can't support this specific video format */
+       MC_INVALID_IN_BUF           =   -8,
+       MC_INVALID_OUT_BUF          =   -9,
+       MC_INTERNAL_ERROR           =   -10,
+       MC_HW_ERROR                 =   -11,    /**< codec happens hardware error */
+       MC_NOT_INITIALIZED          =   -12,
+       MC_INVALID_STREAM           =   -13,
+       MC_CODEC_NOT_FOUND          =   -14,
+       MC_ERROR_DECODE             =   -15,
+       MC_OUTPUT_BUFFER_EMPTY      =   -16,
+       MC_OUTPUT_BUFFER_OVERFLOW   =   -17,    /**< codec output buffer is overflow */
+       MC_MEMORY_ALLOCED           =   -18,    /**< codec has got memory and can decode one frame */
+       MC_COURRPTED_INI            =   -19,
+       MC_OUT_OF_MEMORY                        =       -20,    /**< when memory is not allocated */
 } mc_ret_e;
 
+typedef enum {
+       NONE,
+       L16,
+       ALAW,
+       ULAW,
+       AMR_NB,
+       AMR_WB,
+       G729,
+       AAC_LC,
+       AAC_HE,
+       AAC_HE_PS,
+       MP3,
+       VORBIS,
+       FLAC,
+       WMAV1,
+       WMAV2,
+       WMAPRO,
+       WMALSL,
+       H261,
+       H263,
+       H264,
+       MJPEG,
+       MPEG1,
+       MPEG2,
+       MPEG4,
+       HEVC,
+       VP8,
+       VP9,
+       VC1,
+       CODEC_NR_ITEMS
+} codec_type_e;
+
 /*---------------------------------------------------------------------------
 |    GLOBAL DATA TYPE DEFINITIONS:                                                                                         |
 ---------------------------------------------------------------------------*/
@@ -111,100 +144,71 @@ typedef void (*mc_buffer_status_cb)(mediacodec_status_e status, void *user_data)
 typedef void (*mc_supported_codec_cb)(mediacodec_codec_type_e codec_type, void *user_data);
 
 typedef enum {
-    _MEDIACODEC_EVENT_TYPE_COMPLETE,
-    _MEDIACODEC_EVENT_TYPE_EMPTYBUFFER,
-    _MEDIACODEC_EVENT_TYPE_FILLBUFFER,
-    _MEDIACODEC_EVENT_TYPE_ERROR,
-    _MEDIACODEC_EVENT_TYPE_EOS,
-    _MEDIACODEC_EVENT_TYPE_BUFFER_STATUS,
-    _MEDIACODEC_EVENT_TYPE_INTERNAL_FILLBUFFER,
-    _MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC,
-    _MEDIACODEC_EVENT_TYPE_NUM
+       _MEDIACODEC_EVENT_TYPE_COMPLETE,
+       _MEDIACODEC_EVENT_TYPE_EMPTYBUFFER,
+       _MEDIACODEC_EVENT_TYPE_FILLBUFFER,
+       _MEDIACODEC_EVENT_TYPE_ERROR,
+       _MEDIACODEC_EVENT_TYPE_EOS,
+       _MEDIACODEC_EVENT_TYPE_BUFFER_STATUS,
+       _MEDIACODEC_EVENT_TYPE_INTERNAL_FILLBUFFER,
+       _MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC,
+       _MEDIACODEC_EVENT_TYPE_NUM
 } _mediacodec_event_e;
 
 
-typedef enum _mc_codec_port_type_e
-{
-    CODEC_PORT_TYPE_GENERAL,
-    CODEC_PORT_TYPE_OMX,
-    CODEC_PORT_TYPE_GST,
-    CODEC_PORT_TYPE_MAX,
+typedef enum _mc_codec_port_type_e {
+       CODEC_PORT_TYPE_GENERAL,
+       CODEC_PORT_TYPE_OMX,
+       CODEC_PORT_TYPE_GST,
+       CODEC_PORT_TYPE_MAX,
 } mc_codec_port_type_e;
 
-typedef enum _mc_vendor_e
-{
-    MC_VENDOR_DEFAULT,
-    MC_VENDOR_SLSI_SEC,
-    MC_VENDOR_SLSI_EXYNOS,
-    MC_VENDOR_QCT,
-    MC_VENDOR_SPRD
-} mc_vendor_e;
-
-struct _mc_decoder_info_t
-{
-    int width;
-    int height;
-    int actwidth;
-    int actheight;
-
-    int samplerate;
-    int channel;
-    int bit;
-};
-
-struct _mc_encoder_info_t
-{
-    int width;
-    int height;
-    int bitrate;
-    int format;
-    int fps;
-    int qp_min;
-    int qp_max;
-    int vbvbuffer_size;
-    int level;
-    int profile;
-
-    int samplerate;
-    int channel;
-    int bit;
-};
+typedef struct mc_audio_port_definition_t {
+       gint samplerate;
+       gint channel;
+       gint bit_depth;
+       gint bitrate;
+} mc_audio_port_definition_t;
+
+typedef struct mc_video_port_definition_t {
+       gchar *format;
+       gint width;
+       gint height;
+       gint stride;
+       gint bitrate;
+       gint framerate;
+} mc_video_port_definition_t;
 
 /* Codec Private data */
-struct _mc_handle_t
-{
-    int state;                                  /**<  mc current state */
-    bool is_encoder;
-    bool is_video;
-    bool is_hw;
-    bool is_prepared;
-
-    GList *supported_codecs;
-    mediacodec_port_type_e port_type;
-    mediacodec_codec_type_e codec_id;
-    mc_vendor_e vendor;
-
-    void *ports[2];
-    void *core;
-
-    union
-    {
-        mc_decoder_info_t decoder;
-        mc_encoder_info_t encoder;
-    } info;
-
-    /* for process done cb */
-    void* user_cb[_MEDIACODEC_EVENT_TYPE_NUM];
-    void* user_data[_MEDIACODEC_EVENT_TYPE_NUM];
-
-    mc_codec_map_t encoder_map[MEDIA_CODEC_MAX_CODEC_TYPE];
-    mc_codec_map_t decoder_map[MEDIA_CODEC_MAX_CODEC_TYPE];
-
-    int num_supported_codecs;
-    int num_supported_decoder;
-    int num_supported_encoder;
-
-    mc_ini_t ini;
+struct _mc_handle_t {
+       int state;                                  /**<  mc current state */
+       bool is_encoder;
+       bool is_video;
+       bool is_hw;
+       bool is_prepared;
+
+       mediacodec_port_type_e port_type;
+       mediacodec_codec_type_e codec_id;
+
+       void *ports[2];
+       void *core;
+
+       union {
+               mc_audio_port_definition_t audio;
+               mc_video_port_definition_t video;
+       } info;
+
+       /* for process done cb */
+       void* user_cb[_MEDIACODEC_EVENT_TYPE_NUM];
+       void* user_data[_MEDIACODEC_EVENT_TYPE_NUM];
+
+       mc_codec_map_t encoder_map[MEDIA_CODEC_MAX_CODEC_TYPE];
+       mc_codec_map_t decoder_map[MEDIA_CODEC_MAX_CODEC_TYPE];
+
+       int num_supported_decoder;
+       int num_supported_encoder;
+
+       mc_ini_t *ini;
 };
 
 /*===========================================================================================
@@ -228,6 +232,8 @@ int mc_set_venc_info(MMHandleType mediacodec, int width, int height, int fps, in
 int mc_set_adec_info(MMHandleType mediacodec, int samplerate, int channel, int bit);
 int mc_set_aenc_info(MMHandleType mediacodec, int samplerate, int channel, int bit,  int bitrate);
 
+int mc_configure(MMHandleType mediacodec, media_format_h format, int flags);
+
 int mc_prepare(MMHandleType mediacodec);
 int mc_unprepare(MMHandleType mediacodec);
 
@@ -237,6 +243,8 @@ int mc_get_output(MMHandleType mediacodec, media_packet_h *outbuf, uint64_t time
 int mc_flush_buffers(MMHandleType mediacodec);
 int mc_get_supported_type(MMHandleType mediacodec, mediacodec_codec_type_e codec_type, bool encoder, int *support_type);
 
+int mc_get_packet_pool(MMHandleType mediacodec, media_packet_pool_h *pool);
+
 int mc_set_empty_buffer_cb(MMHandleType mediacodec, mediacodec_input_buffer_used_cb callback, void* user_data);
 int mc_unset_empty_buffer_cb(MMHandleType mediacodec);
 
@@ -251,7 +259,16 @@ int mc_unset_eos_cb(MMHandleType mediacodec);
 
 int mc_set_buffer_status_cb(MMHandleType mediacodec, mediacodec_buffer_status_cb callback, void* user_data);
 int mc_unset_buffer_status_cb(MMHandleType mediacodec);
+int mc_set_supported_codec_cb(MMHandleType mediacodec, mediacodec_supported_codec_cb callback, void* user_data);
+int _mediacodec_foreach_supported_codec(mediacodec_supported_codec_cb callback, void* user_data);
+
+void _mc_create_codec_map_from_ini(mc_handle_t *mc_handle, mc_codec_spec_t *spec_emul);
+void _mc_create_codec_map_from_ini_static(mc_ini_t *ini, mc_codec_spec_t *spec_emul);
+void _mc_create_decoder_map_from_ini(mc_handle_t *mc_handle);
+void _mc_create_encoder_map_from_ini(mc_handle_t *mc_handle);
 
+const codec_type_e simple_to_codec_type_enumeration(codec_type_e codec_id);
+const codec_type_e codec_type_to_simple_enumeration(mediacodec_codec_type_e media_codec_id);
 
 #ifdef __cplusplus
 }