ffmpeg / libavformat / isom.h @ 4dcde00c
History | View | Annotate | Download (4.68 KB)
1 | 04d7f601 | Diego Biurrun | /*
|
---|---|---|---|
2 | * ISO Media common code
|
||
3 | 406792e7 | Diego Biurrun | * copyright (c) 2001 Fabrice Bellard
|
4 | 04d7f601 | Diego Biurrun | * copyright (c) 2002 Francois Revol <revol@free.fr>
|
5 | * copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr>
|
||
6 | *
|
||
7 | 2912e87a | Mans Rullgard | * This file is part of Libav.
|
8 | b78e7197 | Diego Biurrun | *
|
9 | 2912e87a | Mans Rullgard | * Libav is free software; you can redistribute it and/or
|
10 | 04d7f601 | Diego Biurrun | * modify it under the terms of the GNU Lesser General Public
|
11 | * License as published by the Free Software Foundation; either
|
||
12 | b78e7197 | Diego Biurrun | * version 2.1 of the License, or (at your option) any later version.
|
13 | 04d7f601 | Diego Biurrun | *
|
14 | 2912e87a | Mans Rullgard | * Libav is distributed in the hope that it will be useful,
|
15 | 04d7f601 | Diego Biurrun | * 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 | 2912e87a | Mans Rullgard | * License along with Libav; if not, write to the Free Software
|
21 | 04d7f601 | Diego Biurrun | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
22 | */
|
||
23 | |||
24 | 98790382 | Stefano Sabatini | #ifndef AVFORMAT_ISOM_H
|
25 | #define AVFORMAT_ISOM_H
|
||
26 | e40ee6a2 | Baptiste Coudurier | |
27 | 88c4339b | Ronald S. Bultje | #include "avio.h" |
28 | 80b39e1c | Francesco Lavra | #include "internal.h" |
29 | 88c4339b | Ronald S. Bultje | #include "dv.h" |
30 | 99545457 | Måns Rullgård | |
31 | e40ee6a2 | Baptiste Coudurier | /* isom.c */
|
32 | ccba88d7 | Baptiste Coudurier | extern const AVCodecTag ff_mp4_obj_type[]; |
33 | 1e5f5e3b | Baptiste Coudurier | extern const AVCodecTag codec_movvideo_tags[]; |
34 | extern const AVCodecTag codec_movaudio_tags[]; |
||
35 | 1e3c9307 | Michael Niedermayer | extern const AVCodecTag ff_codec_movsubtitle_tags[]; |
36 | e40ee6a2 | Baptiste Coudurier | |
37 | 1c90d298 | Reimar Döffinger | 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 | e40ee6a2 | Baptiste Coudurier | |
40 | 88c4339b | Ronald S. Bultje | /* 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 | e23848a4 | Baptiste Coudurier | typedef struct { |
46 | e40ee6a2 | Baptiste Coudurier | int count;
|
47 | int duration;
|
||
48 | c3e92a6c | Baptiste Coudurier | } MOVStts; |
49 | e40ee6a2 | Baptiste Coudurier | |
50 | 88c4339b | Ronald S. Bultje | 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 | adeb9071 | Baptiste Coudurier | char *dir;
|
60 | char volume[28]; |
||
61 | char filename[64]; |
||
62 | int16_t nlvl_to, nlvl_from; |
||
63 | 88c4339b | Ronald S. Bultje | } 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 { |
||
91 | ae628ec1 | Anton Khirnov | AVIOContext *pb; |
92 | 1a11c0aa | Baptiste Coudurier | int ffindex; ///< AVStream index |
93 | 88c4339b | Ronald S. Bultje | int next_chunk;
|
94 | unsigned int chunk_count; |
||
95 | int64_t *chunk_offsets; |
||
96 | unsigned int stts_count; |
||
97 | MOVStts *stts_data; |
||
98 | unsigned int ctts_count; |
||
99 | MOVStts *ctts_data; |
||
100 | unsigned int stsc_count; |
||
101 | MOVStsc *stsc_data; |
||
102 | 171a3531 | Baptiste Coudurier | unsigned int stps_count; |
103 | unsigned *stps_data; ///< partial sync sample for mpeg-2 open gop |
||
104 | 88c4339b | Ronald S. Bultje | int ctts_index;
|
105 | int ctts_sample;
|
||
106 | unsigned int sample_size; |
||
107 | unsigned int sample_count; |
||
108 | int *sample_sizes;
|
||
109 | unsigned int keyframe_count; |
||
110 | int *keyframes;
|
||
111 | int time_scale;
|
||
112 | 1a11c0aa | Baptiste Coudurier | int time_offset; ///< time offset of the first edit list entry |
113 | 88c4339b | Ronald S. Bultje | int current_sample;
|
114 | unsigned int bytes_per_frame; |
||
115 | unsigned int samples_per_frame; |
||
116 | int dv_audio_container;
|
||
117 | int pseudo_stream_id; ///< -1 means demux all ids |
||
118 | 1a11c0aa | Baptiste Coudurier | int16_t audio_cid; ///< stsd audio compression id
|
119 | 88c4339b | Ronald S. Bultje | unsigned drefs_count;
|
120 | MOVDref *drefs; |
||
121 | int dref_id;
|
||
122 | 1a11c0aa | Baptiste Coudurier | int wrong_dts; ///< dts are wrong due to huge ctts offset (iMovie files) |
123 | int width; ///< tkhd width |
||
124 | int height; ///< tkhd height |
||
125 | int dts_shift; ///< dts shift when ctts is negative |
||
126 | 88c4339b | Ronald S. Bultje | } MOVStreamContext; |
127 | |||
128 | typedef struct MOVContext { |
||
129 | AVFormatContext *fc; |
||
130 | int time_scale;
|
||
131 | 1a11c0aa | Baptiste Coudurier | int64_t duration; ///< duration of the longest track
|
132 | int found_moov; ///< 'moov' atom has been found |
||
133 | int found_mdat; ///< 'mdat' atom has been found |
||
134 | 88c4339b | Ronald S. Bultje | DVDemuxContext *dv_demux; |
135 | AVFormatContext *dv_fctx; |
||
136 | 1a11c0aa | Baptiste Coudurier | int isom; ///< 1 if file is ISO Media (mp4/3gp) |
137 | 88c4339b | Ronald S. Bultje | MOVFragment fragment; ///< current fragment in moof atom
|
138 | MOVTrackExt *trex_data; |
||
139 | unsigned trex_count;
|
||
140 | 1a11c0aa | Baptiste Coudurier | int itunes_metadata; ///< metadata are itunes style |
141 | 7221579b | David Conrad | int chapter_track;
|
142 | 88c4339b | Ronald S. Bultje | } MOVContext; |
143 | |||
144 | ae628ec1 | Anton Khirnov | int ff_mp4_read_descr_len(AVIOContext *pb);
|
145 | int ff_mp4_read_descr(AVFormatContext *fc, AVIOContext *pb, int *tag); |
||
146 | int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb);
|
||
147 | 798c6fac | Baptiste Coudurier | |
148 | #define MP4IODescrTag 0x02 |
||
149 | #define MP4ESDescrTag 0x03 |
||
150 | #define MP4DecConfigDescrTag 0x04 |
||
151 | #define MP4DecSpecificDescrTag 0x05 |
||
152 | |||
153 | ae628ec1 | Anton Khirnov | int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom);
|
154 | 2d423666 | Peter Ross | enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags); |
155 | |||
156 | ae628ec1 | Anton Khirnov | int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries); |
157 | dc2cabd0 | Martin Storsjö | |
158 | 98790382 | Stefano Sabatini | #endif /* AVFORMAT_ISOM_H */ |