FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
isom.h
Go to the documentation of this file.
1
/*
2
* ISO Media common code
3
* copyright (c) 2001 Fabrice Bellard
4
* copyright (c) 2002 Francois Revol <revol@free.fr>
5
* copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr>
6
*
7
* This file is part of FFmpeg.
8
*
9
* FFmpeg is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU Lesser General Public
11
* License as published by the Free Software Foundation; either
12
* version 2.1 of the License, or (at your option) any later version.
13
*
14
* FFmpeg is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public
20
* License along with FFmpeg; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
*/
23
24
#ifndef AVFORMAT_ISOM_H
25
#define AVFORMAT_ISOM_H
26
27
#include "
avio.h
"
28
#include "
internal.h
"
29
#include "
dv.h
"
30
31
/* isom.c */
32
extern
const
AVCodecTag
ff_mp4_obj_type
[];
33
extern
const
AVCodecTag
ff_codec_movvideo_tags
[];
34
extern
const
AVCodecTag
ff_codec_movaudio_tags
[];
35
extern
const
AVCodecTag
ff_codec_movsubtitle_tags
[];
36
37
int
ff_mov_iso639_to_lang
(
const
char
lang[4],
int
mp4);
38
int
ff_mov_lang_to_iso639
(
unsigned
code,
char
to
[4]);
39
40
/* the QuickTime file format is quite convoluted...
41
* it has lots of index tables, each indexing something in another one...
42
* Here we just use what is needed to read the chunks
43
*/
44
45
typedef
struct
MOVStts
{
46
int
count
;
47
int
duration
;
48
}
MOVStts
;
49
50
typedef
struct
MOVStsc
{
51
int
first
;
52
int
count
;
53
int
id
;
54
}
MOVStsc
;
55
56
typedef
struct
MOVElst
{
57
int64_t
duration
;
58
int64_t
time
;
59
float
rate
;
60
}
MOVElst
;
61
62
typedef
struct
MOVDref
{
63
uint32_t
type
;
64
char
*
path
;
65
char
*
dir
;
66
char
volume
[28];
67
char
filename
[64];
68
int16_t
nlvl_to
,
nlvl_from
;
69
}
MOVDref
;
70
71
typedef
struct
MOVAtom
{
72
uint32_t
type
;
73
int64_t
size
;
/* total size (excluding the size and type fields) */
74
}
MOVAtom
;
75
76
struct
MOVParseTableEntry
;
77
78
typedef
struct
MOVFragment
{
79
unsigned
track_id
;
80
uint64_t
base_data_offset
;
81
uint64_t
moof_offset
;
82
uint64_t
implicit_offset
;
83
unsigned
stsd_id
;
84
unsigned
duration
;
85
unsigned
size
;
86
unsigned
flags
;
87
int64_t
time
;
88
}
MOVFragment
;
89
90
typedef
struct
MOVTrackExt
{
91
unsigned
track_id
;
92
unsigned
stsd_id
;
93
unsigned
duration
;
94
unsigned
size
;
95
unsigned
flags
;
96
}
MOVTrackExt
;
97
98
typedef
struct
MOVSbgp
{
99
unsigned
int
count
;
100
unsigned
int
index
;
101
}
MOVSbgp
;
102
103
typedef
struct
MOVFragmentIndexItem
{
104
int64_t
moof_offset
;
105
int64_t
time
;
106
}
MOVFragmentIndexItem
;
107
108
typedef
struct
MOVFragmentIndex
{
109
unsigned
track_id
;
110
unsigned
item_count
;
111
unsigned
current_item
;
112
MOVFragmentIndexItem
*
items
;
113
}
MOVFragmentIndex
;
114
115
typedef
struct
MOVStreamContext
{
116
AVIOContext
*
pb
;
117
int
pb_is_copied
;
118
int
ffindex
;
///< AVStream index
119
int
next_chunk
;
120
unsigned
int
chunk_count
;
121
int64_t *
chunk_offsets
;
122
unsigned
int
stts_count
;
123
MOVStts
*
stts_data
;
124
unsigned
int
ctts_count
;
125
MOVStts
*
ctts_data
;
126
unsigned
int
stsc_count
;
127
MOVStsc
*
stsc_data
;
128
unsigned
int
stps_count
;
129
unsigned
*
stps_data
;
///< partial sync sample for mpeg-2 open gop
130
MOVElst
*
elst_data
;
131
unsigned
int
elst_count
;
132
int
ctts_index
;
133
int
ctts_sample
;
134
unsigned
int
sample_size
;
///< may contain value calculated from stsd or value from stsz atom
135
unsigned
int
stsz_sample_size
;
///< always contains sample size from stsz atom
136
unsigned
int
sample_count
;
137
int
*
sample_sizes
;
138
int
keyframe_absent
;
139
unsigned
int
keyframe_count
;
140
int
*
keyframes
;
141
int
time_scale
;
142
int64_t
time_offset
;
///< time offset of the edit list entries
143
int
current_sample
;
144
unsigned
int
bytes_per_frame
;
145
unsigned
int
samples_per_frame
;
146
int
dv_audio_container
;
147
int
pseudo_stream_id
;
///< -1 means demux all ids
148
int16_t
audio_cid
;
///< stsd audio compression id
149
unsigned
drefs_count
;
150
MOVDref
*
drefs
;
151
int
dref_id
;
152
int
timecode_track
;
153
int
wrong_dts
;
///< dts are wrong due to huge ctts offset (iMovie files)
154
int
width
;
///< tkhd width
155
int
height
;
///< tkhd height
156
int
dts_shift
;
///< dts shift when ctts is negative
157
uint32_t
palette
[256];
158
int
has_palette
;
159
int64_t
data_size
;
160
uint32_t
tmcd_flags
;
///< tmcd track flags
161
int64_t
track_end
;
///< used for dts generation in fragmented movie files
162
int
start_pad
;
///< amount of samples to skip due to enc-dec delay
163
unsigned
int
rap_group_count
;
164
MOVSbgp
*
rap_group
;
165
166
int
nb_frames_for_fps
;
167
int64_t
duration_for_fps
;
168
169
int32_t
*
display_matrix
;
170
}
MOVStreamContext
;
171
172
typedef
struct
MOVContext
{
173
const
AVClass
*
class
;
///< class for private options
174
AVFormatContext
*
fc
;
175
int
time_scale
;
176
int64_t
duration
;
///< duration of the longest track
177
int
found_moov
;
///< 'moov' atom has been found
178
int
found_mdat
;
///< 'mdat' atom has been found
179
DVDemuxContext
*
dv_demux
;
180
AVFormatContext
*
dv_fctx
;
181
int
isom
;
///< 1 if file is ISO Media (mp4/3gp)
182
MOVFragment
fragment
;
///< current fragment in moof atom
183
MOVTrackExt
*
trex_data
;
184
unsigned
trex_count
;
185
int
itunes_metadata
;
///< metadata are itunes style
186
int
chapter_track
;
187
int
use_absolute_path
;
188
int
ignore_editlist
;
189
int64_t
next_root_atom
;
///< offset of the next root atom
190
int
export_all
;
191
int
export_xmp
;
192
int
*
bitrates
;
///< bitrates read before streams creation
193
int
bitrates_count
;
194
int
moov_retry
;
195
int
use_mfra_for
;
196
int
has_looked_for_mfra
;
197
MOVFragmentIndex
**
fragment_index_data
;
198
unsigned
fragment_index_count
;
199
int
atom_depth
;
200
}
MOVContext
;
201
202
int
ff_mp4_read_descr_len
(
AVIOContext
*pb);
203
int
ff_mp4_read_descr
(
AVFormatContext
*
fc
,
AVIOContext
*pb,
int
*
tag
);
204
int
ff_mp4_read_dec_config_descr
(
AVFormatContext
*
fc
,
AVStream
*st,
AVIOContext
*pb);
205
void
ff_mp4_parse_es_descr
(
AVIOContext
*pb,
int
*es_id);
206
207
#define MP4ODescrTag 0x01
208
#define MP4IODescrTag 0x02
209
#define MP4ESDescrTag 0x03
210
#define MP4DecConfigDescrTag 0x04
211
#define MP4DecSpecificDescrTag 0x05
212
#define MP4SLDescrTag 0x06
213
214
#define MOV_TFHD_BASE_DATA_OFFSET 0x01
215
#define MOV_TFHD_STSD_ID 0x02
216
#define MOV_TFHD_DEFAULT_DURATION 0x08
217
#define MOV_TFHD_DEFAULT_SIZE 0x10
218
#define MOV_TFHD_DEFAULT_FLAGS 0x20
219
#define MOV_TFHD_DURATION_IS_EMPTY 0x010000
220
#define MOV_TFHD_DEFAULT_BASE_IS_MOOF 0x020000
221
222
#define MOV_TRUN_DATA_OFFSET 0x01
223
#define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
224
#define MOV_TRUN_SAMPLE_DURATION 0x100
225
#define MOV_TRUN_SAMPLE_SIZE 0x200
226
#define MOV_TRUN_SAMPLE_FLAGS 0x400
227
#define MOV_TRUN_SAMPLE_CTS 0x800
228
229
#define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff
230
#define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000
231
#define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000
232
#define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000
233
#define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000
234
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000
235
236
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000
237
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000
238
239
#define MOV_TKHD_FLAG_ENABLED 0x0001
240
#define MOV_TKHD_FLAG_IN_MOVIE 0x0002
241
#define MOV_TKHD_FLAG_IN_PREVIEW 0x0004
242
#define MOV_TKHD_FLAG_IN_POSTER 0x0008
243
244
#define TAG_IS_AVCI(tag) \
245
((tag) == MKTAG('a', 'i', '5', 'p') || \
246
(tag) == MKTAG('a', 'i', '5', 'q') || \
247
(tag) == MKTAG('a', 'i', '5', '2') || \
248
(tag) == MKTAG('a', 'i', '5', '3') || \
249
(tag) == MKTAG('a', 'i', '5', '5') || \
250
(tag) == MKTAG('a', 'i', '5', '6') || \
251
(tag) == MKTAG('a', 'i', '1', 'p') || \
252
(tag) == MKTAG('a', 'i', '1', 'q') || \
253
(tag) == MKTAG('a', 'i', '1', '2') || \
254
(tag) == MKTAG('a', 'i', '1', '3') || \
255
(tag) == MKTAG('a', 'i', '1', '5') || \
256
(tag) == MKTAG('a', 'i', '1', '6') || \
257
(tag) == MKTAG('a', 'i', 'v', 'x') || \
258
(tag) == MKTAG('A', 'V', 'i', 'n'))
259
260
261
int
ff_mov_read_esds
(
AVFormatContext
*
fc
,
AVIOContext
*pb);
262
enum
AVCodecID
ff_mov_get_lpcm_codec_id
(
int
bps
,
int
flags
);
263
264
int
ff_mov_read_stsd_entries
(
MOVContext
*
c
,
AVIOContext
*pb,
int
entries);
265
void
ff_mov_write_chan
(
AVIOContext
*pb, int64_t channel_layout);
266
267
#define FF_MOV_FLAG_MFRA_AUTO -1
268
#define FF_MOV_FLAG_MFRA_DTS 1
269
#define FF_MOV_FLAG_MFRA_PTS 2
270
271
#endif
/* AVFORMAT_ISOM_H */
Generated on Sun Mar 8 2015 02:35:10 for FFmpeg by
1.8.2