Added new audio/video enums 16/122316/3 accepted/tizen/unified/20170421.115019 submit/tizen/20170421.070846
authorSejun Park <sejun79.park@samsung.com>
Fri, 31 Mar 2017 05:11:59 +0000 (14:11 +0900)
committerSejun Park <sejun79.park@samsung.com>
Thu, 20 Apr 2017 04:22:22 +0000 (13:22 +0900)
Change-Id: Ic6b88b0942b3a17171f9c2f5f9d69c936e0212c1

include/media_format.h
include/media_format_private.h
src/media_format.c
src/media_packet.c
test/media_packet_test.c

index 09384efbb9e6927e9049b51c9ac200ec5fb54db5..992884158fa3daa40df7b5c125c5677e205929f3 100755 (executable)
@@ -93,12 +93,16 @@ typedef enum {
        MEDIA_FORMAT_AAC_HE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x1061),                /**< media format mime type is AAC_HE,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_AAC_HE_PS = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x1062),     /**< media format mime type is AAC_HE_PS,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_MP3 = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x1070),                   /**< media format mime type is MP3,  AUDIO*/
+       MEDIA_FORMAT_MP2 = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x1071),                        /**< media format mime type is MP23, AUDIO, (Since 4.0) */
        MEDIA_FORMAT_VORBIS = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x1080),                /**< media format mime type is VORBIS,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_FLAC = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x1090),                  /**< media format mime type is FLAC,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_WMAV1 = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10A0),                 /**< media format mime type is WMAV1,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_WMAV2 = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10A1),                 /**< media format mime type is WMAV2,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_WMAPRO = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10A2),                /**< media format mime type is WMAVPRO,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_WMALSL = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10A3),                /**< media format mime type is WMAVLSL,  AUDIO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
+       MEDIA_FORMAT_AC3 = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10B1),                        /**< media format mime type is AC3, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_EAC3 = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10B2),                       /**< media format mime type is EAC3, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_DTS = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_ENCODED | 0x10C1),                        /**< media format mime type is DTS, AUDIO, (Since 4.0) */
 
        MEDIA_FORMAT_PCM = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1510),                       /**< media format mime type is PCM, AUDIO, indicates MEDIA_FORMAT_PCM_S16LE (Since 3.0) */
        MEDIA_FORMAT_PCM_S16LE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1510),                 /**< media format mime type is PCM signed 16-bit little-endian, AUDIO, (Since 3.0) */
@@ -109,6 +113,12 @@ typedef enum {
        MEDIA_FORMAT_PCM_S32BE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1515),                 /**< media format mime type is PCM signed 32-bit big-endian, AUDIO, (Since 3.0) */
        MEDIA_FORMAT_PCM_F32LE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1516),                 /**< media format mime type is PCM 32-bit floating point little-endian, AUDIO, (Since 3.0) */
        MEDIA_FORMAT_PCM_F32BE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1517),                 /**< media format mime type is PCM 32-bit floating point big-endian, AUDIO, (Since 3.0) */
+       MEDIA_FORMAT_PCM_U16LE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1518),                 /**< media format mime type is PCM unsigned 16-bit little-endian, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_PCM_U24LE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1519),                 /**< media format mime type is PCM unsigned 24-bit little-endian, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_PCM_U32LE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x151A),                 /**< media format mime type is PCM unsigned 32-bit little-endian, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_PCM_U16BE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x151B),                 /**< media format mime type is PCM unsigned 16-bit big-endian, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_PCM_U24BE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x151C),                 /**< media format mime type is PCM unsigned 24-bit big-endian, AUDIO, (Since 4.0) */
+       MEDIA_FORMAT_PCM_U32BE = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x151D),                 /**< media format mime type is PCM unsigned 32-bit big-endian, AUDIO, (Since 4.0) */
        MEDIA_FORMAT_PCMA = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1520),                      /**< media format mime type is PCM A-law, AUDIO */
        MEDIA_FORMAT_PCMU = (MEDIA_FORMAT_AUDIO | MEDIA_FORMAT_RAW | 0x1530),                      /**< media format mime type is PCM U-law, AUDIO */
 
@@ -146,6 +156,9 @@ typedef enum {
        MEDIA_FORMAT_VP8 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_ENCODED | 0x2090),                   /**< media format mime type is VP8, VIDEO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_VP9 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_ENCODED | 0x20A0),                   /**< media format mime type is VP9, VIDEO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
        MEDIA_FORMAT_VC1 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_ENCODED | 0x20B0),                   /**< media format mime type is VC1, VIDEO, (Since @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif) */
