annotate movenc.h @ 6119:16ca32d9c5f0 libavformat

Use a bitstream filter for converting the extradata syntax when generating an SDP. This allows to generate correct SDPs for H.264 video in "MP4 syntax".
author lucabe
date Fri, 11 Jun 2010 08:01:45 +0000
parents b66058698117
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6011
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
1 /*
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
2 * MOV, 3GP, MP4 muxer
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
3 * Copyright (c) 2003 Thomas Raivio
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
4 * Copyright (c) 2004 Gildas Bazin <gbazin at videolan dot org>
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
5 * Copyright (c) 2009 Baptiste Coudurier <baptiste dot coudurier at gmail dot com>
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
6 *
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
7 * This file is part of FFmpeg.
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
8 *
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
13 *
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
17 * Lesser General Public License for more details.
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
18 *
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
22 */
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
23
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
24 #ifndef AVFORMAT_MOVENC_H
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
25 #define AVFORMAT_MOVENC_H
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
26
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
27 #include "avformat.h"
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
28
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
29 #define MOV_INDEX_CLUSTER_SIZE 16384
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
30 #define MOV_TIMESCALE 1000
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
31
6013
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
32 #define RTP_MAX_PACKET_SIZE 1450
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
33
6011
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
34 #define MODE_MP4 0x01
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
35 #define MODE_MOV 0x02
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
36 #define MODE_3GP 0x04
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
37 #define MODE_PSP 0x08 // example working PSP command line:
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
38 // ffmpeg -i testinput.avi -f psp -r 14.985 -s 320x240 -b 768 -ar 24000 -ab 32 M4V00001.MP4
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
39 #define MODE_3G2 0x10
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
40 #define MODE_IPOD 0x20
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
41
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
42 typedef struct MOVIentry {
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
43 unsigned int size;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
44 uint64_t pos;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
45 unsigned int samplesInChunk;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
46 unsigned int entries;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
47 int cts;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
48 int64_t dts;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
49 #define MOV_SYNC_SAMPLE 0x0001
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
50 #define MOV_PARTIAL_SYNC_SAMPLE 0x0002
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
51 uint32_t flags;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
52 } MOVIentry;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
53
6014
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
54 typedef struct HintSample {
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
55 uint8_t *data;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
56 int size;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
57 int sample_number;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
58 int offset;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
59 int own_data;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
60 } HintSample;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
61
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
62 typedef struct {
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
63 int size;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
64 int len;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
65 HintSample *samples;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
66 } HintSampleQueue;
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
67
6011
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
68 typedef struct MOVIndex {
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
69 int mode;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
70 int entry;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
71 unsigned timescale;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
72 uint64_t time;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
73 int64_t trackDuration;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
74 long sampleCount;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
75 long sampleSize;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
76 int hasKeyframes;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
77 #define MOV_TRACK_CTTS 0x0001
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
78 #define MOV_TRACK_STPS 0x0002
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
79 uint32_t flags;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
80 int language;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
81 int trackID;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
82 int tag; ///< stsd fourcc
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
83 AVCodecContext *enc;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
84
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
85 int vosLen;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
86 uint8_t *vosData;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
87 MOVIentry *cluster;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
88 int audio_vbr;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
89 int height; ///< active picture (w/o VBI) height for D-10/IMX
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
90 uint32_t tref_tag;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
91 int tref_id; ///< trackID of the referenced track
6013
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
92
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
93 int hint_track; ///< the track that hints this track, -1 if no hint track is set
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
94 int src_track; ///< the track that this hint track describes
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
95 AVFormatContext *rtp_ctx; ///< the format context for the hinting rtp muxer
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
96 uint32_t prev_rtp_ts;
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
97 int64_t cur_rtp_ts_unwrapped;
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
98 uint32_t max_packet_size;
6014
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
99
b66058698117 Use a heuristic for describing the RTP packets using sample data
mstorsjo
parents: 6013
diff changeset
100 HintSampleQueue sample_queue;
6011
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
101 } MOVTrack;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
102
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
103 typedef struct MOVMuxContext {
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
104 int mode;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
105 int64_t time;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
106 int nb_streams;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
107 int chapter_track; ///< qt chapter track number
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
108 int64_t mdat_pos;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
109 uint64_t mdat_size;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
110 MOVTrack *tracks;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
111 } MOVMuxContext;
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
112
6012
8298cc054242 Make mov_write_packet non-static, add ff_ prefix
mstorsjo
parents: 6011
diff changeset
113 int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt);
8298cc054242 Make mov_write_packet non-static, add ff_ prefix
mstorsjo
parents: 6011
diff changeset
114
6013
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
115 int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index);
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
116 int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt,
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
117 int track_index, int sample);
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
118 void ff_mov_close_hinting(MOVTrack *track);
332ad5f30c0e Add initial support for RTP hinting in the mov muxer
mstorsjo
parents: 6012
diff changeset
119
6011
97fdefab56cd Move the mov muxer structures to a separate header
mstorsjo
parents:
diff changeset
120 #endif /* AVFORMAT_MOVENC_H */