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[];
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 {
98  int ffindex; ///< AVStream index
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; ///< partial sync sample for mpeg-2 open gop
112  unsigned int sample_size; ///< may contain value calculated from stsd or value from stsz atom
113  unsigned int alt_sample_size; ///< always contains sample size from stsz atom
114  unsigned int sample_count;
117  unsigned int keyframe_count;
118  int *keyframes;
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
124  unsigned int bytes_per_frame;
125  unsigned int samples_per_frame;
127  int pseudo_stream_id; ///< -1 means demux all ids
128  int16_t audio_cid; ///< stsd audio compression id
129  unsigned drefs_count;
131  int dref_id;
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];
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;
146 
147 typedef struct MOVContext {
151  int64_t duration; ///< duration of the longest track
152  int found_moov; ///< 'moov' atom has been found
153  int found_mdat; ///< 'mdat' atom has been found
156  int isom; ///< 1 if file is ISO Media (mp4/3gp)
157  MOVFragment fragment; ///< current fragment in moof atom
159  unsigned trex_count;
160  int itunes_metadata; ///< metadata are itunes style
164  int64_t next_root_atom; ///< offset of the next root atom
165 } MOVContext;
166 
170 void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
171 
172 #define MP4ODescrTag 0x01
173 #define MP4IODescrTag 0x02
174 #define MP4ESDescrTag 0x03
175 #define MP4DecConfigDescrTag 0x04
176 #define MP4DecSpecificDescrTag 0x05
177 #define MP4SLDescrTag 0x06
178 
179 #define MOV_TFHD_BASE_DATA_OFFSET 0x01
180 #define MOV_TFHD_STSD_ID 0x02
181 #define MOV_TFHD_DEFAULT_DURATION 0x08
182 #define MOV_TFHD_DEFAULT_SIZE 0x10
183 #define MOV_TFHD_DEFAULT_FLAGS 0x20
184 #define MOV_TFHD_DURATION_IS_EMPTY 0x010000
185 
186 #define MOV_TRUN_DATA_OFFSET 0x01
187 #define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
188 #define MOV_TRUN_SAMPLE_DURATION 0x100
189 #define MOV_TRUN_SAMPLE_SIZE 0x200
190 #define MOV_TRUN_SAMPLE_FLAGS 0x400
191 #define MOV_TRUN_SAMPLE_CTS 0x800
192 
193 #define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff
194 #define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000
195 #define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000
196 #define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000
197 #define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000
198 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000
199 
200 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000
201 #define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000
202 
205 
206 int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
207 void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout);
208 
209 #endif /* AVFORMAT_ISOM_H */
int chapter_track
Definition: isom.h:161
int itunes_metadata
metadata are itunes style
Definition: isom.h:160
struct MOVSbgp MOVSbgp
Bytestream IO Context.
Definition: avio.h:68
Buffered I/O operations.
uint32_t tmcd_flags
tmcd track flags
Definition: isom.h:140
const AVCodecTag ff_mp4_obj_type[]
Definition: isom.c:34
unsigned int rap_group_count
Definition: isom.h:143
MOVTrackExt * trex_data
Definition: isom.h:158
unsigned track_id
Definition: isom.h:73
unsigned int samples_per_frame
Definition: isom.h:125
int dv_audio_container
Definition: isom.h:126
Definition: isom.h:45
struct MOVStts MOVStts
uint64_t base_data_offset
Definition: isom.h:74
unsigned int stsc_count
Definition: isom.h:106
int has_palette
Definition: isom.h:138
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:128
int height
tkhd height
Definition: isom.h:135
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:84
int found_moov
&#39;moov&#39; atom has been found
Definition: isom.h:152
unsigned flags
Definition: isom.h:87
int isom
1 if file is ISO Media (mp4/3gp)
Definition: isom.h:156
int found_mdat
&#39;mdat&#39; atom has been found
Definition: isom.h:153
int width
tkhd width
Definition: isom.h:134
unsigned drefs_count
Definition: isom.h:129
Format I/O context.
Definition: avformat.h:944
const AVCodecTag ff_codec_movvideo_tags[]
Definition: isom.c:68
MOVDref * drefs
Definition: isom.h:130
const AVCodecTag ff_codec_movaudio_tags[]
Definition: isom.c:250
struct MOVTrackExt MOVTrackExt
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:114
int count
Definition: isom.h:52
int dts_shift
dts shift when ctts is negative
Definition: isom.h:136
unsigned int count
Definition: isom.h:91
int16_t nlvl_to
Definition: isom.h:62
struct MOVStsc MOVStsc
uint32_t tag
Definition: movenc.c:894
const AVCodecTag ff_codec_movsubtitle_tags[]
Definition: isom.c:303
int64_t start_time
start time of the media
Definition: isom.h:121
int current_sample
Definition: isom.h:123
unsigned track_id
Definition: isom.h:83
int64_t time_offset
time offset of the edit list entries
Definition: isom.h:122
unsigned int keyframe_count
Definition: isom.h:117
AVCodecID
Identify the syntax and semantics of the bitstream.
unsigned int ctts_count
Definition: isom.h:104
struct MOVStreamContext MOVStreamContext
struct MOVDref MOVDref
int * keyframes
Definition: isom.h:118
AVFormatContext * fc
Definition: isom.h:149
int ctts_sample
Definition: isom.h:111
int keyframe_absent
Definition: isom.h:116
char * dir
Definition: isom.h:59
int id
Definition: isom.h:53
char * path
Definition: isom.h:58
int time_scale
Definition: isom.h:119
Definition: isom.h:90
int64_t empty_duration
empty duration of the first edit list entry
Definition: isom.h:120
uint64_t moof_offset
Definition: isom.h:75
MOVStts * ctts_data
Definition: isom.h:105
unsigned size
Definition: isom.h:86
void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout)
Definition: isom.c:552
int ignore_editlist
Definition: isom.h:163
int64_t * chunk_offsets
Definition: isom.h:101
unsigned int index
Definition: isom.h:92
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom)
Definition: mov.c:607
struct MOVContext MOVContext
int64_t duration
duration of the longest track
Definition: isom.h:151
Stream structure.
Definition: avformat.h:643
unsigned duration
Definition: isom.h:85
DVDemuxContext * dv_demux
Definition: isom.h:154
int timecode_track
Definition: isom.h:132
int * sample_sizes
Definition: isom.h:115
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
unsigned duration
Definition: isom.h:77
MOVSbgp * rap_group
Definition: isom.h:144
int duration
Definition: isom.h:47
struct MOVAtom MOVAtom
unsigned trex_count
Definition: isom.h:159
int64_t data_size
Definition: isom.h:139
uint32_t type
Definition: isom.h:57
MOVStts * stts_data
Definition: isom.h:103
Describe the class of an AVClass context structure.
Definition: log.h:50
int count
Definition: isom.h:46
MOVFragment fragment
current fragment in moof atom
Definition: isom.h:157
int64_t track_end
used for dts generation in fragmented movie files
Definition: isom.h:141
Definition: isom.h:65
int pb_is_copied
Definition: isom.h:97
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:1201
int next_chunk
Definition: isom.h:99
AVFormatContext * dv_fctx
Definition: isom.h:155
int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag)
Definition: isom.c:398
static int flags
Definition: cpu.c:23
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
unsigned int alt_sample_size
always contains sample size from stsz atom
Definition: isom.h:113
int palette
Definition: v4l.c:61
int start_pad
amount of samples to skip due to enc-dec delay
Definition: isom.h:142
FFmpeg Automated Testing Environment ************************************Table of Contents *****************FFmpeg Automated Testing Environment Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass target exec to configure or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script tests fate sh from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at doc fate_config sh template Create a configuration that suits your based on the configuration template The slot configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern< arch >< os >< compiler >< compiler version > The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the fate_recv variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ssh command with one or more v options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory FATE makefile targets and variables *************************************Makefile can be set to
Definition: fate.txt:142
AVClass * avclass
Definition: isom.h:148
AVIOContext * pb
Definition: isom.h:96
unsigned int bytes_per_frame
Definition: isom.h:124
unsigned flags
Definition: isom.h:79
int wrong_dts
dts are wrong due to huge ctts offset (iMovie files)
Definition: isom.h:133
int64_t size
Definition: isom.h:67
static double c[64]
unsigned int stps_count
Definition: isom.h:108
unsigned int chunk_count
Definition: isom.h:100
unsigned bps
Definition: movenc.c:895
unsigned stsd_id
Definition: isom.h:76
unsigned int stts_count
Definition: isom.h:102
unsigned int sample_size
may contain value calculated from stsd or value from stsz atom
Definition: isom.h:112
enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags)
Compute codec id for &#39;lpcm&#39; tag.
Definition: mov.c:1191
int64_t next_root_atom
offset of the next root atom
Definition: isom.h:164
int time_scale
Definition: isom.h:150
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:127
int ffindex
AVStream index.
Definition: isom.h:98
int use_absolute_path
Definition: isom.h:162
unsigned size
Definition: isom.h:78
Definition: isom.h:50
struct MOVFragment MOVFragment
Definition: isom.h:56