OLD | NEW |
1 Index: patched-ffmpeg-mt/libavcodec/allcodecs.c | 1 Only in unpatched_ffmpeg-mt: ffmpeg-mt |
2 =================================================================== | 2 diff -rpu unpatched_ffmpeg-mt/libavcodec/Makefile ffmpeg-mt/libavcodec/Makefile |
3 --- patched-ffmpeg-mt/libavcodec/allcodecs.c» (revision 39951) | 3 --- unpatched_ffmpeg-mt/libavcodec/Makefile» 2010-03-11 17:46:30 -0800 |
4 +++ patched-ffmpeg-mt/libavcodec/allcodecs.c» (working copy) | 4 +++ ffmpeg-mt/libavcodec/Makefile» 2010-03-11 19:12:19 -0800 |
5 @@ -382,9 +382,10 @@ | 5 @@ -564,6 +564,14 @@ OBJS-$(CONFIG_VP3_PARSER) + |
| 6 OBJS-$(CONFIG_AAC_ADTSTOASC_BSF) += aac_adtstoasc_bsf.o |
| 7 OBJS-$(CONFIG_DUMP_EXTRADATA_BSF) += dump_extradata_bsf.o |
| 8 OBJS-$(CONFIG_H264_MP4TOANNEXB_BSF) += h264_mp4toannexb_bsf.o |
| 9 +OBJS-$(CONFIG_MPEG4VIDEO_ES_BSF) += mpeg4video_es_bsf.o \ |
| 10 + mpeg4videoenc.o ituh263enc.o \ |
| 11 + mpegvideo_enc.o motion_est.o \ |
| 12 + ratecontrol.o mpeg12data.o \ |
| 13 + aandcttab.o jfdctfst.o \ |
| 14 + jfdctint.o faandct.o \ |
| 15 + mpeg4video_parser.o mpegvideo.o \ |
| 16 + error_resilience.o |
| 17 OBJS-$(CONFIG_IMX_DUMP_HEADER_BSF) += imx_dump_header_bsf.o |
| 18 OBJS-$(CONFIG_MJPEGA_DUMP_HEADER_BSF) += mjpega_dump_header_bsf.o |
| 19 OBJS-$(CONFIG_MOV2TEXTSUB_BSF) += movsub_bsf.o |
| 20 @@ -573,6 +581,9 @@ OBJS-$(CONFIG_MP3_HEADER_DECOMPRESS_BSF) |
| 21 OBJS-$(CONFIG_NOISE_BSF) += noise_bsf.o |
| 22 OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += remove_extradata_bsf.o |
| 23 OBJS-$(CONFIG_TEXT2MOVSUB_BSF) += movsub_bsf.o |
| 24 +OBJS-$(CONFIG_VC1_ASFTORCV_BSF) += vc1_asftorcv_bsf.o |
| 25 +OBJS-$(CONFIG_VC1_ASFTOANNEXG_BSF) += vc1_asftoannexg_bsf.o vc1.o \ |
| 26 + vc1data.o |
| 27 |
| 28 # thread libraries |
| 29 OBJS-$(HAVE_BEOSTHREADS) += beosthread.o |
| 30 Only in ffmpeg-mt/libavcodec: Makefile~ |
| 31 diff -rpu unpatched_ffmpeg-mt/libavcodec/allcodecs.c ffmpeg-mt/libavcodec/allcod
ecs.c |
| 32 --- unpatched_ffmpeg-mt/libavcodec/allcodecs.c» 2010-03-11 17:46:29 -0800 |
| 33 +++ ffmpeg-mt/libavcodec/allcodecs.c» 2010-03-11 19:12:19 -0800 |
| 34 @@ -384,13 +384,15 @@ void avcodec_register_all(void) |
| 35 REGISTER_BSF (AAC_ADTSTOASC, aac_adtstoasc); |
| 36 REGISTER_BSF (DUMP_EXTRADATA, dump_extradata); |
| 37 REGISTER_BSF (H264_MP4TOANNEXB, h264_mp4toannexb); |
| 38 + REGISTER_BSF (MPEG4VIDEO_ES, mpeg4video_es); |
| 39 REGISTER_BSF (IMX_DUMP_HEADER, imx_dump_header); |
6 REGISTER_BSF (MJPEGA_DUMP_HEADER, mjpega_dump_header); | 40 REGISTER_BSF (MJPEGA_DUMP_HEADER, mjpega_dump_header); |
7 REGISTER_BSF (MP3_HEADER_COMPRESS, mp3_header_compress); | 41 REGISTER_BSF (MP3_HEADER_COMPRESS, mp3_header_compress); |
8 REGISTER_BSF (MP3_HEADER_DECOMPRESS, mp3_header_decompress); | 42 REGISTER_BSF (MP3_HEADER_DECOMPRESS, mp3_header_decompress); |
9 + REGISTER_BSF (VC1_ASFTORCV, vc1_asftorcv); | 43 + REGISTER_BSF (VC1_ASFTORCV, vc1_asftorcv); |
10 + REGISTER_BSF (VC1_ASFTOANNEXG, vc1_asftoannexg); | 44 + REGISTER_BSF (VC1_ASFTOANNEXG, vc1_asftoannexg); |
11 REGISTER_BSF (MOV2TEXTSUB, mov2textsub); | 45 REGISTER_BSF (MOV2TEXTSUB, mov2textsub); |
12 REGISTER_BSF (NOISE, noise); | 46 REGISTER_BSF (NOISE, noise); |
13 REGISTER_BSF (REMOVE_EXTRADATA, remove_extradata); | 47 REGISTER_BSF (REMOVE_EXTRADATA, remove_extradata); |
14 REGISTER_BSF (TEXT2MOVSUB, text2movsub); | 48 REGISTER_BSF (TEXT2MOVSUB, text2movsub); |
15 } | 49 } |
16 - | 50 - |
17 Index: patched-ffmpeg-mt/libavcodec/vc1_asftorcv_bsf.c | 51 Only in ffmpeg-mt/libavcodec: allcodecs.c~ |
18 =================================================================== | 52 diff -rpu unpatched_ffmpeg-mt/libavcodec/mpeg4video.h ffmpeg-mt/libavcodec/mpeg4
video.h |
19 --- patched-ffmpeg-mt/libavcodec/vc1_asftorcv_bsf.c (revision 0) | 53 --- unpatched_ffmpeg-mt/libavcodec/mpeg4video.h 2010-03-11 17:46:30 -0800 |
20 +++ patched-ffmpeg-mt/libavcodec/vc1_asftorcv_bsf.c (revision 0) | 54 +++ ffmpeg-mt/libavcodec/mpeg4video.h 2010-03-11 19:12:02 -0800 |
21 @@ -0,0 +1,88 @@ | 55 @@ -91,6 +91,9 @@ void mpeg4_encode_mb(MpegEncContext *s, |
22 +/* | 56 void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n, |
23 + * copyright (c) 2010 Google Inc. | 57 int dir); |
24 + * | 58 void ff_set_mpeg4_time(MpegEncContext * s); |
25 + * This file is part of FFmpeg. | 59 +void mpeg4_encode_gop_header(MpegEncContext * s); |
26 + * | 60 +void mpeg4_encode_visual_object_header(MpegEncContext * s); |
27 + * FFmpeg is free software; you can redistribute it and/or | 61 +void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number)
; |
28 + * modify it under the terms of the GNU Lesser General Public | 62 void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number); |
29 + * License as published by the Free Software Foundation; either | |
30 + * version 2.1 of the License, or (at your option) any later version. | |
31 + * | |
32 + * FFmpeg is distributed in the hope that it will be useful, | |
33 + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
34 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
35 + * Lesser General Public License for more details. | |
36 + * | |
37 + * You should have received a copy of the GNU Lesser General Public | |
38 + * License along with FFmpeg; if not, write to the Free Software | |
39 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
40 + */ | |
41 + | |
42 +#include "avcodec.h" | |
43 +#include "bytestream.h" | |
44 + | |
45 +#define RCV_STREAM_HEADER_SIZE 36 | |
46 +#define RCV_PICTURE_HEADER_SIZE 8 | |
47 + | |
48 +typedef struct ASFTORCVBSFContext { | |
49 + int frames; | |
50 +} ASFTORCVBSFContext; | |
51 + | |
52 +static int asftorcv_filter(AVBitStreamFilterContext *bsfc, AVCodecContext *avct
x, const char *args, | |
53 + uint8_t **poutbuf, int *poutbuf_size, | |
54 + const uint8_t *buf, int buf_size, int keyframe){ | |
55 + ASFTORCVBSFContext* ctx = (ASFTORCVBSFContext*)bsfc->priv_data; | |
56 + | |
57 + if (avctx->codec_id != CODEC_ID_WMV3) { | |
58 + av_log(avctx, AV_LOG_ERROR, "Only WMV3 is accepted!\n"); | |
59 + return -1; | |
60 + } | |
61 + | |
62 + uint8_t* bs = NULL; | |
63 + if (!ctx->frames) { | |
64 + // Write the header if this is the first frame. | |
65 + *poutbuf = av_malloc(RCV_STREAM_HEADER_SIZE + RCV_PICTURE_HEADER_SIZE +
buf_size); | |
66 + *poutbuf_size = RCV_STREAM_HEADER_SIZE + RCV_PICTURE_HEADER_SIZE + buf_
size; | |
67 + bs = *poutbuf; | |
68 + | |
69 + // The following structure of stream header comes from libavformat/vc1t
estenc.c. | |
70 + bytestream_put_le24(&bs, 0); // Frame count. 0 for streaming. | |
71 + bytestream_put_byte(&bs, 0xC5); | |
72 + bytestream_put_le32(&bs, 4); // 4 bytes of extra data. | |
73 + bytestream_put_byte(&bs, avctx->extradata[0]); | |
74 + bytestream_put_byte(&bs, avctx->extradata[1]); | |
75 + bytestream_put_byte(&bs, avctx->extradata[2]); | |
76 + bytestream_put_byte(&bs, avctx->extradata[3]); | |
77 + bytestream_put_le32(&bs, avctx->height); | |
78 + bytestream_put_le32(&bs, avctx->width); | |
79 + bytestream_put_le32(&bs, 0xC); | |
80 + bytestream_put_le24(&bs, 0); // hrd_buffer | |
81 + bytestream_put_byte(&bs, 0x80); // level|cbr|res1 | |
82 + bytestream_put_le32(&bs, 0); // hrd_rate | |
83 + | |
84 + // The following LE32 describes the frame rate. Since we don't care so
fill | |
85 + // it with 0xFFFFFFFF which means variable framerate. | |
86 + // See: libavformat/vc1testenc.c | |
87 + bytestream_put_le32(&bs, 0xFFFFFFFF); | |
88 + } else { | |
89 + *poutbuf = av_malloc(RCV_PICTURE_HEADER_SIZE + buf_size); | |
90 + *poutbuf_size = RCV_PICTURE_HEADER_SIZE + buf_size; | |
91 + bs = *poutbuf; | |
92 + } | |
93 + | |
94 + // Write the picture header. | |
95 + bytestream_put_le32(&bs, buf_size | (keyframe ? 0x80000000 : 0)); | |
96 + | |
97 + // The following LE32 describes the pts. Since we don't care so fill it wi
th 0. | |
98 + bytestream_put_le32(&bs, 0); | |
99 + memcpy(bs, buf, buf_size); | |
100 + | |
101 + ++ctx->frames; | |
102 + return 0; | |
103 +} | |
104 + | |
105 +AVBitStreamFilter vc1_asftorcv_bsf = { | |
106 + "vc1_asftorcv", | |
107 + sizeof(ASFTORCVBSFContext), | |
108 + asftorcv_filter, | |
109 +}; | |
110 Index: patched-ffmpeg-mt/libavcodec/vc1_asftoannexg_bsf.c | |
111 =================================================================== | |
112 --- patched-ffmpeg-mt/libavcodec/vc1_asftoannexg_bsf.c (revision 0) | |
113 +++ patched-ffmpeg-mt/libavcodec/vc1_asftoannexg_bsf.c (revision 0) | |
114 @@ -0,0 +1,182 @@ | |
115 +/* | |
116 + * copyright (c) 2010 Google Inc. | |
117 + * | |
118 + * This file is part of FFmpeg. | |
119 + * | |
120 + * FFmpeg is free software; you can redistribute it and/or | |
121 + * modify it under the terms of the GNU Lesser General Public | |
122 + * License as published by the Free Software Foundation; either | |
123 + * version 2.1 of the License, or (at your option) any later version. | |
124 + * | |
125 + * FFmpeg is distributed in the hope that it will be useful, | |
126 + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
127 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
128 + * Lesser General Public License for more details. | |
129 + * | |
130 + * You should have received a copy of the GNU Lesser General Public | |
131 + * License along with FFmpeg; if not, write to the Free Software | |
132 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
133 + */ | |
134 + | |
135 +#include "avcodec.h" | |
136 +#include "bytestream.h" | |
137 +#include "vc1.h" | |
138 + | |
139 +// An arbitrary limit in bytes greater than the current bytes used. | |
140 +#define MAX_SEQ_HEADER_SIZE 50 | |
141 + | |
142 +typedef struct ASFTOANNEXGBSFContext { | |
143 + int frames; | |
144 + uint8_t *seq_header; | |
145 + int seq_header_size; | |
146 + uint8_t *ep_header; | |
147 + int ep_header_size; | |
148 +} ASFTOANNEXGBSFContext; | |
149 + | |
150 +static int generate_sequence_header(VC1Context *v, ASFTOANNEXGBSFContext *ctx) | |
151 +{ | |
152 + PutBitContext pb; | |
153 + ctx->seq_header = av_mallocz(MAX_SEQ_HEADER_SIZE); | |
154 + init_put_bits(&pb, ctx->seq_header, MAX_SEQ_HEADER_SIZE); | |
155 + | |
156 + put_bits(&pb, 32, VC1_CODE_SEQHDR); // start code | |
157 + put_bits(&pb, 2, PROFILE_ADVANCED); // profile | |
158 + put_bits(&pb, 3, v->level); // level | |
159 + put_bits(&pb, 2, v->chromaformat); // chromaformat | |
160 + put_bits(&pb, 3, v->frmrtq_postproc); // frmrtq postproc | |
161 + put_bits(&pb, 5, v->bitrtq_postproc); // bitrtq postproc | |
162 + put_bits(&pb, 1, v->postprocflag); // post proc flag | |
163 + put_bits(&pb, 12, (v->s.avctx->coded_width >> 1) - 1); // codec width | |
164 + put_bits(&pb, 12, (v->s.avctx->coded_height >> 1) - 1); // codec height | |
165 + put_bits(&pb, 1, v->broadcast); // broadcast | |
166 + put_bits(&pb, 1, v->interlace); // interlace | |
167 + put_bits(&pb, 1, v->tfcntrflag); // tfcntrflag | |
168 + put_bits(&pb, 1, v->finterpflag); // finterpflag | |
169 + put_bits(&pb, 1, 1); // reserved | |
170 + put_bits(&pb, 1, v->psf); // progressive segmented frame mode | |
171 + put_bits(&pb, 1, 1); // has display info | |
172 + put_bits(&pb, 14, v->s.avctx->width - 1); // width | |
173 + put_bits(&pb, 14, v->s.avctx->height - 1); // height | |
174 + put_bits(&pb, 1, 0); // no aspect ratio | |
175 + put_bits(&pb, 1, 1); // frame rate | |
176 + put_bits(&pb, 8, 3); // fake it to be 30fps, see vc1.c an
d vc1data.c | |
177 + put_bits(&pb, 4, 1); // fake dr to be 1000, see vc1.c and
vc1data.c | |
178 + put_bits(&pb, 1, 0); // no color info | |
179 + put_bits(&pb, 1, 0); // no hrd param | |
180 + | |
181 + align_put_bits(&pb); | |
182 + ctx->seq_header_size = (put_bits_count(&pb) + 7) >> 3; | |
183 + return 0; | |
184 +} | |
185 + | |
186 +static int decode_sequence_header(AVCodecContext *avctx, VC1Context *v, uint8_t
*header, int header_size) { | |
187 + GetBitContext gb; | |
188 + uint8_t *buf = av_mallocz(header_size + FF_INPUT_BUFFER_PADDING_SIZE); | |
189 + int buf_size = vc1_unescape_buffer(header + 4, header_size - 4, buf); | |
190 + int ret; | |
191 + init_get_bits(&gb, buf, buf_size * 8); | |
192 + ret = vc1_decode_sequence_header(avctx, v, &gb); | |
193 + av_free(buf); | |
194 + return ret; | |
195 +} | |
196 + | |
197 +static int parse_extradata(AVCodecContext *avctx, ASFTOANNEXGBSFContext *ctx, u
int8_t *extradata, int extradata_size) { | |
198 + const uint8_t *start = extradata; | |
199 + const uint8_t *end = extradata + extradata_size; | |
200 + const uint8_t *next; | |
201 + VC1Context vc1ctx; | |
202 + int size; | |
203 + int seq_ret; | |
204 + | |
205 + if(extradata_size < 16) { | |
206 + av_log(avctx, AV_LOG_ERROR, "Extradata size too small: %i\n", extradata
_size); | |
207 + return -1; | |
208 + } | |
209 + | |
210 + start = find_next_marker(start, end); | |
211 + next = start; | |
212 + for(; next < end; start = next){ | |
213 + next = find_next_marker(start + 4, end); | |
214 + size = next - start; | |
215 + if(size <= 0) continue; | |
216 + switch(AV_RB32(start)){ | |
217 + case VC1_CODE_SEQHDR: | |
218 + memset(&vc1ctx, 0, sizeof(VC1Context)); | |
219 + vc1ctx.profile = PROFILE_ADVANCED; | |
220 + vc1ctx.s.avctx = avctx; | |
221 + | |
222 + seq_ret = decode_sequence_header(avctx, &vc1ctx, start, size) < 0 |
| | |
223 + generate_sequence_header(&vc1ctx, ctx) < 0; | |
224 + if (seq_ret) { | |
225 + av_log(avctx, AV_LOG_ERROR, "Cannot regenerate sequence header\
n"); | |
226 + return -1; | |
227 + } | |
228 + break; | |
229 + case VC1_CODE_ENTRYPOINT: | |
230 + ctx->ep_header = av_malloc(size); | |
231 + ctx->ep_header_size = size; | |
232 + memcpy(ctx->ep_header, start, size); | |
233 + break; | |
234 + default: | |
235 + break; | |
236 + } | |
237 + } | |
238 + | |
239 + if(!ctx->seq_header || !ctx->ep_header) { | |
240 + av_log(avctx, AV_LOG_ERROR, "Incomplete extradata\n"); | |
241 + return -1; | |
242 + } | |
243 + return 0; | |
244 +} | |
245 + | |
246 +static int asftoannexg_filter(AVBitStreamFilterContext *bsfc, AVCodecContext *a
vctx, const char *args, | |
247 + uint8_t **poutbuf, int *poutbuf_size, | |
248 + const uint8_t *buf, int buf_size, int keyframe){ | |
249 + ASFTOANNEXGBSFContext* ctx = (ASFTOANNEXGBSFContext*)bsfc->priv_data; | |
250 + | |
251 + if (avctx->codec_id != CODEC_ID_VC1) { | |
252 + av_log(avctx, AV_LOG_ERROR, "Only VC1 Advanced profile is accepted!\n")
; | |
253 + return -1; | |
254 + } | |
255 + | |
256 + if (!ctx->frames && parse_extradata(avctx, ctx, avctx->extradata, avctx->ex
tradata_size) < 0) { | |
257 + av_log(avctx, AV_LOG_ERROR, "Cannot parse extra data!\n"); | |
258 + return -1; | |
259 + } | |
260 + | |
261 + uint8_t* bs; | |
262 + if (keyframe) { | |
263 + // If this is the keyframe, need to put sequence header and entry point
header. | |
264 + *poutbuf_size = ctx->seq_header_size + ctx->ep_header_size + 4 + buf_si
ze; | |
265 + *poutbuf = av_malloc(*poutbuf_size); | |
266 + bs = *poutbuf; | |
267 + | |
268 + memcpy(bs, ctx->seq_header, ctx->seq_header_size); | |
269 + bs += ctx->seq_header_size; | |
270 + memcpy(bs, ctx->ep_header, ctx->ep_header_size); | |
271 + bs += ctx->ep_header_size; | |
272 + } else { | |
273 + *poutbuf_size = 4 + buf_size; | |
274 + *poutbuf = av_malloc(*poutbuf_size); | |
275 + bs = *poutbuf; | |
276 + } | |
277 + | |
278 + // Put the frame start code and frame data. | |
279 + bytestream_put_be32(&bs, VC1_CODE_FRAME); | |
280 + memcpy(bs, buf, buf_size); | |
281 + ++ctx->frames; | |
282 + return 0; | |
283 +} | |
284 + | |
285 +static void asftoannexg_close(AVBitStreamFilterContext *bsfc) { | |
286 + ASFTOANNEXGBSFContext *ctx = bsfc->priv_data; | |
287 + av_freep(&ctx->seq_header); | |
288 + av_freep(&ctx->ep_header); | |
289 +} | |
290 + | |
291 +AVBitStreamFilter vc1_asftoannexg_bsf = { | |
292 + "vc1_asftoannexg", | |
293 + sizeof(ASFTOANNEXGBSFContext), | |
294 + asftoannexg_filter, | |
295 + asftoannexg_close, | |
296 +}; | |
297 Index: patched-ffmpeg-mt/libavcodec/Makefile | |
298 =================================================================== | |
299 --- patched-ffmpeg-mt/libavcodec/Makefile (revision 39951) | |
300 +++ patched-ffmpeg-mt/libavcodec/Makefile (working copy) | |
301 @@ -536,6 +536,9 @@ | |
302 OBJS-$(CONFIG_NOISE_BSF) += noise_bsf.o | |
303 OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += remove_extradata_bsf.o | |
304 OBJS-$(CONFIG_TEXT2MOVSUB_BSF) += movsub_bsf.o | |
305 +OBJS-$(CONFIG_VC1_ASFTORCV_BSF) += vc1_asftorcv_bsf.o | |
306 +OBJS-$(CONFIG_VC1_ASFTOANNEXG_BSF) += vc1_asftoannexg_bsf.o vc1.o \ | |
307 + vc1data.o | |
308 | 63 |
309 # thread libraries | 64 int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb); |
310 OBJS-$(HAVE_BEOSTHREADS) += beosthread.o | 65 Only in ffmpeg-mt/libavcodec: mpeg4video.h~ |
| 66 Only in ffmpeg-mt/libavcodec: mpeg4video_es_bsf.c |
| 67 diff -rpu unpatched_ffmpeg-mt/libavcodec/mpeg4videoenc.c ffmpeg-mt/libavcodec/mp
eg4videoenc.c |
| 68 --- unpatched_ffmpeg-mt/libavcodec/mpeg4videoenc.c» 2010-03-11 17:46:30 -080
0 |
| 69 +++ ffmpeg-mt/libavcodec/mpeg4videoenc.c» 2010-03-11 19:12:02 -0800 |
| 70 @@ -872,7 +872,7 @@ void ff_set_mpeg4_time(MpegEncContext * |
| 71 } |
| 72 } |
| 73 |
| 74 -static void mpeg4_encode_gop_header(MpegEncContext * s){ |
| 75 +void mpeg4_encode_gop_header(MpegEncContext * s){ |
| 76 int hours, minutes, seconds; |
| 77 int64_t time; |
| 78 |
| 79 @@ -902,7 +902,7 @@ static void mpeg4_encode_gop_header(Mpeg |
| 80 ff_mpeg4_stuffing(&s->pb); |
| 81 } |
| 82 |
| 83 -static void mpeg4_encode_visual_object_header(MpegEncContext * s){ |
| 84 +void mpeg4_encode_visual_object_header(MpegEncContext * s){ |
| 85 int profile_and_level_indication; |
| 86 int vo_ver_id; |
| 87 |
| 88 @@ -947,7 +947,7 @@ static void mpeg4_encode_visual_object_h |
| 89 ff_mpeg4_stuffing(&s->pb); |
| 90 } |
| 91 |
| 92 -static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_
number) |
| 93 +void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number) |
| 94 { |
| 95 int vo_ver_id; |
| 96 |
| 97 Only in ffmpeg-mt/libavcodec: vc1_asftoannexg_bsf.c |
| 98 Only in ffmpeg-mt/libavcodec: vc1_asftorcv_bsf.c |
| 99 diff -rpu unpatched_ffmpeg-mt/libavformat/mov.c ffmpeg-mt/libavformat/mov.c |
| 100 --- unpatched_ffmpeg-mt/libavformat/mov.c» 2010-03-11 17:46:31 -0800 |
| 101 +++ ffmpeg-mt/libavformat/mov.c»2010-03-11 19:08:40 -0800 |
| 102 @@ -312,6 +312,8 @@ static int mov_read_dref(MOVContext *c, |
| 103 MOVDref *dref = &sc->drefs[i]; |
| 104 uint32_t size = get_be32(pb); |
| 105 int64_t next = url_ftell(pb) + size - 4; |
| 106 + if (size < 8) |
| 107 + return -1; |
| 108 |
| 109 dref->type = get_le32(pb); |
| 110 get_be32(pb); // version + flags |
| 111 Only in ffmpeg-mt/libavformat: mov.c~ |
OLD | NEW |