+       MEDIA_FORMAT_DIVX4 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_ENCODED | 0x20C4),                      /**< media format mime type is DIVX4, VIDEO, (Since 4.0) */
+       MEDIA_FORMAT_DIVX5 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_ENCODED | 0x20C5),                      /**< media format mime type is DIVX5, VIDEO, (Since 4.0) */
+       MEDIA_FORMAT_XVID = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_ENCODED | 0x20d0),                       /**< media format mime type is XVID, VIDEO, (Since 4.0) */
 
        MEDIA_FORMAT_I420 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_RAW | 0x2510),                      /**< media format mime type is I420, VIDEO */
        MEDIA_FORMAT_NV12 = (MEDIA_FORMAT_VIDEO | MEDIA_FORMAT_RAW | 0x2520),                      /**< media format mime type is NV12, VIDEO */
@@ -689,6 +702,35 @@ int media_format_is_writable(media_format_h fmt, bool * is_writable);
  */
 int media_format_make_writable(media_format_h fmt, media_format_h * out_fmt);
 
+/**
+ * @brief Sets extra data of media format.
+ * @details    The user can sets data that media format does not support.
+ * @since_tizen 4.0
+ * @param[in] fmt   The media format handle
+ * @param[in] extra    The extra data to set
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #MEDIA_FORMAT_ERROR_NONE Successful
+ * @retval #MEDIA_FORMAT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see media_format_get_extra()
+ */
+int media_format_set_extra(media_format_h fmt, void *extra);
+
+/**
+ * @brief Gets extra data of media format.
+ * @details    The user can get extra data which user sets value via media_format_set_extra().
+ * @since_tizen 4.0
+ * @param[in]  fmt   The media format handle
+ * @param[out] extra    The extra data to get
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #MEDIA_FORMAT_ERROR_NONE Successful
+ * @retval #MEDIA_FORMAT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see media_format_set_extra()
+ */
+int media_format_get_extra(media_format_h fmt, void **extra);
 /**
  * @}
  */
