Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1158)

Unified Diff: patches/ugly/14_enforce_theora_oob.patch

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: patches/ugly/14_enforce_theora_oob.patch
===================================================================
--- patches/ugly/14_enforce_theora_oob.patch (revision 41250)
+++ patches/ugly/14_enforce_theora_oob.patch (working copy)
@@ -1,21 +1,254 @@
-Index: patched-ffmpeg-mt/libavcodec/vp3.c
-===================================================================
---- patched-ffmpeg-mt/libavcodec/vp3.c (revision 40662)
-+++ patched-ffmpeg-mt/libavcodec/vp3.c (working copy)
-@@ -1065,6 +1065,11 @@
- int fragment_num;
- int *list_head;
+Only in unpatched_ffmpeg-mt: ffmpeg-mt
+diff -rpu unpatched_ffmpeg-mt/libavcodec/Makefile ffmpeg-mt/libavcodec/Makefile
+--- unpatched_ffmpeg-mt/libavcodec/Makefile 2010-03-11 17:46:30 -0800
++++ ffmpeg-mt/libavcodec/Makefile 2010-03-11 19:12:33 -0800
+@@ -493,8 +493,7 @@ OBJS-$(CONFIG_MATROSKA_MUXER) +
+ OBJS-$(CONFIG_MOV_DEMUXER) += mpeg4audio.o mpegaudiodata.o
+ OBJS-$(CONFIG_MPEGTS_MUXER) += mpegvideo.o
+ OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o
+-OBJS-$(CONFIG_OGG_DEMUXER) += flacdec.o flacdata.o flac.o \
+- dirac.o mpeg12data.o
++OBJS-$(CONFIG_OGG_DEMUXER) += dirac.o mpeg12data.o
+ OBJS-$(CONFIG_OGG_MUXER) += xiph.o flacdec.o flacdata.o flac.o
+ OBJS-$(CONFIG_RTP_MUXER) += mpegvideo.o
+@@ -564,6 +563,14 @@ OBJS-$(CONFIG_VP3_PARSER) +
+ OBJS-$(CONFIG_AAC_ADTSTOASC_BSF) += aac_adtstoasc_bsf.o
+ OBJS-$(CONFIG_DUMP_EXTRADATA_BSF) += dump_extradata_bsf.o
+ OBJS-$(CONFIG_H264_MP4TOANNEXB_BSF) += h264_mp4toannexb_bsf.o
++OBJS-$(CONFIG_MPEG4VIDEO_ES_BSF) += mpeg4video_es_bsf.o \
++ mpeg4videoenc.o ituh263enc.o \
++ mpegvideo_enc.o motion_est.o \
++ ratecontrol.o mpeg12data.o \
++ aandcttab.o jfdctfst.o \
++ jfdctint.o faandct.o \
++ mpeg4video_parser.o mpegvideo.o \
++ error_resilience.o
+ OBJS-$(CONFIG_IMX_DUMP_HEADER_BSF) += imx_dump_header_bsf.o
+ OBJS-$(CONFIG_MJPEGA_DUMP_HEADER_BSF) += mjpega_dump_header_bsf.o
+ OBJS-$(CONFIG_MOV2TEXTSUB_BSF) += movsub_bsf.o
+@@ -573,6 +580,9 @@ OBJS-$(CONFIG_MP3_HEADER_DECOMPRESS_BSF)
+ OBJS-$(CONFIG_NOISE_BSF) += noise_bsf.o
+ OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += remove_extradata_bsf.o
+ OBJS-$(CONFIG_TEXT2MOVSUB_BSF) += movsub_bsf.o
++OBJS-$(CONFIG_VC1_ASFTORCV_BSF) += vc1_asftorcv_bsf.o
++OBJS-$(CONFIG_VC1_ASFTOANNEXG_BSF) += vc1_asftoannexg_bsf.o vc1.o \
++ vc1data.o
+
+ # thread libraries
+ OBJS-$(HAVE_BEOSTHREADS) += beosthread.o
+Only in ffmpeg-mt/libavcodec: Makefile~
+diff -rpu unpatched_ffmpeg-mt/libavcodec/allcodecs.c ffmpeg-mt/libavcodec/allcodecs.c
+--- unpatched_ffmpeg-mt/libavcodec/allcodecs.c 2010-03-11 17:46:29 -0800
++++ ffmpeg-mt/libavcodec/allcodecs.c 2010-03-11 19:12:19 -0800
+@@ -384,13 +384,15 @@ void avcodec_register_all(void)
+ REGISTER_BSF (AAC_ADTSTOASC, aac_adtstoasc);
+ REGISTER_BSF (DUMP_EXTRADATA, dump_extradata);
+ REGISTER_BSF (H264_MP4TOANNEXB, h264_mp4toannexb);
++ REGISTER_BSF (MPEG4VIDEO_ES, mpeg4video_es);
+ REGISTER_BSF (IMX_DUMP_HEADER, imx_dump_header);
+ REGISTER_BSF (MJPEGA_DUMP_HEADER, mjpega_dump_header);
+ REGISTER_BSF (MP3_HEADER_COMPRESS, mp3_header_compress);
+ REGISTER_BSF (MP3_HEADER_DECOMPRESS, mp3_header_decompress);
++ REGISTER_BSF (VC1_ASFTORCV, vc1_asftorcv);
++ REGISTER_BSF (VC1_ASFTOANNEXG, vc1_asftoannexg);
+ REGISTER_BSF (MOV2TEXTSUB, mov2textsub);
+ REGISTER_BSF (NOISE, noise);
+ REGISTER_BSF (REMOVE_EXTRADATA, remove_extradata);
+ REGISTER_BSF (TEXT2MOVSUB, text2movsub);
+ }
+-
+Only in ffmpeg-mt/libavcodec: allcodecs.c~
+diff -rpu unpatched_ffmpeg-mt/libavcodec/get_bits.h ffmpeg-mt/libavcodec/get_bits.h
+--- unpatched_ffmpeg-mt/libavcodec/get_bits.h 2010-03-11 17:46:30 -0800
++++ ffmpeg-mt/libavcodec/get_bits.h 2010-03-11 19:13:14 -0800
+@@ -53,13 +53,21 @@
+ /* buffer, buffer_end and size_in_bits must be present and used by every reader */
+ typedef struct GetBitContext {
+ const uint8_t *buffer, *buffer_end;
++ /* Ugly, but clients of this bit reader do not seem to check for enough
++ * data before calling. So we'll return 0's on overrun rather than crashing
++ * with random read faults.
++ */
++ int buffer_exhausted;
++ int buffer_enforcing;
+ #ifdef ALT_BITSTREAM_READER
+ int index;
+ #elif defined LIBMPEG2_BITSTREAM_READER
++#error TODO - secure this against read overrun
+ uint8_t *buffer_ptr;
+ uint32_t cache;
+ int bit_count;
+ #elif defined A32_BITSTREAM_READER
++#warning TODO - secure this against read overrun
+ uint32_t *buffer_ptr;
+ uint32_t cache0;
+ uint32_t cache1;
+@@ -139,13 +147,19 @@ for examples see get_bits, show_bits, sk
+
+ # ifdef ALT_BITSTREAM_READER_LE
+ # define UPDATE_CACHE(name, gb)\
++ if (!(gb)->buffer_exhausted)\
+ name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07);\
++ else\
++ name##_cache = 0;\
+
+ # define SKIP_CACHE(name, gb, num)\
+ name##_cache >>= (num);
+ # else
+ # define UPDATE_CACHE(name, gb)\
++ if (!(gb)->buffer_exhausted)\
+ name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);\
++ else\
++ name##_cache = 0;\
+
+ # define SKIP_CACHE(name, gb, num)\
+ name##_cache <<= (num);
+@@ -154,6 +168,8 @@ for examples see get_bits, show_bits, sk
+ // FIXME name?
+ # define SKIP_COUNTER(name, gb, num)\
+ name##_index += (num);\
++ if ((gb)->buffer_enforcing && name##_index >= (gb)->size_in_bits)\
++ (gb)->buffer_exhausted = 1;\
+
+ # define SKIP_BITS(name, gb, num)\
+ {\
+@@ -187,6 +203,12 @@ static inline int get_bits_count(const G
+
+ static inline void skip_bits_long(GetBitContext *s, int n){
+ s->index += n;
++ if (s->buffer_enforcing) {
++ if (n < 0 && s->index < s->size_in_bits)
++ s->buffer_exhausted = 0;
++ else if (s->index >= s->size_in_bits)
++ s->buffer_exhausted = 1;
++ }
+ }
+
+ #elif defined LIBMPEG2_BITSTREAM_READER
+@@ -391,7 +413,10 @@ static inline void skip_bits(GetBitConte
+ }
+
+ static inline unsigned int get_bits1(GetBitContext *s){
++ if (s->buffer_exhausted)
++ return 0;
+ #ifdef ALT_BITSTREAM_READER
++ {
+ unsigned int index= s->index;
+ uint8_t result= s->buffer[ index>>3 ];
+ #ifdef ALT_BITSTREAM_READER_LE
+@@ -402,9 +427,12 @@ static inline unsigned int get_bits1(Get
+ result>>= 8 - 1;
+ #endif
+ index++;
++ if (s->buffer_enforcing && index >= s->size_in_bits)
++ s->buffer_exhausted = 1;
+ s->index= index;
+
+ return result;
++ }
+ #else
+ return get_bits(s, 1);
+ #endif
+@@ -482,6 +510,8 @@ static inline void init_get_bits(GetBitC
+ s->buffer= buffer;
+ s->size_in_bits= bit_size;
+ s->buffer_end= buffer + buffer_size;
++ s->buffer_exhausted = 0;
++ s->buffer_enforcing = 0;
+ #ifdef ALT_BITSTREAM_READER
+ s->index=0;
+ #elif defined LIBMPEG2_BITSTREAM_READER
+Only in ffmpeg-mt/libavcodec: get_bits.h~
+diff -rpu unpatched_ffmpeg-mt/libavcodec/h264.h ffmpeg-mt/libavcodec/h264.h
+--- unpatched_ffmpeg-mt/libavcodec/h264.h 2010-03-11 17:46:30 -0800
++++ ffmpeg-mt/libavcodec/h264.h 2010-03-11 19:12:59 -0800
+@@ -599,9 +599,20 @@ typedef struct H264Context{
+
+ extern const uint8_t ff_h264_chroma_qp[52];
+
++#if CONFIG_SVQ3_DECODER
+ void ff_svq3_luma_dc_dequant_idct_c(DCTELEM *block, int qp);
+
+ void ff_svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp, int dc);
++#else
++
++#define SVQ3_DISABLED_FUNC { av_log(NULL, AV_LOG_FATAL, "Calling svq3 when disabled.\n"); }
++
++static void inline ff_svq3_luma_dc_dequant_idct_c(DCTELEM *block, int qp) SVQ3_DISABLED_FUNC;
++
++static void inline ff_svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp, int dc) SVQ3_DISABLED_FUNC;
++
++#endif
++
+
+ /**
+ * Decode SEI
+Only in ffmpeg-mt/libavcodec: h264.h~
+diff -rpu unpatched_ffmpeg-mt/libavcodec/mpeg4video.h ffmpeg-mt/libavcodec/mpeg4video.h
+--- unpatched_ffmpeg-mt/libavcodec/mpeg4video.h 2010-03-11 17:46:30 -0800
++++ ffmpeg-mt/libavcodec/mpeg4video.h 2010-03-11 19:12:02 -0800
+@@ -91,6 +91,9 @@ void mpeg4_encode_mb(MpegEncContext *s,
+ void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
+ int dir);
+ void ff_set_mpeg4_time(MpegEncContext * s);
++void mpeg4_encode_gop_header(MpegEncContext * s);
++void mpeg4_encode_visual_object_header(MpegEncContext * s);
++void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number);
+ void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
+
+ int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb);
+Only in ffmpeg-mt/libavcodec: mpeg4video.h~
+Only in ffmpeg-mt/libavcodec: mpeg4video_es_bsf.c
+diff -rpu unpatched_ffmpeg-mt/libavcodec/mpeg4videoenc.c ffmpeg-mt/libavcodec/mpeg4videoenc.c
+--- unpatched_ffmpeg-mt/libavcodec/mpeg4videoenc.c 2010-03-11 17:46:30 -0800
++++ ffmpeg-mt/libavcodec/mpeg4videoenc.c 2010-03-11 19:12:02 -0800
+@@ -872,7 +872,7 @@ void ff_set_mpeg4_time(MpegEncContext *
+ }
+ }
+
+-static void mpeg4_encode_gop_header(MpegEncContext * s){
++void mpeg4_encode_gop_header(MpegEncContext * s){
+ int hours, minutes, seconds;
+ int64_t time;
+
+@@ -902,7 +902,7 @@ static void mpeg4_encode_gop_header(Mpeg
+ ff_mpeg4_stuffing(&s->pb);
+ }
+
+-static void mpeg4_encode_visual_object_header(MpegEncContext * s){
++void mpeg4_encode_visual_object_header(MpegEncContext * s){
+ int profile_and_level_indication;
+ int vo_ver_id;
+
+@@ -947,7 +947,7 @@ static void mpeg4_encode_visual_object_h
+ ff_mpeg4_stuffing(&s->pb);
+ }
+
+-static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number)
++void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number)
+ {
+ int vo_ver_id;
+
+Only in ffmpeg-mt/libavcodec: vc1_asftoannexg_bsf.c
+Only in ffmpeg-mt/libavcodec: vc1_asftorcv_bsf.c
+diff -rpu unpatched_ffmpeg-mt/libavcodec/vp3.c ffmpeg-mt/libavcodec/vp3.c
+--- unpatched_ffmpeg-mt/libavcodec/vp3.c 2010-03-11 17:46:30 -0800
++++ ffmpeg-mt/libavcodec/vp3.c 2010-03-11 19:13:21 -0800
+@@ -922,6 +922,11 @@ static int unpack_vlcs(Vp3DecodeContext
+ int num_coeffs = s->num_coded_frags[plane][coeff_index];
+ int16_t *dct_tokens = s->dct_tokens[plane][coeff_index];
+
+#ifdef ALT_BITSTREAM_READER
+ if (gb->buffer_exhausted && gb->index > gb->size_in_bits)
+ return 0;
+#endif
+
/* local references to structure members to avoid repeated deferences */
- uint8_t *perm= s->scantable.permutated;
- int *coded_fragment_list = s->coded_fragment_list;
-@@ -1218,6 +1223,11 @@
- 0, residual_eob_run);
+ int *coded_fragment_list = s->coded_fragment_list[plane];
+ Vp3Fragment *all_fragments = s->all_fragments;
+@@ -1099,6 +1104,11 @@ static int unpack_dct_coeffs(Vp3DecodeCo
+ 2, residual_eob_run);
}
+#ifdef ALT_BITSTREAM_READER
@@ -26,7 +259,7 @@
return 0;
}
-@@ -2056,6 +2066,7 @@
+@@ -1882,6 +1892,7 @@ static int vp3_decode_frame(AVCodecConte
int i;
init_get_bits(&gb, buf, buf_size * 8);
@@ -34,7 +267,7 @@
if (s->theora && get_bits1(&gb))
{
-@@ -2486,6 +2497,7 @@
+@@ -2305,6 +2316,7 @@ static av_cold int theora_decode_init(AV
for(i=0;i<3;i++) {
init_get_bits(&gb, header_start[i], header_len[i] * 8);
@@ -42,3 +275,178 @@
ptype = get_bits(&gb, 8);
+Only in ffmpeg-mt/libavcodec: vp3.c~
+diff -rpu unpatched_ffmpeg-mt/libavformat/Makefile ffmpeg-mt/libavformat/Makefile
+--- unpatched_ffmpeg-mt/libavformat/Makefile 2010-03-11 17:46:31 -0800
++++ ffmpeg-mt/libavformat/Makefile 2010-03-11 19:12:33 -0800
+@@ -141,13 +141,13 @@ OBJS-$(CONFIG_NUT_DEMUXER)
+ OBJS-$(CONFIG_NUT_MUXER) += nutenc.o nut.o riff.o
+ OBJS-$(CONFIG_NUV_DEMUXER) += nuv.o riff.o
+ OBJS-$(CONFIG_OGG_DEMUXER) += oggdec.o \
+- oggparsedirac.o \
+- oggparseflac.o \
+ oggparseogm.o \
+- oggparsespeex.o \
+ oggparsetheora.o \
+ oggparsevorbis.o \
+ riff.o
++OBJS-$(CONFIG_DIRAC_DEMUXER) += oggparsedirac.o
++OBJS-$(CONFIG_FLAC_DECODER) += oggparseflac.o
++OBJS-$(CONFIG_LIBSPEEX) += oggparsespeex.o
+ OBJS-$(CONFIG_OGG_MUXER) += oggenc.o
+ OBJS-$(CONFIG_OMA_DEMUXER) += oma.o raw.o
+ OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += raw.o
+diff -rpu unpatched_ffmpeg-mt/libavformat/mov.c ffmpeg-mt/libavformat/mov.c
+--- unpatched_ffmpeg-mt/libavformat/mov.c 2010-03-11 17:46:31 -0800
++++ ffmpeg-mt/libavformat/mov.c 2010-03-11 19:08:40 -0800
+@@ -312,6 +312,8 @@ static int mov_read_dref(MOVContext *c,
+ MOVDref *dref = &sc->drefs[i];
+ uint32_t size = get_be32(pb);
+ int64_t next = url_ftell(pb) + size - 4;
++ if (size < 8)
++ return -1;
+
+ dref->type = get_le32(pb);
+ get_be32(pb); // version + flags
+Only in ffmpeg-mt/libavformat: mov.c~
+diff -rpu unpatched_ffmpeg-mt/libavformat/oggdec.c ffmpeg-mt/libavformat/oggdec.c
+--- unpatched_ffmpeg-mt/libavformat/oggdec.c 2010-03-11 17:46:31 -0800
++++ ffmpeg-mt/libavformat/oggdec.c 2010-03-11 19:12:46 -0800
+@@ -38,13 +38,23 @@
+ #define DECODER_BUFFER_SIZE MAX_PAGE_SIZE
+
+ static const struct ogg_codec * const ogg_codecs[] = {
++#if CONFIG_DIRAC_DEMUXER
+ &ff_dirac_codec,
++#endif
++#if CONFIG_LIBSPEEX
+ &ff_speex_codec,
++#endif
+ &ff_vorbis_codec,
+ &ff_theora_codec,
++#if CONFIG_FLAC_DECODER
+ &ff_flac_codec,
++#endif
++#if CONFIG_DIRAC_DEMUXER
+ &ff_old_dirac_codec,
++#endif
++#if CONFIG_FLAC_DECODER
+ &ff_old_flac_codec,
++#endif
+ &ff_ogm_video_codec,
+ &ff_ogm_audio_codec,
+ &ff_ogm_text_codec,
+@@ -200,7 +210,7 @@ ogg_new_buf(struct ogg *ogg, int idx)
+ }
+
+ static int
+-ogg_read_page (AVFormatContext * s, int *str)
++ogg_read_page (AVFormatContext * s, int *str, int64_t *offset)
+ {
+ ByteIOContext *bc = s->pb;
+ struct ogg *ogg = s->priv_data;
+@@ -214,6 +224,7 @@ ogg_read_page (AVFormatContext * s, int
+ int size, idx;
+ uint8_t sync[4];
+ int sp = 0;
++ int64_t poffset = url_ftell(bc);
+
+ if (get_buffer (bc, sync, 4) < 4)
+ return -1;
+@@ -298,18 +309,22 @@ ogg_read_page (AVFormatContext * s, int
+
+ if (str)
+ *str = idx;
++ if (offset)
++ *offset = poffset;
+
+ return 0;
+ }
+
+ static int
+-ogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize)
++ogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize, int64_t* offset)
+ {
+ struct ogg *ogg = s->priv_data;
+ int idx, i;
+ struct ogg_stream *os;
+ int complete = 0;
+ int segp = 0, psize = 0;
++ int64_t poffset;
++ int pnum = 0;
+
+ #if 0
+ av_log (s, AV_LOG_DEBUG, "ogg_packet: curidx=%i\n", ogg->curidx);
+@@ -319,10 +334,13 @@ ogg_packet (AVFormatContext * s, int *st
+ idx = ogg->curidx;
+
+ while (idx < 0){
+- if (ogg_read_page (s, &idx) < 0)
++ if (ogg_read_page (s, &idx, &poffset) < 0)
+ return -1;
+ }
+
++ if (pnum++ == 0 && offset)
++ *offset = poffset;
++
+ os = ogg->streams + idx;
+
+ #if 0
+@@ -418,12 +436,15 @@ static int
+ ogg_get_headers (AVFormatContext * s)
+ {
+ struct ogg *ogg = s->priv_data;
++ int64_t pos = 0;
+
+ do{
+- if (ogg_packet (s, NULL, NULL, NULL) < 0)
++ if (ogg_packet (s, NULL, NULL, NULL, &pos) < 0)
+ return -1;
+ }while (!ogg->headers);
+
++ s->data_offset = pos;
++
+ #if 0
+ av_log (s, AV_LOG_DEBUG, "found headers\n");
+ #endif
+@@ -472,7 +493,7 @@ ogg_get_length (AVFormatContext * s)
+ ogg_save (s);
+ url_fseek (s->pb, end, SEEK_SET);
+
+- while (!ogg_read_page (s, &i)){
++ while (!ogg_read_page (s, &i, NULL)){
+ if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&
+ ogg->streams[i].codec)
+ idx = i;
+@@ -523,7 +544,7 @@ ogg_read_packet (AVFormatContext * s, AV
+
+ //Get an ogg packet
+ do{
+- if (ogg_packet (s, &idx, &pstart, &psize) < 0)
++ if (ogg_packet (s, &idx, &pstart, &psize, NULL) < 0)
+ return AVERROR(EIO);
+ }while (idx < 0 || !s->streams[idx]);
+
+@@ -585,14 +606,17 @@ ogg_read_timestamp (AVFormatContext * s,
+ ByteIOContext *bc = s->pb;
+ int64_t pts = AV_NOPTS_VALUE;
+ int i;
++ int64_t fpoffset = AV_NOPTS_VALUE;
++ int64_t poffset;
+ url_fseek(bc, *pos_arg, SEEK_SET);
+- while (url_ftell(bc) < pos_limit && !ogg_read_page (s, &i)) {
++ while (url_ftell(bc) < pos_limit && !ogg_read_page (s, &i, &poffset)) {
++ if (fpoffset == AV_NOPTS_VALUE && i == stream_index)
++ fpoffset = poffset;
+ if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&
+ ogg->streams[i].codec && i == stream_index) {
+ pts = ogg_gptopts(s, i, ogg->streams[i].granule, NULL);
+- // FIXME: this is the position of the packet after the one with above
+- // pts.
+- *pos_arg = url_ftell(bc);
++ *pos_arg = fpoffset;
++ url_fseek(bc, fpoffset, SEEK_SET);
+ break;
+ }
+ }
+Only in ffmpeg-mt/libavformat: oggdec.c~

Powered by Google App Engine
This is Rietveld 408576698