FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
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
ffindex
;
///< AVStream index
98
int
next_chunk
;
99
unsigned
int
chunk_count
;
100
int64_t *
chunk_offsets
;
101
unsigned
int
stts_count
;
102
MOVStts
*
stts_data
;
103
unsigned
int
ctts_count
;
104
MOVStts
*
ctts_data
;
105
unsigned
int
stsc_count
;
106
MOVStsc
*
stsc_data
;
107
unsigned
int
stps_count
;
108
unsigned
*
stps_data
;
///< partial sync sample for mpeg-2 open gop
109
int
ctts_index
;
110
int
ctts_sample
;
111
unsigned
int
sample_size
;
///< may contain value calculated from stsd or value from stsz atom
112
unsigned
int
alt_sample_size
;
///< always contains sample size from stsz atom
113
unsigned
int
sample_count
;
114
int
*
sample_sizes
;
115
int
keyframe_absent
;
116
unsigned
int
keyframe_count
;
117
int
*
keyframes
;
118
int
time_scale
;
119
int64_t
empty_duration
;
///< empty duration of the first edit list entry
120
int64_t
start_time
;
///< start time of the media
121
int64_t
time_offset
;
///< time offset of the edit list entries
122
int
current_sample
;
123
unsigned
int
bytes_per_frame
;
124
unsigned
int
samples_per_frame
;
125
int
dv_audio_container
;
126
int
pseudo_stream_id
;
///< -1 means demux all ids
127
int16_t
audio_cid
;
///< stsd audio compression id
128
unsigned
drefs_count
;
129
MOVDref
*
drefs
;
130
int
dref_id
;
131
int
timecode_track
;
132
int
wrong_dts
;
///< dts are wrong due to huge ctts offset (iMovie files)
133
int
width
;
///< tkhd width
134
int
height
;
///< tkhd height
135
int
dts_shift
;
///< dts shift when ctts is negative
136
uint32_t
palette
[256];
137
int
has_palette
;
138
int64_t
data_size
;
139
uint32_t
tmcd_flags
;
///< tmcd track flags
140
int64_t
track_end
;
///< used for dts generation in fragmented movie files
141
int
start_pad
;
///< amount of samples to skip due to enc-dec delay
142
unsigned
int
rap_group_count
;
143
MOVSbgp
*
rap_group
;
144
}
MOVStreamContext
;
145
146
typedef
struct
MOVContext
{
147
AVClass
*
avclass
;
148
AVFormatContext
*
fc
;
149
int
time_scale
;
150
int64_t
duration
;
///< duration of the longest track
151
int
found_moov
;
///< 'moov' atom has been found
152
int
found_mdat
;
///< 'mdat' atom has been found
153
DVDemuxContext
*
dv_demux
;
154
AVFormatContext
*
dv_fctx
;
155
int
isom
;
///< 1 if file is ISO Media (mp4/3gp)
156
MOVFragment
fragment
;
///< current fragment in moof atom
157
MOVTrackExt
*
trex_data
;
158
unsigned
trex_count
;
159
int
itunes_metadata
;
///< metadata are itunes style
160
int
chapter_track
;
161
int
use_absolute_path
;
162
int
ignore_editlist
;
163
int64_t
next_root_atom
;
///< offset of the next root atom
164
}
MOVContext
;
165
166
int
ff_mp4_read_descr_len
(
AVIOContext
*pb);
167
int
ff_mp4_read_descr
(
AVFormatContext
*fc,
AVIOContext
*pb,
int
*
tag
);
168
int
ff_mp4_read_dec_config_descr
(
AVFormatContext
*fc,
AVStream
*st,
AVIOContext
*pb);
169
void
ff_mp4_parse_es_descr
(
AVIOContext
*pb,
int
*es_id);
170
171
#define MP4ODescrTag 0x01
172
#define MP4IODescrTag 0x02
173
#define MP4ESDescrTag 0x03
174
#define MP4DecConfigDescrTag 0x04
175
#define MP4DecSpecificDescrTag 0x05
176
#define MP4SLDescrTag 0x06
177
178
#define MOV_TFHD_BASE_DATA_OFFSET 0x01
179
#define MOV_TFHD_STSD_ID 0x02
180
#define MOV_TFHD_DEFAULT_DURATION 0x08
181
#define MOV_TFHD_DEFAULT_SIZE 0x10
182
#define MOV_TFHD_DEFAULT_FLAGS 0x20
183
#define MOV_TFHD_DURATION_IS_EMPTY 0x010000
184
185
#define MOV_TRUN_DATA_OFFSET 0x01
186
#define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
187
#define MOV_TRUN_SAMPLE_DURATION 0x100
188
#define MOV_TRUN_SAMPLE_SIZE 0x200
189
#define MOV_TRUN_SAMPLE_FLAGS 0x400
190
#define MOV_TRUN_SAMPLE_CTS 0x800
191
192
#define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff
193
#define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000
194
#define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000
195
#define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000
196
#define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000
197
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000
198
199
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000
200
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000
201
202
int
ff_mov_read_esds
(
AVFormatContext
*fc,
AVIOContext
*pb,
MOVAtom
atom);
203
enum
AVCodecID
ff_mov_get_lpcm_codec_id
(
int
bps
,
int
flags
);
204
205
int
ff_mov_read_stsd_entries
(
MOVContext
*
c
,
AVIOContext
*pb,
int
entries);
206
void
ff_mov_write_chan
(
AVIOContext
*pb, int64_t channel_layout);
207
208
#endif
/* AVFORMAT_ISOM_H */
Generated on Sat May 25 2013 03:58:47 for FFmpeg by
1.8.2