| /* |
| * ISO Media common code |
| * copyright (c) 2001 Fabrice Bellard |
| * copyright (c) 2002 Francois Revol <revol@free.fr> |
| * copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr> |
| * |
| * This file is part of FFmpeg. |
| * |
| * FFmpeg is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * FFmpeg is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with FFmpeg; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef AVFORMAT_ISOM_H |
| #define AVFORMAT_ISOM_H |
| |
| #include "avio.h" |
| #include "riff.h" |
| #include "dv.h" |
| |
| /* isom.c */ |
| extern const AVCodecTag ff_mp4_obj_type[]; |
| extern const AVCodecTag codec_movvideo_tags[]; |
| extern const AVCodecTag codec_movaudio_tags[]; |
| extern const AVCodecTag ff_codec_movsubtitle_tags[]; |
| |
| int ff_mov_iso639_to_lang(const char *lang, int mp4); |
| int ff_mov_lang_to_iso639(unsigned code, char *to); |
| |
| /* the QuickTime file format is quite convoluted... |
| * it has lots of index tables, each indexing something in another one... |
| * Here we just use what is needed to read the chunks |
| */ |
| |
| typedef struct { |
| int count; |
| int duration; |
| } MOVStts; |
| |
| typedef struct { |
| int first; |
| int count; |
| int id; |
| } MOVStsc; |
| |
| typedef struct { |
| uint32_t type; |
| char *path; |
| } MOVDref; |
| |
| typedef struct { |
| uint32_t type; |
| int64_t offset; |
| int64_t size; /* total size (excluding the size and type fields) */ |
| } MOVAtom; |
| |
| struct MOVParseTableEntry; |
| |
| typedef struct { |
| unsigned track_id; |
| uint64_t base_data_offset; |
| uint64_t moof_offset; |
| unsigned stsd_id; |
| unsigned duration; |
| unsigned size; |
| unsigned flags; |
| } MOVFragment; |
| |
| typedef struct { |
| unsigned track_id; |
| unsigned stsd_id; |
| unsigned duration; |
| unsigned size; |
| unsigned flags; |
| } MOVTrackExt; |
| |
| typedef struct MOVStreamContext { |
| ByteIOContext *pb; |
| int ffindex; /* the ffmpeg stream id */ |
| int next_chunk; |
| unsigned int chunk_count; |
| int64_t *chunk_offsets; |
| unsigned int stts_count; |
| MOVStts *stts_data; |
| unsigned int ctts_count; |
| MOVStts *ctts_data; |
| unsigned int stsc_count; |
| MOVStsc *stsc_data; |
| int ctts_index; |
| int ctts_sample; |
| unsigned int sample_size; |
| unsigned int sample_count; |
| int *sample_sizes; |
| unsigned int keyframe_count; |
| int *keyframes; |
| int time_scale; |
| int time_rate; |
| int time_offset; ///< time offset of the first edit list entry |
| int current_sample; |
| unsigned int bytes_per_frame; |
| unsigned int samples_per_frame; |
| int dv_audio_container; |
| int pseudo_stream_id; ///< -1 means demux all ids |
| int16_t audio_cid; ///< stsd audio compression id |
| unsigned drefs_count; |
| MOVDref *drefs; |
| int dref_id; |
| int wrong_dts; ///< dts are wrong due to negative ctts |
| int width; ///< tkhd width |
| int height; ///< tkhd height |
| #ifdef EM8622 |
| unsigned int index_chunk; |
| unsigned int index_chunk_sample; |
| unsigned int index_stts_sample; |
| unsigned int index_sample_size; |
| int64_t index_current_dts; |
| int64_t index_current_offset; |
| unsigned int index_stts_index; |
| unsigned int index_stsc_index; |
| unsigned int index_stss_index; |
| unsigned int index_keyframe; |
| #endif |
| } MOVStreamContext; |
| |
| typedef struct MOVContext { |
| AVFormatContext *fc; |
| int time_scale; |
| int64_t duration; /* duration of the longest track */ |
| int found_moov; /* when both 'moov' and 'mdat' sections has been found */ |
| int found_mdat; /* we suppose we have enough data to read the file */ |
| DVDemuxContext *dv_demux; |
| AVFormatContext *dv_fctx; |
| int isom; /* 1 if file is ISO Media (mp4/3gp) */ |
| MOVFragment fragment; ///< current fragment in moof atom |
| MOVTrackExt *trex_data; |
| unsigned trex_count; |
| int itunes_metadata; ///< metadata are itunes style |
| } MOVContext; |
| |
| #endif /* AVFORMAT_ISOM_H */ |