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