diff options
Diffstat (limited to 'msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h')
-rw-r--r-- | msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h b/msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h new file mode 100644 index 0000000..93c04e7 --- /dev/null +++ b/msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h @@ -0,0 +1,169 @@ +/*-------------------------------------------------------------------------- +Copyright (c) 2010 - 2013, The Linux Foundation. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of The Linux Foundation nor + the names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------*/ +#ifndef MP4_UTILS_H +#define MP4_UTILS_H +#include "OMX_Core.h" +#include "OMX_QCOMExtns.h" +typedef signed long long int64; +typedef unsigned int uint32; /* Unsigned 32 bit value */ +typedef unsigned short uint16; /* Unsigned 16 bit value */ +typedef unsigned char uint8; /* Unsigned 8 bit value */ + +typedef int int32; /* Signed 32 bit value */ +typedef signed short int16; /* Signed 16 bit value */ +typedef signed char int8; /* Signed 8 bit value */ + +typedef unsigned char byte; /* Unsigned 8 bit value type. */ +#define SIMPLE_PROFILE_LEVEL0 0x08 +#define SIMPLE_PROFILE_LEVEL1 0x01 +#define SIMPLE_PROFILE_LEVEL2 0x02 +#define SIMPLE_PROFILE_LEVEL3 0x03 +#define SIMPLE_PROFILE_LEVEL4A 0x04 +#define SIMPLE_PROFILE_LEVEL5 0x05 +#define SIMPLE_PROFILE_LEVEL6 0x06 +#define SIMPLE_PROFILE_LEVEL0B 0x09 + +#define SIMPLE_SCALABLE_PROFILE_LEVEL0 0x10 +#define SIMPLE_SCALABLE_PROFILE_LEVEL1 0x11 +#define SIMPLE_SCALABLE_PROFILE_LEVEL2 0x12 + +#define SIMPLE_SCALABLE_PROFILE_LEVEL0 0x10 +#define SIMPLE_SCALABLE_PROFILE_LEVEL1 0x11 +#define SIMPLE_SCALABLE_PROFILE_LEVEL2 0x12 +#define ADVANCED_SIMPLE_PROFILE_LEVEL0 0xF0 +#define ADVANCED_SIMPLE_PROFILE_LEVEL1 0xF1 +#define ADVANCED_SIMPLE_PROFILE_LEVEL2 0xF2 +#define ADVANCED_SIMPLE_PROFILE_LEVEL3 0xF3 +#define ADVANCED_SIMPLE_PROFILE_LEVEL4 0xF4 +#define ADVANCED_SIMPLE_PROFILE_LEVEL5 0xF5 + +#define VISUAL_OBJECT_SEQUENCE_START_CODE 0x000001B0 +#define MP4ERROR_SUCCESS 0 + +#define VIDEO_OBJECT_LAYER_START_CODE_MASK 0xFFFFFFF0 +#define VIDEO_OBJECT_LAYER_START_CODE 0x00000120 +#define VOP_START_CODE_MASK 0xFFFFFFFF +#define VOP_START_CODE 0x000001B6 +#define GOV_START_CODE 0x000001B3 +#define SHORT_HEADER_MASK 0xFFFFFC00 +#define SHORT_HEADER_START_MARKER 0x00008000 +#define SHORT_HEADER_START_CODE 0x00008000 +#define SPARK1_START_CODE 0x00008400 +#define MPEG4_SHAPE_RECTANGULAR 0x00 +#define EXTENDED_PAR 0xF +#define SHORT_VIDEO_START_MARKER 0x20 +#define MP4_INVALID_VOL_PARAM (0x0001) // unsupported VOL parameter +#define MP4ERROR_UNSUPPORTED_UFEP -1068 +#define MP4ERROR_UNSUPPORTED_SOURCE_FORMAT -1069 +#define MASK(x) (0xFFFFFFFF >> (32 - (x))) +#define VISUAL_OBJECT_TYPE_VIDEO_ID 0x1 +#define VISUAL_OBJECT_START_CODE 0x000001B5 +#define VIDEO_OBJECT_START_CODE_MASK 0xFFFFFFE0 +#define VIDEO_OBJECT_START_CODE 0x00000100 + +#define RESERVED_OBJECT_TYPE 0x0 +#define SIMPLE_OBJECT_TYPE 0x1 +#define SIMPLE_SCALABLE_OBJECT_TYPE 0x2 +#define CORE_OBJECT_TYPE 0x3 +#define MAIN_OBJECT_TYPE 0x4 +#define N_BIT_OBJECT_TYPE 0x5 +#define BASIC_ANIMATED_2D_TEXTURE 0x6 +#define ANIMATED_2D_MESH 0x7 +#define ADVANCED_SIMPLE 0x11 + + +#define SIMPLE_L1_MAX_VBVBUFFERSIZE 10 /* VBV Max Buffer size=10 (p. 498) */ +#define SIMPLE_L1_MAX_BITRATE 160 /* is is 64kpbs or 160 400bits/sec units */ +#define SIMPLE_L2_MAX_VBVBUFFERSIZE 40 /* VBV Max Buffer size = 40 */ +#define SIMPLE_L2_MAX_BITRATE 320 /* 320 400bps units = 128kpbs */ +#define SIMPLE_L3_MAX_VBVBUFFERSIZE 40 /* VBV Max Buffer size = 40 */ +#define SIMPLE_L3_MAX_BITRATE 960 /* 960 400bps units = 384kpbs */ + +/* The MP4 decoder currently supports Simple Profile@L3 */ +#define MAX_VBVBUFFERSIZE (SIMPLE_L3_MAX_VBVBUFFERSIZE) +#define MAX_BITRATE (SIMPLE_L3_MAX_BITRATE) + +#define MAX_QUANTPRECISION 9 +#define MIN_QUANTPRECISION 3 + +#define MP4_VGA_WIDTH 640 +#define MP4_VGA_HEIGHT 480 +#define MP4_WVGA_WIDTH 800 +#define MP4_WVGA_HEIGHT 480 +#define MP4_720P_WIDTH 1280 +#define MP4_720P_HEIGHT 720 + +#define MP4_MAX_DECODE_WIDTH MP4_720P_WIDTH +#define MP4_MAX_DECODE_HEIGHT MP4_720P_HEIGHT + +typedef struct { + unsigned char *data; + unsigned long int numBytes; +} mp4StreamType; + +#define MAX_FRAMES_IN_CHUNK 10 +#define VOP_START_CODE 0x000001B6 +#define VOL_START_CODE 0x000001B0 + +typedef enum VOPTYPE { + NO_VOP = -1, // bitstream contains no VOP. + MPEG4_I_VOP = 0, // bitstream contains an MPEG4 I-VOP + MPEG4_P_VOP = 1, // bitstream contains an MPEG4 P-VOP + MPEG4_B_VOP = 2, // bitstream contains an MPEG4 B-VOP + MPEG4_S_VOP = 3, // bitstream contains an MPEG4 S-VOP +} VOP_TYPE; + +typedef struct { + uint32 timestamp_increment; + uint32 offset; + uint32 size; + VOP_TYPE vopType; +} mp4_frame_info_type; + +class MP4_Utils +{ + private: + struct posInfoType { + uint8 *bytePtr; + uint8 bitPos; + }; + + posInfoType m_posInfo; + byte *m_dataBeginPtr; + unsigned int vop_time_resolution; + bool vop_time_found; + uint16 m_SrcWidth, m_SrcHeight; // Dimensions of the source clip + public: + MP4_Utils(); + ~MP4_Utils(); + int16 populateHeightNWidthFromShortHeader(mp4StreamType * psBits); + bool parseHeader(mp4StreamType * psBits); + static uint32 read_bit_field(posInfoType * posPtr, uint32 size); + bool is_notcodec_vop(unsigned char *pbuffer, unsigned int len); +}; +#endif |