summaryrefslogtreecommitdiff
path: root/msmcobalt/mm-video-v4l2/vidc/vdec/inc/mp4_utils.h
diff options
context:
space:
mode:
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.h169
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