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
MOVDref
{
57
uint32_t
type
;
58
char
*
path
;
59
char
*
dir
;
60
char
volume
[28];
61
char
filename
[64];
62
int16_t
nlvl_to
,
nlvl_from
;
63
}
MOVDref
;
64
65
typedef
struct
MOVAtom
{
66
uint32_t
type
;
67
int64_t
size
;
/* total size (excluding the size and type fields) */
68
}
MOVAtom
;
69
70
struct
MOVParseTableEntry
;
71
72
typedef
struct
MOVFragment
{
73
unsigned
track_id
;
74
uint64_t
base_data_offset
;
75
uint64_t
moof_offset
;
76
uint64_t
implicit_offset
;
77
unsigned
stsd_id
;
78
unsigned
duration
;
79
unsigned
size
;
80
unsigned
flags
;
81
int64_t
time
;
82
}
MOVFragment
;
83
84
typedef
struct
MOVTrackExt
{
85
unsigned
track_id
;
86
unsigned
stsd_id
;
87
unsigned
duration
;
88
unsigned
size
;
89
unsigned
flags
;
90
}
MOVTrackExt
;
91
92
typedef
struct
MOVSbgp
{
93
unsigned
int
count
;
94
unsigned
int
index
;
95
}
MOVSbgp
;
96
97
typedef
struct
MOVFragmentIndexItem
{
98
int64_t
moof_offset
;
99
int64_t
time
;
100
}
MOVFragmentIndexItem
;
101
102
typedef
struct
MOVFragmentIndex
{
103
unsigned
track_id
;
104
unsigned
item_count
;
105
unsigned
current_item
;
106
MOVFragmentIndexItem
*
items
;
107
}
MOVFragmentIndex
;
108
109
typedef
struct
MOVStreamContext
{
110
AVIOContext
*
pb
;
111
int
pb_is_copied
;
112
int
ffindex
;
///< AVStream index
113
int
next_chunk
;
114
unsigned
int
chunk_count
;
115
int64_t *
chunk_offsets
;
116
unsigned
int
stts_count
;
117
MOVStts
*
stts_data
;
118
unsigned
int
ctts_count
;
119
MOVStts
*
ctts_data
;
120
unsigned
int
stsc_count
;
121
MOVStsc
*
stsc_data
;
122
unsigned
int
stps_count
;
123
unsigned
*
stps_data
;
///< partial sync sample for mpeg-2 open gop
124
int
ctts_index
;
125
int
ctts_sample
;
126
unsigned
int
sample_size
;
///< may contain value calculated from stsd or value from stsz atom
127
unsigned
int
stsz_sample_size
;
///< always contains sample size from stsz atom
128
unsigned
int
sample_count
;
129
int
*
sample_sizes
;
130
int
keyframe_absent
;
131
unsigned
int
keyframe_count
;
132
int
*
keyframes
;
133
int
time_scale
;
134
int64_t
empty_duration
;
///< empty duration of the first edit list entry
135
int64_t
start_time
;
///< start time of the media
136
int64_t
time_offset
;
///< time offset of the edit list entries
137
int
current_sample
;
138
unsigned
int
bytes_per_frame
;
139
unsigned
int
samples_per_frame
;
140
int
dv_audio_container
;
141
int
pseudo_stream_id
;
///< -1 means demux all ids
142
int16_t
audio_cid
;
///< stsd audio compression id
143
unsigned
drefs_count
;
144
MOVDref
*
drefs
;
145
int
dref_id
;
146
int
timecode_track
;
147
int
wrong_dts
;
///< dts are wrong due to huge ctts offset (iMovie files)
148
int
width
;
///< tkhd width
149
int
height
;
///< tkhd height
150
int
dts_shift
;
///< dts shift when ctts is negative
151
uint32_t
palette
[256];
152
int
has_palette
;
153
int64_t
data_size
;
154
uint32_t
tmcd_flags
;
///< tmcd track flags
155
int64_t
track_end
;
///< used for dts generation in fragmented movie files
156
int
start_pad
;
///< amount of samples to skip due to enc-dec delay
157
unsigned
int
rap_group_count
;
158
MOVSbgp
*
rap_group
;
159
160
int
nb_frames_for_fps
;
161
int64_t
duration_for_fps
;
162
163
int32_t
*
display_matrix
;
164
}
MOVStreamContext
;
165
166
typedef
struct
MOVContext
{
167
const
AVClass
*
class
;
///< class for private options
168
AVFormatContext
*
fc
;
169
int
time_scale
;
170
int64_t
duration
;
///< duration of the longest track
171
int
found_moov
;
///< 'moov' atom has been found
172
int
found_mdat
;
///< 'mdat' atom has been found
173
DVDemuxContext
*
dv_demux
;
174
AVFormatContext
*
dv_fctx
;
175
int
isom
;
///< 1 if file is ISO Media (mp4/3gp)
176
MOVFragment
fragment
;
///< current fragment in moof atom
177
MOVTrackExt
*
trex_data
;
178
unsigned
trex_count
;
179
int
itunes_metadata
;
///< metadata are itunes style
180
int
chapter_track
;
181
int
use_absolute_path
;
182
int
ignore_editlist
;
183
int64_t
next_root_atom
;
///< offset of the next root atom
184
int
export_all
;
185
int
*
bitrates
;
///< bitrates read before streams creation
186
int
bitrates_count
;
187
int
moov_retry
;
188
int
use_mfra_for
;
189
int
has_looked_for_mfra
;
190
MOVFragmentIndex
**
fragment_index_data
;
191
unsigned
fragment_index_count
;
192
}
MOVContext
;
193
194
int
ff_mp4_read_descr_len
(
AVIOContext
*pb);
195
int
ff_mp4_read_descr
(
AVFormatContext
*
fc
,
AVIOContext
*pb,
int
*
tag
);
196
int
ff_mp4_read_dec_config_descr
(
AVFormatContext
*
fc
,
AVStream
*st,
AVIOContext
*pb);
197
void
ff_mp4_parse_es_descr
(
AVIOContext
*pb,
int
*es_id);
198
199
#define MP4ODescrTag 0x01
200
#define MP4IODescrTag 0x02
201
#define MP4ESDescrTag 0x03
202
#define MP4DecConfigDescrTag 0x04
203
#define MP4DecSpecificDescrTag 0x05
204
#define MP4SLDescrTag 0x06
205
206
#define MOV_TFHD_BASE_DATA_OFFSET 0x01
207
#define MOV_TFHD_STSD_ID 0x02
208
#define MOV_TFHD_DEFAULT_DURATION 0x08
209
#define MOV_TFHD_DEFAULT_SIZE 0x10
210
#define MOV_TFHD_DEFAULT_FLAGS 0x20
211
#define MOV_TFHD_DURATION_IS_EMPTY 0x010000
212
#define MOV_TFHD_DEFAULT_BASE_IS_MOOF 0x020000
213
214
#define MOV_TRUN_DATA_OFFSET 0x01
215
#define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
216
#define MOV_TRUN_SAMPLE_DURATION 0x100
217
#define MOV_TRUN_SAMPLE_SIZE 0x200
218
#define MOV_TRUN_SAMPLE_FLAGS 0x400
219
#define MOV_TRUN_SAMPLE_CTS 0x800
220
221
#define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff
222
#define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000
223
#define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000
224
#define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000
225
#define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000
226
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000
227
228
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000
229
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000
230
231
#define MOV_TKHD_FLAG_ENABLED 0x0001
232
#define MOV_TKHD_FLAG_IN_MOVIE 0x0002
233
#define MOV_TKHD_FLAG_IN_PREVIEW 0x0004
234
#define MOV_TKHD_FLAG_IN_POSTER 0x0008
235
236
#define TAG_IS_AVCI(tag) \
237
((tag) == MKTAG('a', 'i', '5', 'p') || \
238
(tag) == MKTAG('a', 'i', '5', 'q') || \
239
(tag) == MKTAG('a', 'i', '5', '2') || \
240
(tag) == MKTAG('a', 'i', '5', '3') || \
241
(tag) == MKTAG('a', 'i', '5', '5') || \
242
(tag) == MKTAG('a', 'i', '5', '6') || \
243
(tag) == MKTAG('a', 'i', '1', 'p') || \
244
(tag) == MKTAG('a', 'i', '1', 'q') || \
245
(tag) == MKTAG('a', 'i', '1', '2') || \
246
(tag) == MKTAG('a', 'i', '1', '3') || \
247
(tag) == MKTAG('a', 'i', '1', '5') || \
248
(tag) == MKTAG('a', 'i', '1', '6') || \
249
(tag) == MKTAG('a', 'i', 'v', 'x') || \
250
(tag) == MKTAG('A', 'V', 'i', 'n'))
251
252
253
int
ff_mov_read_esds
(
AVFormatContext
*
fc
,
AVIOContext
*pb);
254
enum
AVCodecID
ff_mov_get_lpcm_codec_id
(
int
bps
,
int
flags
);
255
256
int
ff_mov_read_stsd_entries
(
MOVContext
*
c
,
AVIOContext
*pb,
int
entries);
257
void
ff_mov_write_chan
(
AVIOContext
*pb, int64_t channel_layout);
258
259
#define FF_MOV_FLAG_MFRA_AUTO -1
260
#define FF_MOV_FLAG_MFRA_DTS 1
261
#define FF_MOV_FLAG_MFRA_PTS 2
262
263
#endif
/* AVFORMAT_ISOM_H */
Generated on Fri Dec 5 2014 04:42:11 for FFmpeg by
1.8.2