FFmpeg: libavformat/movenc.h Source File

FFmpeg
movenc.h
Go to the documentation of this file.
1 /*
2  * MOV, 3GP, MP4 muxer
3  * Copyright (c) 2003 Thomas Raivio
4  * Copyright (c) 2004 Gildas Bazin <gbazin at videolan dot org>
5  * Copyright (c) 2009 Baptiste Coudurier <baptiste dot coudurier at gmail dot com>
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg 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  * FFmpeg 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 FFmpeg; 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_MOVENC_H
25 #define AVFORMAT_MOVENC_H
26 
27 #include "avformat.h"
28 
29  #define MOV_FRAG_INFO_ALLOC_INCREMENT 64
30  #define MOV_INDEX_CLUSTER_SIZE 1024
31  #define MOV_TIMESCALE 1000
32 
33  #define RTP_MAX_PACKET_SIZE 1450
34 
35  #define MODE_MP4 0x01
36  #define MODE_MOV 0x02
37  #define MODE_3GP 0x04
38  #define MODE_PSP 0x08 // example working PSP command line:
39 // ffmpeg -i testinput.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 M4V00001.MP4
40  #define MODE_3G2 0x10
41  #define MODE_IPOD 0x20
42  #define MODE_ISM 0x40
43  #define MODE_F4V 0x80
44 
45  typedef struct MOVIentry {
46   uint64_t pos;
47   int64_t dts;
48   unsigned int size;
49   unsigned int samples_in_chunk;
50   unsigned int chunkNum; ///< Chunk number if the current entry is a chunk start otherwise 0
51   unsigned int entries;
52   int cts;
53  #define MOV_SYNC_SAMPLE 0x0001
54  #define MOV_PARTIAL_SYNC_SAMPLE 0x0002
55   uint32_t flags;
56 } MOVIentry;
57 
58  typedef struct HintSample {
59   uint8_t *data;
60   int size;
61   int sample_number;
62   int offset;
63   int own_data;
64 } HintSample;
65 
66  typedef struct HintSampleQueue {
67   int size;
68   int len;
69   HintSample *samples;
70 } HintSampleQueue;
71 
72  typedef struct MOVFragmentInfo {
73   int64_t offset;
74   int64_t time;
75   int64_t duration;
76   int64_t tfrf_offset;
77 } MOVFragmentInfo;
78 
79  typedef struct MOVTrack {
80   int mode;
81   int entry;
82   unsigned timescale;
83   uint64_t time;
84   int64_t track_duration;
85   int last_sample_is_subtitle_end;
86   long sample_count;
87   long sample_size;
88   long chunkCount;
89   int has_keyframes;
90  #define MOV_TRACK_CTTS 0x0001
91  #define MOV_TRACK_STPS 0x0002
92   uint32_t flags;
93  #define MOV_TIMECODE_FLAG_DROPFRAME 0x0001
94  #define MOV_TIMECODE_FLAG_24HOURSMAX 0x0002
95  #define MOV_TIMECODE_FLAG_ALLOWNEGATIVE 0x0004
96   uint32_t timecode_flags;
97   int language;
98   int secondary;
99   int track_id;
100   int tag; ///< stsd fourcc
101   AVCodecContext *enc;
102 
103   int vos_len;
104   uint8_t *vos_data;
105   MOVIentry *cluster;
106   unsigned cluster_capacity;
107   int audio_vbr;
108   int height; ///< active picture (w/o VBI) height for D-10/IMX
109   uint32_t tref_tag;
110   int tref_id; ///< trackID of the referenced track
111   int64_t start_dts;
112 
113   int hint_track; ///< the track that hints this track, -1 if no hint track is set
114   int src_track; ///< the track that this hint (or tmcd) track describes
115   AVFormatContext *rtp_ctx; ///< the format context for the hinting rtp muxer
116   uint32_t prev_rtp_ts;
117   int64_t cur_rtp_ts_unwrapped;
118   uint32_t max_packet_size;
119 
120   int64_t default_duration;
121   uint32_t default_sample_flags;
122   uint32_t default_size;
123 
124   HintSampleQueue sample_queue;
125 
126   AVIOContext *mdat_buf;
127   int64_t moof_size_offset;
128   int64_t data_offset;
129   int64_t frag_start;
130   int64_t tfrf_offset;
131 
132   int nb_frag_info;
133   MOVFragmentInfo *frag_info;
134   unsigned frag_info_capacity;
135 
136  struct {
137   int64_t struct_offset;
138   int first_packet_seq;
139   int first_packet_entry;
140   int packet_seq;
141   int packet_entry;
142   int slices;
143  } vc1_info;
144 } MOVTrack;
145 
146  typedef struct MOVMuxContext {
147   const AVClass *av_class;
148   int mode;
149   int64_t time;
150   int nb_streams;
151   int nb_meta_tmcd; ///< number of new created tmcd track based on metadata (aka not data copy)
152   int chapter_track; ///< qt chapter track number
153   int64_t mdat_pos;
154   uint64_t mdat_size;
155   MOVTrack *tracks;
156 
157   int flags;
158   int rtp_flags;
159   int reserved_moov_size; ///< 0 for disabled, -1 for automatic, size otherwise
160   int64_t reserved_moov_pos;
161 
162   int iods_skip;
163   int iods_video_profile;
164   int iods_audio_profile;
165 
166   int fragments;
167   int max_fragment_duration;
168   int min_fragment_duration;
169   int max_fragment_size;
170   int ism_lookahead;
171   AVIOContext *mdat_buf;
172 
173   int use_editlist;
174   int video_track_timescale;
175 } MOVMuxContext;
176 
177  #define FF_MOV_FLAG_RTP_HINT 1
178  #define FF_MOV_FLAG_FRAGMENT 2
179  #define FF_MOV_FLAG_EMPTY_MOOV 4
180  #define FF_MOV_FLAG_FRAG_KEYFRAME 8
181  #define FF_MOV_FLAG_SEPARATE_MOOF 16
182  #define FF_MOV_FLAG_FRAG_CUSTOM 32
183  #define FF_MOV_FLAG_ISML 64
184  #define FF_MOV_FLAG_FASTSTART 128
185 
186 int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt);
187 
188 int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index);
189 int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt,
190  int track_index, int sample,
191  uint8_t *sample_data, int sample_size);
192 void ff_mov_close_hinting(MOVTrack *track);
193 
194 #endif /* AVFORMAT_MOVENC_H */

Generated on Wed Jul 10 2013 23:48:13 for FFmpeg by   doxygen 1.8.2

AltStyle によって変換されたページ (->オリジナル) /