summaryrefslogtreecommitdiff
path: root/libavformat/isom.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat/isom.h')
-rw-r--r--libavformat/isom.h120
1 files changed, 111 insertions, 9 deletions
diff --git a/libavformat/isom.h b/libavformat/isom.h
index 2a7486d7ba..ff08f5d090 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -4,20 +4,20 @@
* copyright (c) 2002 Francois Revol <revol@free.fr>
* copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr>
*
- * This file is part of Libav.
+ * This file is part of FFmpeg.
*
- * Libav is free software; you can redistribute it and/or
+ * 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.
*
- * Libav is distributed in the hope that it will be useful,
+ * 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 Libav; if not, write to the Free Software
+ * License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
@@ -27,6 +27,7 @@
#include <stddef.h>
#include <stdint.h>
+#include "libavutil/mastering_display_metadata.h"
#include "libavutil/spherical.h"
#include "libavutil/stereo3d.h"
@@ -43,13 +44,15 @@ extern const AVCodecTag ff_codec_movsubtitle_tags[];
int ff_mov_iso639_to_lang(const char lang[4], int mp4);
int ff_mov_lang_to_iso639(unsigned code, char to[4]);
+struct AVAESCTR;
+
/* 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 MOVStts {
- int count;
+ unsigned int count;
int duration;
} MOVStts;
@@ -59,6 +62,12 @@ typedef struct MOVStsc {
int id;
} MOVStsc;
+typedef struct MOVElst {
+ int64_t duration;
+ int64_t time;
+ float rate;
+} MOVElst;
+
typedef struct MOVDref {
uint32_t type;
char *path;
@@ -99,8 +108,38 @@ typedef struct MOVSbgp {
unsigned int index;
} MOVSbgp;
+typedef struct MOVFragmentStreamInfo {
+ int id;
+ int64_t sidx_pts;
+ int64_t first_tfra_pts;
+ int64_t tfdt_dts;
+ int index_entry;
+} MOVFragmentStreamInfo;
+
+typedef struct MOVFragmentIndexItem {
+ int64_t moof_offset;
+ int headers_read;
+ int current;
+ int nb_stream_info;
+ MOVFragmentStreamInfo * stream_info;
+} MOVFragmentIndexItem;
+
+typedef struct MOVFragmentIndex {
+ int allocated_size;
+ int complete;
+ int current;
+ int nb_items;
+ MOVFragmentIndexItem * item;
+} MOVFragmentIndex;
+
+typedef struct MOVIndexRange {
+ int64_t start;
+ int64_t end;
+} MOVIndexRange;
+
typedef struct MOVStreamContext {
AVIOContext *pb;
+ int pb_is_copied;
int ffindex; ///< AVStream index
int next_chunk;
unsigned int chunk_count;
@@ -108,6 +147,7 @@ typedef struct MOVStreamContext {
unsigned int stts_count;
MOVStts *stts_data;
unsigned int ctts_count;
+ unsigned int ctts_allocated_size;
MOVStts *ctts_data;
unsigned int stsc_count;
MOVStsc *stsc_data;
@@ -115,17 +155,23 @@ typedef struct MOVStreamContext {
int stsc_sample;
unsigned int stps_count;
unsigned *stps_data; ///< partial sync sample for mpeg-2 open gop
+ MOVElst *elst_data;
+ unsigned int elst_count;
int ctts_index;
int ctts_sample;
- unsigned int sample_size;
+ unsigned int sample_size; ///< may contain value calculated from stsd or value from stsz atom
+ unsigned int stsz_sample_size; ///< always contains sample size from stsz atom
unsigned int sample_count;
int *sample_sizes;
int keyframe_absent;
unsigned int keyframe_count;
int *keyframes;
int time_scale;
- int64_t time_offset; ///< time offset of the first edit list entry
+ int64_t time_offset; ///< time offset of the edit list entries
int current_sample;
+ int64_t current_index;
+ MOVIndexRange* index_ranges;
+ MOVIndexRange* current_index_range;
unsigned int bytes_per_frame;
unsigned int samples_per_frame;
int dv_audio_container;
@@ -134,16 +180,22 @@ typedef struct MOVStreamContext {
unsigned drefs_count;
MOVDref *drefs;
int dref_id;
+ int timecode_track;
int width; ///< tkhd width
int height; ///< tkhd height
int dts_shift; ///< dts shift when ctts is negative
uint32_t palette[256];
int has_palette;
int64_t data_size;
+ uint32_t tmcd_flags; ///< tmcd track flags
int64_t track_end; ///< used for dts generation in fragmented movie files
+ int start_pad; ///< amount of samples to skip due to enc-dec delay
unsigned int rap_group_count;
MOVSbgp *rap_group;
+ int nb_frames_for_fps;
+ int64_t duration_for_fps;
+
/** extradata array (and size) for multiple stsd */
uint8_t **extradata;
int *extradata_size;
@@ -154,6 +206,24 @@ typedef struct MOVStreamContext {
AVStereo3D *stereo3d;
AVSphericalMapping *spherical;
size_t spherical_size;
+ AVMasteringDisplayMetadata *mastering;
+ AVContentLightMetadata *coll;
+ size_t coll_size;
+
+ uint32_t format;
+
+ int has_sidx; // If there is an sidx entry for this stream.
+ struct {
+ int use_subsamples;
+ uint8_t* auxiliary_info;
+ uint8_t* auxiliary_info_end;
+ uint8_t* auxiliary_info_pos;
+ uint8_t auxiliary_info_default_size;
+ uint8_t* auxiliary_info_sizes;
+ size_t auxiliary_info_sizes_count;
+ int64_t auxiliary_info_index;
+ struct AVAESCTR* aes_ctr;
+ } cenc;
} MOVStreamContext;
typedef struct MOVContext {
@@ -163,6 +233,10 @@ typedef struct MOVContext {
int64_t duration; ///< duration of the longest track
int found_moov; ///< 'moov' atom has been found
int found_mdat; ///< 'mdat' atom has been found
+ int found_hdlr_mdta; ///< 'hdlr' atom with type 'mdta' has been found
+ int trak_index; ///< Index of the current 'trak'
+ char **meta_keys;
+ unsigned meta_keys_count;
DVDemuxContext *dv_demux;
AVFormatContext *dv_fctx;
int isom; ///< 1 if file is ISO Media (mp4/3gp)
@@ -170,13 +244,35 @@ typedef struct MOVContext {
MOVTrackExt *trex_data;
unsigned trex_count;
int itunes_metadata; ///< metadata are itunes style
- int chapter_track;
+ int handbrake_version;
+ int *chapter_tracks;
+ unsigned int nb_chapter_tracks;
+ int use_absolute_path;
+ int ignore_editlist;
+ int advanced_editlist;
+ int ignore_chapters;
int seek_individually;
int64_t next_root_atom; ///< offset of the next root atom
int export_all;
int export_xmp;
+ int *bitrates; ///< bitrates read before streams creation
+ int bitrates_count;
+ int moov_retry;
+ int use_mfra_for;
+ int has_looked_for_mfra;
+ MOVFragmentIndex frag_index;
+ int atom_depth;
+ unsigned int aax_mode; ///< 'aax' file has been detected
+ uint8_t file_key[20];
+ uint8_t file_iv[20];
+ void *activation_bytes;
+ int activation_bytes_size;
+ void *audible_fixed_key;
+ int audible_fixed_key_size;
+ struct AVAES *aes_decrypt;
+ uint8_t *decryption_key;
+ int decryption_key_len;
int enable_drefs;
-
int32_t movie_display_matrix[3][3]; ///< display matrix from mvhd
} MOVContext;
@@ -235,12 +331,18 @@ void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
(tag) == MKTAG('a', 'i', '1', '3') || \
(tag) == MKTAG('a', 'i', '1', '5') || \
(tag) == MKTAG('a', 'i', '1', '6') || \
+ (tag) == MKTAG('a', 'i', 'v', 'x') || \
(tag) == MKTAG('A', 'V', 'i', 'n'))
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb);
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
+void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout);
+
+#define FF_MOV_FLAG_MFRA_AUTO -1
+#define FF_MOV_FLAG_MFRA_DTS 1
+#define FF_MOV_FLAG_MFRA_PTS 2
/**
* Compute codec id for 'lpcm' tag.