Libav
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 Libav.
8  *
9  * Libav 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  * Libav 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 Libav; 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[];
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 {
98  int ffindex;
100  unsigned int chunk_count;
101  int64_t *chunk_offsets;
102  unsigned int stts_count;
104  unsigned int ctts_count;
106  unsigned int stsc_count;
108  unsigned int stps_count;
109  unsigned *stps_data;
112  unsigned int sample_size;
113  unsigned int sample_count;
116  unsigned int keyframe_count;
117  int *keyframes;
119  int64_t time_offset;
121  unsigned int bytes_per_frame;
122  unsigned int samples_per_frame;
125  int16_t audio_cid;
126  unsigned drefs_count;
128  int dref_id;
129  int wrong_dts;
130  int width;
131  int height;
132  int dts_shift;
133  uint32_t palette[256];
135  int64_t data_size;
136  int64_t track_end;
137  unsigned int rap_group_count;
139 
142 
143 typedef struct MOVContext {
146  int64_t duration;
151  int isom;
154  unsigned trex_count;
157  int64_t next_root_atom;
158 } MOVContext;
159 
163 void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
164 
165 #define MP4ODescrTag 0x01
166 #define MP4IODescrTag 0x02
167 #define MP4ESDescrTag 0x03
168 #define MP4DecConfigDescrTag 0x04
169 #define MP4DecSpecificDescrTag 0x05
170 #define MP4SLDescrTag 0x06
171 
172 #define MOV_TFHD_BASE_DATA_OFFSET 0x01
173 #define MOV_TFHD_STSD_ID 0x02
174 #define MOV_TFHD_DEFAULT_DURATION 0x08
175 #define MOV_TFHD_DEFAULT_SIZE 0x10
176 #define MOV_TFHD_DEFAULT_FLAGS 0x20
177 #define MOV_TFHD_DURATION_IS_EMPTY 0x010000
178 #define MOV_TFHD_DEFAULT_BASE_IS_MOOF 0x020000
179 
180 #define MOV_TRUN_DATA_OFFSET 0x01
181 #define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
182 #define MOV_TRUN_SAMPLE_DURATION 0x100
183 #define MOV_TRUN_SAMPLE_SIZE 0x200
184 #define MOV_TRUN_SAMPLE_FLAGS 0x400
185 #define MOV_TRUN_SAMPLE_CTS 0x800
186 
187 #define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff
188 #define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000
189 #define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000
190 #define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000
191 #define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000
192 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000
193 
194 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000
195 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000
196 
197 #define MOV_TKHD_FLAG_ENABLED 0x0001
198 #define MOV_TKHD_FLAG_IN_MOVIE 0x0002
199 #define MOV_TKHD_FLAG_IN_PREVIEW 0x0004
200 #define MOV_TKHD_FLAG_IN_POSTER 0x0008
201 
202 #define TAG_IS_AVCI(tag) \
203  ((tag) == MKTAG('a', 'i', '5', 'p') || \
204  (tag) == MKTAG('a', 'i', '5', 'q') || \
205  (tag) == MKTAG('a', 'i', '5', '2') || \
206  (tag) == MKTAG('a', 'i', '5', '3') || \
207  (tag) == MKTAG('a', 'i', '5', '5') || \
208  (tag) == MKTAG('a', 'i', '5', '6') || \
209  (tag) == MKTAG('a', 'i', '1', 'p') || \
210  (tag) == MKTAG('a', 'i', '1', 'q') || \
211  (tag) == MKTAG('a', 'i', '1', '2') || \
212  (tag) == MKTAG('a', 'i', '1', '3') || \
213  (tag) == MKTAG('a', 'i', '1', '5') || \
214  (tag) == MKTAG('a', 'i', '1', '6') || \
215  (tag) == MKTAG('A', 'V', 'i', 'n'))
216 
217 
220 
221 int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
222 
223 #endif /* AVFORMAT_ISOM_H */
int chapter_track
Definition: isom.h:156
int itunes_metadata
metadata are itunes style
Definition: isom.h:155
Bytestream IO Context.
Definition: avio.h:68
const AVCodecTag ff_mp4_obj_type[]
Definition: isom.c:34
unsigned int rap_group_count
Definition: isom.h:137
MOVTrackExt * trex_data
Definition: isom.h:153
unsigned track_id
Definition: isom.h:73
unsigned int samples_per_frame
Definition: isom.h:122
int dv_audio_container
Definition: isom.h:123
Definition: isom.h:45
uint64_t base_data_offset
Definition: isom.h:74
unsigned int stsc_count
Definition: isom.h:106
int has_palette
Definition: isom.h:134
int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
Definition: isom.c:432
int16_t audio_cid
stsd audio compression id
Definition: isom.h:125
int height
tkhd height
Definition: isom.h:131
uint32_t type
Definition: isom.h:66
MOVStsc * stsc_data
Definition: isom.h:107
int ctts_index
Definition: isom.h:110
unsigned stsd_id
Definition: isom.h:85
int found_moov
'moov' atom has been found
Definition: isom.h:147
unsigned flags
Definition: isom.h:88
int isom
1 if file is ISO Media (mp4/3gp)
Definition: isom.h:151
int found_mdat
'mdat' atom has been found
Definition: isom.h:148
int width
tkhd width
Definition: isom.h:130
unsigned drefs_count
Definition: isom.h:126
Format I/O context.
Definition: avformat.h:922
const AVCodecTag ff_codec_movvideo_tags[]
Definition: isom.c:69
char filename[64]
Definition: isom.h:61
MOVDref * drefs
Definition: isom.h:127
const AVCodecTag ff_codec_movaudio_tags[]
Definition: isom.c:252
int first
Definition: isom.h:51
int ff_mp4_read_descr_len(AVIOContext *pb)
Definition: isom.c:385
unsigned int sample_count
Definition: isom.h:113
int count
Definition: isom.h:52
int dts_shift
dts shift when ctts is negative
Definition: isom.h:132
unsigned int count
Definition: isom.h:92
int16_t nlvl_to
Definition: isom.h:62
char volume[28]
Definition: isom.h:60
static int flags
Definition: log.c:44
uint32_t tag
Definition: movenc.c:844
const AVCodecTag ff_codec_movsubtitle_tags[]
Definition: isom.c:304
int current_sample
Definition: isom.h:120
unsigned track_id
Definition: isom.h:84
int64_t time_offset
time offset of the first edit list entry
Definition: isom.h:119
unsigned int keyframe_count
Definition: isom.h:116
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:105
unsigned int ctts_count
Definition: isom.h:104
int * keyframes
Definition: isom.h:117
AVFormatContext * fc
Definition: isom.h:144
int ctts_sample
Definition: isom.h:111
int keyframe_absent
Definition: isom.h:115
int16_t nlvl_from
Definition: isom.h:62
char * dir
Definition: isom.h:59
int id
Definition: isom.h:53
int32_t
char * path
Definition: isom.h:58
int time_scale
Definition: isom.h:118
Definition: isom.h:91
uint64_t moof_offset
Definition: isom.h:75
MOVStts * ctts_data
Definition: isom.h:105
unsigned size
Definition: isom.h:87
int64_t * chunk_offsets
Definition: isom.h:101
unsigned int index
Definition: isom.h:93
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb)
Definition: mov.c:546
int64_t duration
duration of the longest track
Definition: isom.h:146
Stream structure.
Definition: avformat.h:699
unsigned duration
Definition: isom.h:86
DVDemuxContext * dv_demux
Definition: isom.h:149
int * sample_sizes
Definition: isom.h:114
Buffered I/O operations.
unsigned duration
Definition: isom.h:78
MOVSbgp * rap_group
Definition: isom.h:138
int duration
Definition: isom.h:47
unsigned trex_count
Definition: isom.h:154
int64_t data_size
Definition: isom.h:135
uint32_t type
Definition: isom.h:57
MOVStts * stts_data
Definition: isom.h:103
int count
Definition: isom.h:46
MOVFragment fragment
current fragment in moof atom
Definition: isom.h:152
int64_t track_end
used for dts generation in fragmented movie files
Definition: isom.h:136
Definition: isom.h:65
int ff_mov_lang_to_iso639(unsigned code, char to[4])
Definition: isom.c:363
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
Definition: mov.c:1521
int next_chunk
Definition: isom.h:99
AVFormatContext * dv_fctx
Definition: isom.h:150
int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag)
Definition: isom.c:398
uint64_t implicit_offset
Definition: isom.h:76
unsigned * stps_data
partial sync sample for mpeg-2 open gop
Definition: isom.h:109
int ff_mov_iso639_to_lang(const char lang[4], int mp4)
Definition: isom.c:336
int32_t * display_matrix
Definition: isom.h:140
AVIOContext * pb
Definition: isom.h:97
unsigned int bytes_per_frame
Definition: isom.h:121
unsigned flags
Definition: isom.h:80
int wrong_dts
dts are wrong due to huge ctts offset (iMovie files)
Definition: isom.h:129
int64_t size
Definition: isom.h:67
unsigned int stps_count
Definition: isom.h:108
unsigned int chunk_count
Definition: isom.h:100
unsigned bps
Definition: movenc.c:845
uint32_t palette[256]
Definition: isom.h:133
unsigned stsd_id
Definition: isom.h:77
unsigned int stts_count
Definition: isom.h:102
unsigned int sample_size
Definition: isom.h:112
enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags)
Compute codec id for 'lpcm' tag.
Definition: mov.c:1112
int64_t next_root_atom
offset of the next root atom
Definition: isom.h:157
int time_scale
Definition: isom.h:145
void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
Definition: isom.c:407
int pseudo_stream_id
-1 means demux all ids
Definition: isom.h:124
int ffindex
AVStream index.
Definition: isom.h:98
unsigned size
Definition: isom.h:79
Definition: isom.h:50
Definition: isom.h:56