index 26aa03d0e51558d144aeb018d3ad2f8cf4bf8fc3..0d64f7c2f2232e790f9c8c70dc1d819c27c85e1d 100755 (executable)
@@ -173,6 +173,7 @@ typedef struct _media_format_s {
        int ref_count;                  /**< media format struct reference count */
        media_format_mimetype_e mimetype;                  /**< media format struct mimetype of media_format_mimetype_e */
 
+       void *extradata;
        union {
                media_format_audio_spec_s audio;                  /**< media format struct audio of media_format_audio_spec_s */
                media_format_video_spec_s video;                  /**< media format struct video of media_format_video_spec_s */
index 71bc5ea7b77864e91ff876c8d2ffa0973efec6e8..1a4ff5c1c68b8cd644ab593779e4d4f303c314ba 100755 (executable)
@@ -695,3 +695,28 @@ int media_format_make_writable(media_format_h fmt, media_format_h *out_fmt)
 
        return ret;
 }
+
+int media_format_set_extra(media_format_h fmt, void *extra)
+{
+       MEDIA_FORMAT_INSTANCE_CHECK(fmt);
+
+       media_format_s *fmt_handle;
+       fmt_handle = (media_format_s *)fmt;
+
+       fmt_handle->extradata = extra;
+
+       return MEDIA_FORMAT_ERROR_NONE;
+}
+
+int media_format_get_extra(media_format_h fmt, void **extra)
+{
+       MEDIA_FORMAT_INSTANCE_CHECK(fmt);
+
+       media_format_s *fmt_handle;
+       fmt_handle = (media_format_s *)fmt;
+
+       if (extra)
+               *extra = fmt_handle->extradata;
+
+       return MEDIA_FORMAT_ERROR_NONE;
+}
index afef88e77789d2a3545707ca7e0199bc56eb5c96..b5a6a6fbb93f1a993357ad8132aaade856df9a00 100755 (executable)
@@ -445,6 +445,9 @@ static size_t _pkt_calculate_video_buffer_size(media_packet_s *pkt)
        case MEDIA_FORMAT_MPEG2_HP:
        case MEDIA_FORMAT_MPEG4_SP:
        case MEDIA_FORMAT_MPEG4_ASP:
+       case MEDIA_FORMAT_DIVX4:
+       case MEDIA_FORMAT_DIVX5:
+       case MEDIA_FORMAT_XVID:
                stride = _ROUND_UP_16(width);
                buffersize = (stride + (_ROUND_UP_16(width) / 2)) * height;
                break;
@@ -473,11 +476,17 @@ static size_t _pkt_calculate_video_buffer_size(media_packet_s *pkt)
 #define OGG_MAX_FRM_SIZE   (2048)      /* FIXME - Need */
 #define FLAC_MAX_FRM_SIZE   (4096)     /* FIXME - Need */
 #define WMA_MAX_FRM_SIZE   (2048)      /* FIXME - Need */
+#define DTS_MAX_FRM_SIZE   (2048)      /* FIXME - Need */
+#define AC3_MAX_FRM_SIZE   (2048)      /* FIXME - Need */
+#define EAC3_MAX_FRM_SIZE   (4096)     /* FIXME - Need */
 
 #define PCM_MAX_NCH                  (2)
 #define MPEG_MIN_NCH                  (2)
 #define AMR_MAX_NCH                  (1)
 #define WMA_MAX_NCH                  (2)
+#define DTS_MAX_NCH                  (2)
+#define AC3_MAX_NCH                  (2)
+#define EAC3_MAX_NCH                 (2)
 
 static size_t _pkt_calculate_audio_buffer_size(media_packet_s *pkt)
 {
@@ -491,12 +500,24 @@ static size_t _pkt_calculate_audio_buffer_size(media_packet_s *pkt)
        }
 
        switch (pkt->format->mimetype) {
-       case MEDIA_FORMAT_PCM:
+       case MEDIA_FORMAT_PCM_S16LE:
+       case MEDIA_FORMAT_PCM_S24LE:
+       case MEDIA_FORMAT_PCM_S32LE:
+       case MEDIA_FORMAT_PCM_S16BE:
+       case MEDIA_FORMAT_PCM_S24BE:
+       case MEDIA_FORMAT_PCM_S32BE:
+       case MEDIA_FORMAT_PCM_U16LE:
+       case MEDIA_FORMAT_PCM_U24LE:
+       case MEDIA_FORMAT_PCM_U32LE:
+       case MEDIA_FORMAT_PCM_U16BE:
+       case MEDIA_FORMAT_PCM_U24BE:
+       case MEDIA_FORMAT_PCM_U32BE:
                buffersize = (PCM_MAX_FRM_SIZE * PCM_MAX_NCH) * (size_t)(bit / 8);
                break;
        case MEDIA_FORMAT_AAC_LC:
        case MEDIA_FORMAT_AAC_HE:
        case MEDIA_FORMAT_AAC_HE_PS:
+       case MEDIA_FORMAT_MP2:
        case MEDIA_FORMAT_MP3:
                buffersize = (MPEG_MAX_FRM_SIZE * MPEG_MIN_NCH) * 2;    /* 2 = (16bit/8) */
                break;
@@ -517,6 +538,15 @@ static size_t _pkt_calculate_audio_buffer_size(media_packet_s *pkt)
        case MEDIA_FORMAT_WMALSL:
                buffersize = (WMA_MAX_FRM_SIZE * WMA_MAX_NCH) * 2;      /* 2 = (16bit/8) */
                break;
+       case MEDIA_FORMAT_DTS:
+               buffersize = (DTS_MAX_FRM_SIZE * DTS_MAX_NCH) * 2;      /* 2 = (16bit/8) */
+               break;
+       case MEDIA_FORMAT_AC3:
+               buffersize = (AC3_MAX_FRM_SIZE * AC3_MAX_NCH) * 2;      /* 2 = (16bit/8) */
+               break;
+       case MEDIA_FORMAT_EAC3:
+               buffersize = (EAC3_MAX_FRM_SIZE * EAC3_MAX_NCH) * 2;    /* 2 = (16bit/8) */
+               break;
        default:
                LOGE("Not supported format\n");
                return 0;
index 369880f1a5fffec8b4fea708fab3cca6daf88861..249dc6fe56fd7d2f5efddedfef0c6b3a26cf6e7b 100755 (executable)
@@ -94,7 +94,7 @@ static void _media_format_set_video_mime(int num)
        if (num == 0) {
                ret = media_format_set_video_mime(g_media_format[media_format_idx], MEDIA_FORMAT_H264_HP);
        } else if (num == 1) {
-               ret = media_format_set_video_mime(g_media_format[media_format_idx], MEDIA_FORMAT_RGB888);
+               ret = media_format_set_video_mime(g_media_format[media_format_idx], MEDIA_FORMAT_RGBA);
        } else if (num == 2) {
                ret = media_format_set_video_mime(g_media_format[media_format_idx], MEDIA_FORMAT_I420);
        } else {