ffmpeg / libavformat / isom.h @ 6cc7f139
History | View | Annotate | Download (4.68 KB)
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[]; |
35 |
extern const AVCodecTag ff_codec_movsubtitle_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 { |
91 |
AVIOContext *pb; |
92 |
int ffindex; ///< AVStream index |
93 |
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 |
unsigned int stps_count; |
103 |
unsigned *stps_data; ///< partial sync sample for mpeg-2 open gop |
104 |
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 |
int time_offset; ///< time offset of the first edit list entry |
113 |
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 |
int16_t audio_cid; ///< stsd audio compression id
|
119 |
unsigned drefs_count;
|
120 |
MOVDref *drefs; |
121 |
int dref_id;
|
122 |
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 |
} MOVStreamContext; |
127 |
|
128 |
typedef struct MOVContext { |
129 |
AVFormatContext *fc; |
130 |
int time_scale;
|
131 |
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 |
DVDemuxContext *dv_demux; |
135 |
AVFormatContext *dv_fctx; |
136 |
int isom; ///< 1 if file is ISO Media (mp4/3gp) |
137 |
MOVFragment fragment; ///< current fragment in moof atom
|
138 |
MOVTrackExt *trex_data; |
139 |
unsigned trex_count;
|
140 |
int itunes_metadata; ///< metadata are itunes style |
141 |
int chapter_track;
|
142 |
} MOVContext; |
143 |
|
144 |
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 |
|
148 |
#define MP4IODescrTag 0x02 |
149 |
#define MP4ESDescrTag 0x03 |
150 |
#define MP4DecConfigDescrTag 0x04 |
151 |
#define MP4DecSpecificDescrTag 0x05 |
152 |
|
153 |
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom);
|
154 |
enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags); |
155 |
|
156 |
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries); |
157 |
|
158 |
#endif /* AVFORMAT_ISOM_H */ |