diff options
Diffstat (limited to 'libavformat/movenc.h')
-rw-r--r-- | libavformat/movenc.h | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 008f4671c6..cc2a155d79 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -4,20 +4,20 @@ * Copyright (c) 2004 Gildas Bazin <gbazin at videolan dot org> * Copyright (c) 2009 Baptiste Coudurier <baptiste dot coudurier at gmail dot com> * - * 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 */ @@ -25,6 +25,7 @@ #define AVFORMAT_MOVENC_H #include "avformat.h" +#include "movenccenc.h" #define MOV_FRAG_INFO_ALLOC_INCREMENT 64 #define MOV_INDEX_CLUSTER_SIZE 1024 @@ -36,7 +37,7 @@ #define MODE_MOV 0x02 #define MODE_3GP 0x04 #define MODE_PSP 0x08 // example working PSP command line: -// avconv -i testinput.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 M4V00001.MP4 +// ffmpeg -i testinput.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 M4V00001.MP4 #define MODE_3G2 0x10 #define MODE_IPOD 0x20 #define MODE_ISM 0x40 @@ -47,6 +48,7 @@ typedef struct MOVIentry { int64_t dts; unsigned int size; unsigned int samples_in_chunk; + unsigned int chunkNum; ///< Chunk number if the current entry is a chunk start otherwise 0 unsigned int entries; int cts; #define MOV_SYNC_SAMPLE 0x0001 @@ -82,18 +84,25 @@ typedef struct MOVTrack { unsigned timescale; uint64_t time; int64_t track_duration; + int last_sample_is_subtitle_end; long sample_count; long sample_size; + long chunkCount; int has_keyframes; #define MOV_TRACK_CTTS 0x0001 #define MOV_TRACK_STPS 0x0002 #define MOV_TRACK_ENABLED 0x0004 uint32_t flags; +#define MOV_TIMECODE_FLAG_DROPFRAME 0x0001 +#define MOV_TIMECODE_FLAG_24HOURSMAX 0x0002 +#define MOV_TIMECODE_FLAG_ALLOWNEGATIVE 0x0004 + uint32_t timecode_flags; int language; int track_id; int tag; ///< stsd fourcc AVStream *st; AVCodecParameters *par; + int multichannel_as_mono; int vos_len; uint8_t *vos_data; @@ -110,7 +119,7 @@ typedef struct MOVTrack { int64_t dts_shift; int hint_track; ///< the track that hints this track, -1 if no hint track is set - int src_track; ///< the track that this hint track describes + int src_track; ///< the track that this hint (or tmcd) track describes AVFormatContext *rtp_ctx; ///< the format context for the hinting rtp muxer uint32_t prev_rtp_ts; int64_t cur_rtp_ts_unwrapped; @@ -141,13 +150,28 @@ typedef struct MOVTrack { int packet_entry; int slices; } vc1_info; + + void *eac3_priv; + + MOVMuxCencContext cenc; + + uint32_t palette[AVPALETTE_COUNT]; + int pal_done; + + int is_unaligned_qt_rgb; } MOVTrack; +typedef enum { + MOV_ENC_NONE = 0, + MOV_ENC_CENC_AES_CTR, +} MOVEncryptionScheme; + typedef struct MOVMuxContext { const AVClass *av_class; int mode; int64_t time; int nb_streams; + int nb_meta_tmcd; ///< number of new created tmcd track based on metadata (aka not data copy) int chapter_track; ///< qt chapter track number int64_t mdat_pos; uint64_t mdat_size; @@ -155,6 +179,7 @@ typedef struct MOVMuxContext { int flags; int rtp_flags; + int iods_skip; int iods_video_profile; int iods_audio_profile; @@ -168,6 +193,9 @@ typedef struct MOVMuxContext { AVIOContext *mdat_buf; int first_trun; + int video_track_timescale; + + int reserved_moov_size; ///< 0 for disabled, -1 for automatic, size otherwise int64_t reserved_header_pos; char *major_brand; @@ -176,8 +204,23 @@ typedef struct MOVMuxContext { AVFormatContext *fc; int use_editlist; + float gamma; + int frag_interleave; int missing_duration_warned; + + char *encryption_scheme_str; + MOVEncryptionScheme encryption_scheme; + uint8_t *encryption_key; + int encryption_key_len; + uint8_t *encryption_kid; + int encryption_kid_len; + + int need_rewrite_extradata; + + int use_stream_ids_as_track_ids; + int track_ids_ok; + int write_tmcd; } MOVMuxContext; #define FF_MOV_FLAG_RTP_HINT (1 << 0) @@ -195,8 +238,11 @@ typedef struct MOVMuxContext { #define FF_MOV_FLAG_FRAG_DISCONT (1 << 12) #define FF_MOV_FLAG_DELAY_MOOV (1 << 13) #define FF_MOV_FLAG_GLOBAL_SIDX (1 << 14) -#define FF_MOV_FLAG_SKIP_TRAILER (1 << 15) -#define FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS (1 << 16) +#define FF_MOV_FLAG_WRITE_COLR (1 << 15) +#define FF_MOV_FLAG_WRITE_GAMA (1 << 16) +#define FF_MOV_FLAG_USE_MDTA (1 << 17) +#define FF_MOV_FLAG_SKIP_TRAILER (1 << 18) +#define FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS (1 << 19) int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt); |