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