X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmovenc.h;h=e20ef1475bcafe1043dbafafdeec573d72c45707;hb=85a46ad685048f0c389f0f997c6e33e5546d0b3b;hp=39cdb39284eed84c6595a4e2a0b1ed01b1d17789;hpb=d16cccac98a250d53827fa0c82e429bf17070d0f;p=ffmpeg diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 39cdb39284e..e20ef1475bc 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -35,17 +35,18 @@ #define MODE_MOV 0x02 #define MODE_3GP 0x04 #define MODE_PSP 0x08 // example working PSP command line: -// ffmpeg -i testinput.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 M4V00001.MP4 +// avconv -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 typedef struct MOVIentry { - unsigned int size; uint64_t pos; - unsigned int samplesInChunk; + int64_t dts; + unsigned int size; + unsigned int samples_in_chunk; unsigned int entries; int cts; - int64_t dts; #define MOV_SYNC_SAMPLE 0x0001 #define MOV_PARTIAL_SYNC_SAMPLE 0x0002 uint32_t flags; @@ -59,36 +60,44 @@ typedef struct HintSample { int own_data; } HintSample; -typedef struct { +typedef struct HintSampleQueue { int size; int len; HintSample *samples; } HintSampleQueue; +typedef struct MOVFragmentInfo { + int64_t offset; + int64_t time; + int64_t duration; + int64_t tfrf_offset; +} MOVFragmentInfo; + typedef struct MOVIndex { int mode; int entry; unsigned timescale; uint64_t time; - int64_t trackDuration; - long sampleCount; - long sampleSize; - int hasKeyframes; + int64_t track_duration; + long sample_count; + long sample_size; + int has_keyframes; #define MOV_TRACK_CTTS 0x0001 #define MOV_TRACK_STPS 0x0002 uint32_t flags; int language; - int trackID; + int track_id; int tag; ///< stsd fourcc AVCodecContext *enc; - int vosLen; - uint8_t *vosData; + int vos_len; + uint8_t *vos_data; MOVIentry *cluster; int audio_vbr; int height; ///< active picture (w/o VBI) height for D-10/IMX uint32_t tref_tag; int tref_id; ///< trackID of the referenced track + int64_t start_dts; 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 @@ -97,7 +106,29 @@ typedef struct MOVIndex { int64_t cur_rtp_ts_unwrapped; uint32_t max_packet_size; + int64_t default_duration; + uint32_t default_sample_flags; + uint32_t default_size; + HintSampleQueue sample_queue; + + AVIOContext *mdat_buf; + int64_t moof_size_offset; + int64_t data_offset; + int64_t frag_start; + int64_t tfrf_offset; + + int nb_frag_info; + MOVFragmentInfo *frag_info; + + struct { + int64_t struct_offset; + int first_packet_seq; + int first_packet_entry; + int packet_seq; + int packet_entry; + int slices; + } vc1_info; } MOVTrack; typedef struct MOVMuxContext { @@ -112,15 +143,32 @@ typedef struct MOVMuxContext { int flags; int rtp_flags; + int iods_skip; + int iods_video_profile; + int iods_audio_profile; + + int fragments; + int max_fragment_duration; + int min_fragment_duration; + int max_fragment_size; + int ism_lookahead; + AVIOContext *mdat_buf; } MOVMuxContext; #define FF_MOV_FLAG_RTP_HINT 1 +#define FF_MOV_FLAG_FRAGMENT 2 +#define FF_MOV_FLAG_EMPTY_MOOV 4 +#define FF_MOV_FLAG_FRAG_KEYFRAME 8 +#define FF_MOV_FLAG_SEPARATE_MOOF 16 +#define FF_MOV_FLAG_FRAG_CUSTOM 32 +#define FF_MOV_FLAG_ISML 64 int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt); int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index); int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, - int track_index, int sample); + int track_index, int sample, + uint8_t *sample_data, int sample_size); void ff_mov_close_hinting(MOVTrack *track); #endif /* AVFORMAT_MOVENC_H */