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  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 {
97  int ffindex;
99  unsigned int chunk_count;
100  int64_t *chunk_offsets;
101  unsigned int stts_count;
103  unsigned int ctts_count;
105  unsigned int stsc_count;
107  unsigned int stps_count;
108  unsigned *stps_data;
111  unsigned int sample_size;
112  unsigned int sample_count;
115  unsigned int keyframe_count;
116  int *keyframes;
118  int64_t time_offset;
120  unsigned int bytes_per_frame;
121  unsigned int samples_per_frame;
124  int16_t audio_cid;
125  unsigned drefs_count;
127  int dref_id;
128  int wrong_dts;
129  int width;
130  int height;
131  int dts_shift;
132  uint32_t palette[256];
134  int64_t data_size;
135  int64_t track_end;
136  unsigned int rap_group_count;
139 
140 typedef struct MOVContext {
143  int64_t duration;
148  int isom;
151  unsigned trex_count;
154  int64_t next_root_atom;
155 } MOVContext;
156 
160 void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
161 
162 #define MP4ODescrTag 0x01
163 #define MP4IODescrTag 0x02
164 #define MP4ESDescrTag 0x03
165 #define MP4DecConfigDescrTag 0x04
166 #define MP4DecSpecificDescrTag 0x05
167 #define MP4SLDescrTag 0x06
168 
169 #define MOV_TFHD_BASE_DATA_OFFSET 0x01
170 #define MOV_TFHD_STSD_ID 0x02
171 #define MOV_TFHD_DEFAULT_DURATION 0x08
172 #define MOV_TFHD_DEFAULT_SIZE 0x10
173 #define MOV_TFHD_DEFAULT_FLAGS 0x20
174 #define MOV_TFHD_DURATION_IS_EMPTY 0x010000
175 
176 #define MOV_TRUN_DATA_OFFSET 0x01
177 #define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
178 #define MOV_TRUN_SAMPLE_DURATION 0x100
179 #define MOV_TRUN_SAMPLE_SIZE 0x200
180 #define MOV_TRUN_SAMPLE_FLAGS 0x400
181 #define MOV_TRUN_SAMPLE_CTS 0x800
182 
183 #define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff
184 #define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000
185 #define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000
186 #define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000
187 #define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000
188 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000
189 
190 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000
191 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000
192 
195 
196 int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
197 
198 #endif /* AVFORMAT_ISOM_H */
int chapter_track
Definition: isom.h:153
int itunes_metadata
metadata are itunes style
Definition: isom.h:152
struct MOVSbgp MOVSbgp
Bytestream IO Context.
Definition: avio.h:68
Buffered I/O operations.
const AVCodecTag ff_mp4_obj_type[]
Definition: isom.c:34
unsigned int rap_group_count
Definition: isom.h:136
MOVTrackExt * trex_data
Definition: isom.h:150
unsigned track_id
Definition: isom.h:73
unsigned int samples_per_frame
Definition: isom.h:121
int dv_audio_container
Definition: isom.h:122
Definition: isom.h:45
struct MOVStts MOVStts
uint64_t base_data_offset
Definition: isom.h:74
unsigned int stsc_count
Definition: isom.h:105
int has_palette
Definition: isom.h:133
int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
Definition: isom.c:409
int16_t audio_cid
stsd audio compression id
Definition: isom.h:124
int height
tkhd height
Definition: isom.h:130
uint32_t type
Definition: isom.h:66
MOVStsc * stsc_data
Definition: isom.h:106
int ctts_index
Definition: isom.h:109
unsigned stsd_id
Definition: isom.h:84
int found_moov
'moov' atom has been found
Definition: isom.h:144
unsigned flags
Definition: isom.h:87
int isom
1 if file is ISO Media (mp4/3gp)
Definition: isom.h:148
int found_mdat
'mdat' atom has been found
Definition: isom.h:145
int width
tkhd width
Definition: isom.h:129
unsigned drefs_count
Definition: isom.h:125
Format I/O context.
Definition: avformat.h:828
const AVCodecTag ff_codec_movvideo_tags[]
Definition: isom.c:68
char filename[64]
Definition: isom.h:61
MOVDref * drefs
Definition: isom.h:126
const AVCodecTag ff_codec_movaudio_tags[]
Definition: isom.c:230
struct MOVTrackExt MOVTrackExt
int first
Definition: isom.h:51
int ff_mp4_read_descr_len(AVIOContext *pb)
Definition: isom.c:362
unsigned int sample_count
Definition: isom.h:112
int count
Definition: isom.h:52
int dts_shift
dts shift when ctts is negative
Definition: isom.h:131
unsigned int count
Definition: isom.h:91
int16_t nlvl_to
Definition: isom.h:62
char volume[28]
Definition: isom.h:60
struct MOVStsc MOVStsc
static int flags
Definition: log.c:42
uint32_t tag
Definition: movenc.c:802
const AVCodecTag ff_codec_movsubtitle_tags[]
Definition: isom.c:281
int current_sample
Definition: isom.h:119
unsigned track_id
Definition: isom.h:83
int64_t time_offset
time offset of the first edit list entry
Definition: isom.h:118
unsigned int keyframe_count
Definition: isom.h:115
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:95
unsigned int ctts_count
Definition: isom.h:103
struct MOVStreamContext MOVStreamContext
struct MOVDref MOVDref
int * keyframes
Definition: isom.h:116
AVFormatContext * fc
Definition: isom.h:141
int ctts_sample
Definition: isom.h:110
int keyframe_absent
Definition: isom.h:114
int16_t nlvl_from
Definition: isom.h:62
char * dir
Definition: isom.h:59
int id
Definition: isom.h:53
char * path
Definition: isom.h:58
int time_scale
Definition: isom.h:117
Definition: isom.h:90
uint64_t moof_offset
Definition: isom.h:75
MOVStts * ctts_data
Definition: isom.h:104
unsigned size
Definition: isom.h:86
int64_t * chunk_offsets
Definition: isom.h:100
unsigned int index
Definition: isom.h:92
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom)
Definition: mov.c:500
struct MOVContext MOVContext
int64_t duration
duration of the longest track
Definition: isom.h:143
Stream structure.
Definition: avformat.h:622
unsigned duration
Definition: isom.h:85
DVDemuxContext * dv_demux
Definition: isom.h:146
int * sample_sizes
Definition: isom.h:113
unsigned duration
Definition: isom.h:77
MOVSbgp * rap_group
Definition: isom.h:137
int duration
Definition: isom.h:47
struct MOVAtom MOVAtom
unsigned trex_count
Definition: isom.h:151
int64_t data_size
Definition: isom.h:134
uint32_t type
Definition: isom.h:57
MOVStts * stts_data
Definition: isom.h:102
int count
Definition: isom.h:46
MOVFragment fragment
current fragment in moof atom
Definition: isom.h:149
int64_t track_end
used for dts generation in fragmented movie files
Definition: isom.h:135
Definition: isom.h:65
int ff_mov_lang_to_iso639(unsigned code, char to[4])
Definition: isom.c:340
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
Definition: mov.c:1075
int next_chunk
Definition: isom.h:98
AVFormatContext * dv_fctx
Definition: isom.h:147
int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag)
Definition: isom.c:375
unsigned * stps_data
partial sync sample for mpeg-2 open gop
Definition: isom.h:108
int ff_mov_iso639_to_lang(const char lang[4], int mp4)
Definition: isom.c:313
AVIOContext * pb
Definition: isom.h:96
unsigned int bytes_per_frame
Definition: isom.h:120
unsigned flags
Definition: isom.h:79
int wrong_dts
dts are wrong due to huge ctts offset (iMovie files)
Definition: isom.h:128
int64_t size
Definition: isom.h:67
unsigned int stps_count
Definition: isom.h:107
unsigned int chunk_count
Definition: isom.h:99
unsigned bps
Definition: movenc.c:803
uint32_t palette[256]
Definition: isom.h:132
unsigned stsd_id
Definition: isom.h:76
unsigned int stts_count
Definition: isom.h:101
unsigned int sample_size
Definition: isom.h:111
enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags)
Compute codec id for 'lpcm' tag.
Definition: mov.c:1065
int64_t next_root_atom
offset of the next root atom
Definition: isom.h:154
int time_scale
Definition: isom.h:142
void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
Definition: isom.c:384
int pseudo_stream_id
-1 means demux all ids
Definition: isom.h:123
int ffindex
AVStream index.
Definition: isom.h:97
unsigned size
Definition: isom.h:78
Definition: isom.h:50
struct MOVFragment MOVFragment
Definition: isom.h:56