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