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 codec_movvideo_tags[];
34 extern const AVCodecTag 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 {
46  int count;
47  int duration;
48 } MOVStts;
49 
50 typedef struct {
51  int first;
52  int count;
53  int id;
54 } MOVStsc;
55 
56 typedef struct {
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 {
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 {
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 {
83  unsigned track_id;
84  unsigned stsd_id;
85  unsigned duration;
86  unsigned size;
87  unsigned flags;
88 } MOVTrackExt;
89 
90 typedef struct MOVStreamContext {
92  int ffindex;
94  unsigned int chunk_count;
95  int64_t *chunk_offsets;
96  unsigned int stts_count;
98  unsigned int ctts_count;
100  unsigned int stsc_count;
102  unsigned int stps_count;
103  unsigned *stps_data;
106  unsigned int sample_size;
107  unsigned int sample_count;
109  unsigned int keyframe_count;
110  int *keyframes;
112  int64_t time_offset;
114  unsigned int bytes_per_frame;
115  unsigned int samples_per_frame;
118  int16_t audio_cid;
119  unsigned drefs_count;
121  int dref_id;
122  int wrong_dts;
123  int width;
124  int height;
125  int dts_shift;
126  uint32_t palette[256];
129 
130 typedef struct MOVContext {
133  int64_t duration;
138  int isom;
141  unsigned trex_count;
144 } MOVContext;
145 
149 void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
150 
151 #define MP4ODescrTag 0x01
152 #define MP4IODescrTag 0x02
153 #define MP4ESDescrTag 0x03
154 #define MP4DecConfigDescrTag 0x04
155 #define MP4DecSpecificDescrTag 0x05
156 #define MP4SLDescrTag 0x06
157 
160 
161 int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
162 
163 #endif /* AVFORMAT_ISOM_H */
int chapter_track
Definition: isom.h:143
int itunes_metadata
metadata are itunes style
Definition: isom.h:142
Bytestream IO Context.
Definition: avio.h:68
Buffered I/O operations.
const AVCodecTag ff_mp4_obj_type[]
Definition: isom.c:35
MOVTrackExt * trex_data
Definition: isom.h:140
unsigned track_id
Definition: isom.h:73
unsigned int samples_per_frame
Definition: isom.h:115
int dv_audio_container
Definition: isom.h:116
Definition: isom.h:45
uint64_t base_data_offset
Definition: isom.h:74
unsigned int stsc_count
Definition: isom.h:100
int has_palette
Definition: isom.h:127
int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
Definition: isom.c:406
int16_t audio_cid
stsd audio compression id
Definition: isom.h:118
int height
tkhd height
Definition: isom.h:124
uint32_t type
Definition: isom.h:66
MOVStsc * stsc_data
Definition: isom.h:101
int ctts_index
Definition: isom.h:104
unsigned stsd_id
Definition: isom.h:84
int found_moov
'moov' atom has been found
Definition: isom.h:134
unsigned flags
Definition: isom.h:87
int isom
1 if file is ISO Media (mp4/3gp)
Definition: isom.h:138
int found_mdat
'mdat' atom has been found
Definition: isom.h:135
int width
tkhd width
Definition: isom.h:123
unsigned drefs_count
Definition: isom.h:119
Format I/O context.
Definition: avformat.h:863
MOVDref * drefs
Definition: isom.h:120
int first
Definition: isom.h:51
int ff_mp4_read_descr_len(AVIOContext *pb)
Definition: isom.c:359
unsigned int sample_count
Definition: isom.h:107
int count
Definition: isom.h:52
int dts_shift
dts shift when ctts is negative
Definition: isom.h:125
int16_t nlvl_to
Definition: isom.h:62
static int flags
Definition: log.c:34
uint32_t tag
Definition: movenc.c:670
const AVCodecTag ff_codec_movsubtitle_tags[]
Definition: isom.c:278
int current_sample
Definition: isom.h:113
unsigned track_id
Definition: isom.h:83
int64_t time_offset
time offset of the first edit list entry
Definition: isom.h:112
unsigned int keyframe_count
Definition: isom.h:109
unsigned int ctts_count
Definition: isom.h:98
struct MOVStreamContext MOVStreamContext
int * keyframes
Definition: isom.h:110
AVFormatContext * fc
Definition: isom.h:131
int ctts_sample
Definition: isom.h:105
const AVCodecTag codec_movaudio_tags[]
Definition: isom.c:231
char * dir
Definition: isom.h:59
int id
Definition: isom.h:53
char * path
Definition: isom.h:58
int time_scale
Definition: isom.h:111
uint64_t moof_offset
Definition: isom.h:75
MOVStts * ctts_data
Definition: isom.h:99
unsigned size
Definition: isom.h:86
const AVCodecTag codec_movvideo_tags[]
Definition: isom.c:69
int64_t * chunk_offsets
Definition: isom.h:95
enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags)
Compute codec id for 'lpcm' tag.
Definition: mov.c:1060
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom)
Definition: mov.c:518
struct MOVContext MOVContext
int64_t duration
duration of the longest track
Definition: isom.h:133
Stream structure.
Definition: avformat.h:620
unsigned duration
Definition: isom.h:85
DVDemuxContext * dv_demux
Definition: isom.h:136
int * sample_sizes
Definition: isom.h:108
unsigned duration
Definition: isom.h:77
int duration
Definition: isom.h:47
unsigned trex_count
Definition: isom.h:141
uint32_t type
Definition: isom.h:57
MOVStts * stts_data
Definition: isom.h:97
int count
Definition: isom.h:46
MOVFragment fragment
current fragment in moof atom
Definition: isom.h:139
Definition: isom.h:65
int ff_mov_lang_to_iso639(unsigned code, char to[4])
Definition: isom.c:337
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
Definition: mov.c:1091
int next_chunk
Definition: isom.h:93
AVFormatContext * dv_fctx
Definition: isom.h:137
int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag)
Definition: isom.c:372
unsigned * stps_data
partial sync sample for mpeg-2 open gop
Definition: isom.h:103
int ff_mov_iso639_to_lang(const char lang[4], int mp4)
Definition: isom.c:310
AVIOContext * pb
Definition: isom.h:91
unsigned int bytes_per_frame
Definition: isom.h:114
unsigned flags
Definition: isom.h:79
int wrong_dts
dts are wrong due to huge ctts offset (iMovie files)
Definition: isom.h:122
int64_t size
Definition: isom.h:67
unsigned int stps_count
Definition: isom.h:102
unsigned int chunk_count
Definition: isom.h:94
unsigned bps
Definition: movenc.c:671
uint32_t palette[256]
Definition: isom.h:126
CodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:83
unsigned stsd_id
Definition: isom.h:76
unsigned int stts_count
Definition: isom.h:96
unsigned int sample_size
Definition: isom.h:106
int time_scale
Definition: isom.h:132
void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id)
Definition: isom.c:381
int pseudo_stream_id
-1 means demux all ids
Definition: isom.h:117
int ffindex
AVStream index.
Definition: isom.h:92
unsigned size
Definition: isom.h:78
Definition: isom.h:50
Definition: isom.h:56