summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/vss/common/inc/M4READER_3gpCom.h
blob: 22a5a03dcf1ca4def20b1e753fdcc77e1a543810 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 ************************************************************************
 * @file    M4READER_3gpCom.h
 * @brief    Generic encapsulation of the core 3gp reader
 * @note    This file declares the generic shell interface retrieving function
 *            of the 3GP reader
 ************************************************************************
*/

#ifndef __M4READER_3GPCOM_H__
#define __M4READER_3GPCOM_H__

#include "NXPSW_CompilerSwitches.h"

#include "M4OSA_Types.h"
#include "M4OSA_Error.h"
#include "M4READER_Common.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Error: Function M4READER_Com3GP_getNextStreamHandler must be called before.
 */
#define M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET        M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000001)

/**
 * Error: No video stream H263 in file.
 */
#define M4ERR_VIDEO_NOT_H263                    M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000002)

/**
 * There has been a problem with the decoder configuration information, seems to be invalid */
#define M4ERR_READER3GP_DECODER_CONFIG_ERROR    M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000003)

#define M4READER_COM3GP_MAXVIDEOSTREAM  5
#define M4READER_COM3GP_MAXAUDIOSTREAM  5
#define M4READER_COM3GP_MAXTEXTSTREAM   5

typedef struct
{
    M4OSA_Context                m_pFFContext;    /**< core file format context */

    M4_StreamHandler*            m_AudioStreams[M4READER_COM3GP_MAXAUDIOSTREAM];
    M4_StreamHandler*            m_pAudioStream;    /**< pointer to the current allocated audio
                                                            stream handler */

    M4_StreamHandler*            m_VideoStreams[M4READER_COM3GP_MAXVIDEOSTREAM];
    M4_StreamHandler*            m_pVideoStream;    /**< pointer to the current allocated video
                                                            stream handler */

#ifdef M4VPS_SUPPORT_TTEXT
    M4_StreamHandler*            m_TextStreams[M4READER_COM3GP_MAXTEXTSTREAM];
    M4_StreamHandler*            m_pTextStream;    /**< pointer to the current allocated text
                                                            stream handler */
#endif /*M4VPS_SUPPORT_TTEXT*/

} M4READER_Com3GP_Context;

/**
 ************************************************************************
 * structure M4READER_3GP_Buffer (but nothing specific to 3GP, nor to a reader !)
 * @brief     This structure defines a buffer that can be used to exchange data (should be in OSAL)
 ************************************************************************
*/
typedef struct
{
    M4OSA_UInt32    size;            /**< the size in bytes of the buffer */
    M4OSA_MemAddr8    dataAddress;    /**< the pointer to the buffer */
} M4READER_3GP_Buffer;

/**
 ************************************************************************
 * enum     M4READER_3GP_OptionID
 * @brief    This enum defines the reader options specific to the 3GP format.
 * @note    These options can be read from or written to a 3GP reader via M4READER_3GP_getOption.
 ************************************************************************
*/
typedef enum
{
    /**
     * Get the DecoderConfigInfo for H263,
     * option value must be a pointer to M4READER_3GP_H263Properties allocated by caller */
    M4READER_3GP_kOptionID_H263Properties = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x01),

    /**
     * Get the Purple Labs drm information */
    M4READER_3GP_kOptionID_PurpleLabsDrm = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x02),

    /**
     * Set the Fast open mode (Only the first AU of each stream will be parsed -> less CPU,
                                 less RAM). */
    M4READER_3GP_kOptionID_FastOpenMode = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x03),

    /**
     * Set the Audio only mode (the video stream won't be opened) */
    M4READER_3GP_kOptionID_AudioOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x04),

    /**
     * Set the Video only mode (the audio stream won't be opened) */
    M4READER_3GP_kOptionID_VideoOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x05),

    /**
     * Get the next video CTS */
    M4READER_3GP_kOptionID_getNextVideoCTS = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x06)

} M4READER_3GP_OptionID;


/**
 ************************************************************************
 * struct    M4READER_3GP_H263Properties
 * @brief    Contains info about H263 stream read from the 3GP file.
 ************************************************************************
*/
typedef struct
{
    /**< the profile as defined in the Visual Object Sequence header, if present */
    M4OSA_UInt8        uiProfile;
    /**< the level as defined in the Visual Object Sequence header, if present */
    M4OSA_UInt8        uiLevel;

} M4READER_3GP_H263Properties;

/**
 ************************************************************************
 * @brief    Get the next stream found in the 3gp file
 * @note
 * @param    pContext:        (IN)    Context of the reader
 * @param    pMediaFamily:    (OUT)    Pointer to a user allocated M4READER_MediaFamily that will
 *                                      be filled with the media family of the found stream
 * @param    pStreamHandler:    (OUT)    Pointer to a stream handler that will be allocated and
 *                                          filled with the found stream description
 * @return    M4NO_ERROR                 There is no error
 * @return    M4ERR_PARAMETER            At least one parameter is not properly set
 * @return    M4WAR_NO_MORE_STREAM    No more available stream in the media (all streams found)
 ************************************************************************
*/
M4OSA_ERR M4READER_Com3GP_getNextStreamHandler(M4OSA_Context context,
                                                 M4READER_MediaFamily *pMediaFamily,
                                                 M4_StreamHandler **pStreamHandler);

/**
 ************************************************************************
 * @brief    Prepare the  access unit (AU)
 * @note    An AU is the smallest possible amount of data to be decoded by a decoder.
 * @param    pContext:        (IN)        Context of the reader
 * @param    pStreamHandler    (IN)        The stream handler of the stream to make jump
 * @param    pAccessUnit        (IN/OUT)    Pointer to an access unit to fill with read data
 *                                          (the au structure is allocated by the user, and must
 *                                          be initialized by calling M4READER_fillAuStruct_fct
 *                                          after creation)
 * @return    M4NO_ERROR                     There is no error
 * @return    M4ERR_PARAMETER                At least one parameter is not properly set
 * @returns    M4ERR_ALLOC                    Memory allocation failed
 ************************************************************************
*/
M4OSA_ERR M4READER_Com3GP_fillAuStruct(M4OSA_Context context, M4_StreamHandler *pStreamHandler,
                                         M4_AccessUnit *pAccessUnit);

/**
 ************************************************************************
 * @brief    Cleans up the stream handler
 * @param    pContext: (IN/OUT) Context of the reader shell
 * @param    pStreamHandler: (IN/OUT) Stream handler
 * @return    M4ERR_PARAMETER:    The context is null
 * @return    M4NO_ERROR:            No error
 ************************************************************************
*/
M4OSA_ERR M4READER_Com3GP_cleanUpHandler(M4_StreamHandler* pStreamHandler);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __M4READER_3GPCOM_H__ */