[FFmpeg-cvslog] avcodec: add Gremlin DPCM decoder
ffmpeg | branch: master | Paul B Mahol | Fri Jun 2 12:43:02 2017 +0200| [29bdcf588f81aceca268dbfff036eb46b8d8bf80] | committer: Paul B Mahol avcodec: add Gremlin DPCM decoder Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=29bdcf588f81aceca268dbfff036eb46b8d8bf80 --- libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/avcodec.h| 1 + libavcodec/codec_desc.c | 7 +++ libavcodec/dpcm.c | 44 ++-- libavcodec/version.h| 4 ++-- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index a752f87ef5..7ce7d14d0e 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -310,6 +310,7 @@ OBJS-$(CONFIG_G723_1_ENCODER) += g723_1enc.o g723_1.o \ OBJS-$(CONFIG_G729_DECODER)+= g729dec.o lsp.o celp_math.o celp_filters.o acelp_filters.o acelp_pitch_delay.o acelp_vectors.o g729postfilter.o OBJS-$(CONFIG_GIF_DECODER) += gifdec.o lzw.o OBJS-$(CONFIG_GIF_ENCODER) += gif.o lzwenc.o +OBJS-$(CONFIG_GREMLIN_DPCM_DECODER)+= dpcm.o OBJS-$(CONFIG_GSM_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o OBJS-$(CONFIG_GSM_MS_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o OBJS-$(CONFIG_H261_DECODER)+= h261dec.o h261data.o h261.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 4373ebd975..995d58b144 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -520,6 +520,7 @@ static void register_all(void) REGISTER_DECODER(PCM_ZORK, pcm_zork); /* DPCM codecs */ +REGISTER_DECODER(GREMLIN_DPCM, gremlin_dpcm); REGISTER_DECODER(INTERPLAY_DPCM,interplay_dpcm); REGISTER_ENCDEC (ROQ_DPCM, roq_dpcm); REGISTER_DECODER(SOL_DPCM, sol_dpcm); diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 00f9c82afc..59bd1c5a4a 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -548,6 +548,7 @@ enum AVCodecID { AV_CODEC_ID_SOL_DPCM, AV_CODEC_ID_SDX2_DPCM = 0x14800, +AV_CODEC_ID_GREMLIN_DPCM, /* audio codecs */ AV_CODEC_ID_MP2 = 0x15000, diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index f0ca4ba059..4cc572901e 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -2249,6 +2249,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("DPCM Squareroot-Delta-Exact"), .props = AV_CODEC_PROP_LOSSY, }, +{ +.id= AV_CODEC_ID_GREMLIN_DPCM, +.type = AVMEDIA_TYPE_AUDIO, +.name = "gremlin_dpcm", +.long_name = NULL_IF_CONFIG_SMALL("DPCM Gremlin"), +.props = AV_CODEC_PROP_LOSSY, +}, /* audio codecs */ { diff --git a/libavcodec/dpcm.c b/libavcodec/dpcm.c index 2edd4d5b0a..7d3934ee35 100644 --- a/libavcodec/dpcm.c +++ b/libavcodec/dpcm.c @@ -44,7 +44,7 @@ #include "mathops.h" typedef struct DPCMContext { -int16_t square_array[256]; +int16_t array[256]; int sample[2]; ///< previous sample (for SOL_DPCM) const int8_t *sol_table;///< delta table for SOL_DPCM } DPCMContext; @@ -130,8 +130,8 @@ static av_cold int dpcm_decode_init(AVCodecContext *avctx) /* initialize square table */ for (i = 0; i < 128; i++) { int16_t square = i * i; -s->square_array[i ] = square; -s->square_array[i + 128] = -square; +s->array[i ] = square; +s->array[i + 128] = -square; } break; @@ -156,7 +156,25 @@ static av_cold int dpcm_decode_init(AVCodecContext *avctx) case AV_CODEC_ID_SDX2_DPCM: for (i = -128; i < 128; i++) { int16_t square = i * i * 2; -s->square_array[i+128] = i < 0 ? -square: square; +s->array[i+128] = i < 0 ? -square: square; +} +break; + +case AV_CODEC_ID_GREMLIN_DPCM: { +int delta = 0; +int code = 64; +int step = 45; + +s->array[0] = 0; +for (i = 0; i < 127; i++) { +delta += (code >> 5); +code += step; +step += 2; + +s->array[i*2 + 1] = delta; +s->array[i*2 + 2] = -delta; +} +s->array[255] = delta + (code >> 5); } break; @@ -207,6 +225,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, else out = buf_size; break; +case AV_CODEC_ID_GREMLIN_DPCM: case AV_CODEC_ID_SDX2_DPCM: out = buf_size; break; @@ -240,7 +259,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, /* decode the samples */ while (output_samples < samples_end) { -predictor[ch] += s->square_array[bytestream2_get_byteu(&gb)]; +predictor[ch] += s
[FFmpeg-cvslog] avcodec: add Gremlin Digital Video decoder
ffmpeg | branch: master | Paul B Mahol | Fri Jun 2 12:52:07 2017 +0200| [d1c08027d8e4eb77467926588f437dd946e8fb65] | committer: Paul B Mahol avcodec: add Gremlin Digital Video decoder Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d1c08027d8e4eb77467926588f437dd946e8fb65 --- libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/avcodec.h| 1 + libavcodec/codec_desc.c | 7 + libavcodec/gdv.c| 404 libavcodec/version.h| 2 +- 6 files changed, 415 insertions(+), 1 deletion(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 7ce7d14d0e..2e7f19dba6 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -308,6 +308,7 @@ OBJS-$(CONFIG_G723_1_DECODER) += g723_1dec.o g723_1.o \ OBJS-$(CONFIG_G723_1_ENCODER) += g723_1enc.o g723_1.o \ acelp_vectors.o celp_filters.o celp_math.o OBJS-$(CONFIG_G729_DECODER)+= g729dec.o lsp.o celp_math.o celp_filters.o acelp_filters.o acelp_pitch_delay.o acelp_vectors.o g729postfilter.o +OBJS-$(CONFIG_GDV_DECODER) += gdv.o OBJS-$(CONFIG_GIF_DECODER) += gifdec.o lzw.o OBJS-$(CONFIG_GIF_ENCODER) += gif.o lzwenc.o OBJS-$(CONFIG_GREMLIN_DPCM_DECODER)+= dpcm.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 995d58b144..27110e1cfd 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -195,6 +195,7 @@ static void register_all(void) REGISTER_DECODER(FRAPS, fraps); REGISTER_DECODER(FRWU, frwu); REGISTER_DECODER(G2M, g2m); +REGISTER_DECODER(GDV, gdv); REGISTER_ENCDEC (GIF, gif); REGISTER_ENCDEC (H261, h261); REGISTER_ENCDEC (H263, h263); diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 59bd1c5a4a..dcdcfe00ae 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -446,6 +446,7 @@ enum AVCodecID { AV_CODEC_ID_MSCC, AV_CODEC_ID_SRGC, AV_CODEC_ID_SVG, +AV_CODEC_ID_GDV, /* various PCM "codecs" */ AV_CODEC_ID_FIRST_AUDIO = 0x1, ///< A dummy id pointing at the start of audio codecs diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index 4cc572901e..cf1246e431 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -1410,6 +1410,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("Screen Recorder Gold Codec"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, +{ +.id= AV_CODEC_ID_GDV, +.type = AVMEDIA_TYPE_VIDEO, +.name = "gdv", +.long_name = NULL_IF_CONFIG_SMALL("Gremlin Digital Video"), +.props = AV_CODEC_PROP_LOSSY, +}, /* image codecs */ { diff --git a/libavcodec/gdv.c b/libavcodec/gdv.c new file mode 100644 index 00..095cf4c40f --- /dev/null +++ b/libavcodec/gdv.c @@ -0,0 +1,404 @@ +/* + * Gremlin Digital Video (GDV) decoder + * Copyright (c) 2017 Konstantin Shishkov + * Copyright (c) 2017 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/common.h" +#include "avcodec.h" +#include "bytestream.h" +#include "internal.h" + +typedef struct GDVContext { +AVCodecContext *avctx; + +GetByteContext gb; +GetByteContext g2; +PutByteContext pb; + +uint32_t pal[256]; +uint8_t *frame; +unsigned frame_size; +unsigned scale_h, scale_v; +} GDVContext; + +typedef struct Bits32 { +uint32_t queue; +uint8_t fill; +} Bits32; + +#define PREAMBLE_SIZE 4096 + +static av_cold int gdv_decode_init(AVCodecContext *avctx) +{ +GDVContext *gdv = avctx->priv_data; +int i, j, k; + +avctx->pix_fmt = AV_PIX_FMT_PAL8; +gdv->frame_size = avctx->width * avctx->height + PREAMBLE_SIZE; +gdv->frame = av_calloc(gdv->frame_size, 1); +if (!gdv->frame) +return AVERROR(ENOMEM); + +for (i = 0; i < 2; i++) { +for (j = 0; j < 256; j++) { +for (k = 0; k < 8; k++) { +gdv->frame[i * 2048 + j * 8
[FFmpeg-cvslog] avformat: add Gremlin Digital Video demuxer
ffmpeg | branch: master | Paul B Mahol | Fri Jun 2 11:28:35 2017 +0200| [c94841487622e52f95e6c703514d604b6ae8e47d] | committer: Paul B Mahol avformat: add Gremlin Digital Video demuxer Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c94841487622e52f95e6c703514d604b6ae8e47d --- Changelog| 1 + libavformat/Makefile | 1 + libavformat/allformats.c | 1 + libavformat/gdv.c| 161 +++ libavformat/version.h| 4 +- 5 files changed, 166 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index ffb8b824f8..cf0adc90e4 100644 --- a/Changelog +++ b/Changelog @@ -18,6 +18,7 @@ version : - remove the libschroedinger encoder/decoder wrappers - surround audio filter - sofalizer filter switched to libmysofa +- Gremlin Digital Video demuxer and decoder version 3.3: - CrystalHD decoder moved to new decode API diff --git a/libavformat/Makefile b/libavformat/Makefile index 00cba52a43..80aeed22c0 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -192,6 +192,7 @@ OBJS-$(CONFIG_G722_MUXER)+= rawenc.o OBJS-$(CONFIG_G723_1_DEMUXER)+= g723_1.o OBJS-$(CONFIG_G723_1_MUXER) += rawenc.o OBJS-$(CONFIG_G729_DEMUXER) += g729dec.o +OBJS-$(CONFIG_GDV_DEMUXER) += gdv.o OBJS-$(CONFIG_GENH_DEMUXER) += genh.o OBJS-$(CONFIG_H261_DEMUXER) += h261dec.o rawdec.o OBJS-$(CONFIG_H261_MUXER)+= rawenc.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index ad516eba06..a0e2fb8c85 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -134,6 +134,7 @@ static void register_all(void) REGISTER_MUXDEMUX(G722, g722); REGISTER_MUXDEMUX(G723_1, g723_1); REGISTER_DEMUXER (G729, g729); +REGISTER_DEMUXER (GDV, gdv); REGISTER_DEMUXER (GENH, genh); REGISTER_MUXDEMUX(GIF, gif); REGISTER_MUXDEMUX(GSM, gsm); diff --git a/libavformat/gdv.c b/libavformat/gdv.c new file mode 100644 index 00..87bba2fdbd --- /dev/null +++ b/libavformat/gdv.c @@ -0,0 +1,161 @@ +/* + * Gremlin Digital Video demuxer + * Copyright (c) 2017 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/intreadwrite.h" + +#include "avformat.h" +#include "avio.h" +#include "internal.h" + +typedef struct GDVContext { +int is_first_video; +int is_audio; +int audio_size; +int audio_stream_index; +int video_stream_index; +unsigned pal[256]; +} GDVContext; + +static int gdv_read_probe(AVProbeData *p) +{ +if (AV_RL32(p->buf) == 0x29111994) +return AVPROBE_SCORE_MAX; + +return 0; +} + +static int gdv_read_header(AVFormatContext *ctx) +{ +GDVContext *gdv = ctx->priv_data; +AVIOContext *pb = ctx->pb; +AVStream *vst, *ast; +unsigned fps, snd_flags, vid_depth; + +avio_skip(pb, 6); + +vst = avformat_new_stream(ctx, 0); +if (!vst) +return AVERROR(ENOMEM); + +vst->start_time= 0; +vst->duration = +vst->nb_frames = avio_rl16(pb); + +fps = avio_rl16(pb); +snd_flags = avio_rl16(pb); +if (snd_flags & 1) { +ast = avformat_new_stream(ctx, 0); +if (!ast) +return AVERROR(ENOMEM); + +ast->start_time = 0; +ast->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; +ast->codecpar->codec_tag = 0; +ast->codecpar->sample_rate = avio_rl16(pb); +ast->codecpar->channels= 1 + !!(snd_flags & 2); +if (snd_flags & 8) { +ast->codecpar->codec_id = AV_CODEC_ID_GREMLIN_DPCM; +} else { +ast->codecpar->codec_id = (snd_flags & 4) ? AV_CODEC_ID_PCM_S16LE : AV_CODEC_ID_PCM_U8; +} + +avpriv_set_pts_info(ast, 64, 1, ast->codecpar->sample_rate); +gdv->audio_size = (ast->codecpar->sample_rate / fps) * + ast->codecpar->channels * (1 + !!(snd_flags & 4)) / (1 + !!(snd_flags & 8)); +gdv->is_audio = 1; +} +vid_depth = avio_rl16(pb); +avio_skip(pb, 4); + +vst->codecpar->codec_typ
[FFmpeg-cvslog] avcodec/gdv: fix compiler warnings
ffmpeg | branch: master | Paul B Mahol | Sun Jun 11 10:26:18 2017 +0200| [9a949cdf8f6c5cea646a418886f807d06ab05ef5] | committer: Paul B Mahol avcodec/gdv: fix compiler warnings Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9a949cdf8f6c5cea646a418886f807d06ab05ef5 --- libavcodec/gdv.c | 18 ++ 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/libavcodec/gdv.c b/libavcodec/gdv.c index 095cf4c40f..cae82b825d 100644 --- a/libavcodec/gdv.c +++ b/libavcodec/gdv.c @@ -235,14 +235,16 @@ static int decompress_68(AVCodecContext *avctx, unsigned skip, unsigned use8) int len = (subtag) + 3; lz_copy(pb, g2, (offs) - 4096, len); } else { +int real_off, len, c1, c2; + if (offs == 0xFFF) { return 0; } -int real_off = ((offs >> 4) & 0x7) + 1; -int len = ((offs & 0xF) + 2) * 2; -int c1 = gdv->frame[bytestream2_tell_p(pb) - real_off]; -int c2 = gdv->frame[bytestream2_tell_p(pb) - real_off + 1]; +real_off = ((offs >> 4) & 0x7) + 1; +len = ((offs & 0xF) + 2) * 2; +c1 = gdv->frame[bytestream2_tell_p(pb) - real_off]; +c2 = gdv->frame[bytestream2_tell_p(pb) - real_off + 1]; for (i = 0; i < len/2; i++) { bytestream2_put_byte(pb, c1); bytestream2_put_byte(pb, c2); @@ -259,10 +261,10 @@ static int decompress_68(AVCodecContext *avctx, unsigned skip, unsigned use8) int len; int off; if (use8) { -int b = bytestream2_get_byte(gb); +int q, b = bytestream2_get_byte(gb); if ((b & 0xC0) == 0xC0) { len = ((b & 0x3F)) + 8; -int q = read_bits32(&bits, gb, 4); +q = read_bits32(&bits, gb, 4); off = (q << 8) + (bytestream2_get_byte(gb)) + 1; } else { int ofs1; @@ -276,14 +278,14 @@ static int decompress_68(AVCodecContext *avctx, unsigned skip, unsigned use8) off = (ofs1 << 8) + (bytestream2_get_byte(gb)) - 4096; } } else { -int b = bytestream2_get_byte(gb); +int ofs1, b = bytestream2_get_byte(gb); if ((b >> 4) == 0xF) { len = bytestream2_get_byte(gb) + 21; } else { len = (b >> 4) + 6; } -int ofs1 = (b & 0xF); +ofs1 = (b & 0xF); off = (ofs1 << 8) + bytestream2_get_byte(gb) - 4096; } lz_copy(pb, g2, off, len); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/snowdec: Fix runtime error: left shift of negative value -1
ffmpeg | branch: master | Michael Niedermayer | Sun Jun 11 14:34:54 2017 +0200| [2e44126363bc9e23093ceced5d7bde1ee4bbb338] | committer: Michael Niedermayer avcodec/snowdec: Fix runtime error: left shift of negative value -1 Fixes: 2197/clusterfuzz-testcase-minimized-6010716676947968 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2e44126363bc9e23093ceced5d7bde1ee4bbb338 --- libavcodec/snowdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/snowdec.c b/libavcodec/snowdec.c index 6cf15c5ae6..c80901b754 100644 --- a/libavcodec/snowdec.c +++ b/libavcodec/snowdec.c @@ -584,7 +584,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, for(; yqsb, yq); for(x=0; xhttp://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/aacdec_fixed: Fix runtime error: left shift of negative value -1297616
ffmpeg | branch: master | Michael Niedermayer | Sun Jun 11 14:32:35 2017 +0200| [6d499ecef9c2467772b6066176ffda0b7ab27cc2] | committer: Michael Niedermayer avcodec/aacdec_fixed: Fix runtime error: left shift of negative value -1297616 Fixes: 2195/clusterfuzz-testcase-minimized-4736721533009920 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6d499ecef9c2467772b6066176ffda0b7ab27cc2 --- libavcodec/aacdec_fixed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c index d8786dff43..5c10aa32cc 100644 --- a/libavcodec/aacdec_fixed.c +++ b/libavcodec/aacdec_fixed.c @@ -389,7 +389,7 @@ static void apply_dependent_coupling_fixed(AACContext *ac, for (k = offsets[i]; k < offsets[i + 1]; k++) { tmp = (int)(((int64_t)src[group * 128 + k] * c + \ (int64_t)0x10) >> 37); -dest[group * 128 + k] += tmp << shift; +dest[group * 128 + k] += tmp * (1 << shift); } } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat/mov: add support for reading VP Codec Configuration Box
ffmpeg | branch: master | James Almer | Sat May 27 18:58:15 2017 -0300| [e3887c0a2c57622bbd59bea1b19813ac506b16a7] | committer: James Almer avformat/mov: add support for reading VP Codec Configuration Box As defined in "VP Codec ISO Media File Format Binding v1.0" https://github.com/webmproject/vp9-dash/blob/master/VPCodecISOMediaFileFormatBinding.md Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e3887c0a2c57622bbd59bea1b19813ac506b16a7 --- libavformat/mov.c | 45 + 1 file changed, 45 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index d7d64c3361..63f84be782 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -4635,6 +4635,50 @@ static int mov_read_tmcd(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_vpcc(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ +AVStream *st; +int version, color_range, color_primaries, color_trc, color_space; + +if (c->fc->nb_streams < 1) +return 0; +st = c->fc->streams[c->fc->nb_streams - 1]; + +if (atom.size < 5) { +av_log(c->fc, AV_LOG_ERROR, "Empty VP Codec Configuration box\n"); +return AVERROR_INVALIDDATA; +} + +version = avio_r8(pb); +if (version != 1) { +av_log(c->fc, AV_LOG_WARNING, "Unsupported VP Codec Configuration box version %d\n", version); +return 0; +} +avio_skip(pb, 3); /* flags */ + +avio_skip(pb, 2); /* profile + level */ +color_range = avio_r8(pb); /* bitDepth, chromaSubsampling, videoFullRangeFlag */ +color_primaries = avio_r8(pb); +color_trc = avio_r8(pb); +color_space = avio_r8(pb); +if (avio_rb16(pb)) /* codecIntializationDataSize */ +return AVERROR_INVALIDDATA; + +if (!av_color_primaries_name(color_primaries)) +color_primaries = AVCOL_PRI_UNSPECIFIED; +if (!av_color_transfer_name(color_trc)) +color_trc = AVCOL_TRC_UNSPECIFIED; +if (!av_color_space_name(color_space)) +color_space = AVCOL_SPC_UNSPECIFIED; + +st->codecpar->color_range = (color_range & 1) ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; +st->codecpar->color_primaries = color_primaries; +st->codecpar->color_trc = color_trc; +st->codecpar->color_space = color_space; + +return 0; +} + static int mov_read_smdm(MOVContext *c, AVIOContext *pb, MOVAtom atom) { MOVStreamContext *sc; @@ -5501,6 +5545,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('d','O','p','s'), mov_read_dops }, { MKTAG('S','m','D','m'), mov_read_smdm }, { MKTAG('C','o','L','L'), mov_read_coll }, +{ MKTAG('v','p','c','C'), mov_read_vpcc }, { 0, NULL } }; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/wavpack: Fix runtime error: signed integer overflow: 1886191616 + 277872640 cannot be represented in type 'int'
ffmpeg | branch: master | Michael Niedermayer | Sun Jun 11 20:19:59 2017 +0200| [c996374d4d86e0efbef71812448b4c65656bc667] | committer: Michael Niedermayer avcodec/wavpack: Fix runtime error: signed integer overflow: 1886191616 + 277872640 cannot be represented in type 'int' Fixes: 2181/clusterfuzz-testcase-minimized-6314784322486272 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c996374d4d86e0efbef71812448b4c65656bc667 --- libavcodec/wavpack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/wavpack.h b/libavcodec/wavpack.h index c949390f51..053b1c575d 100644 --- a/libavcodec/wavpack.h +++ b/libavcodec/wavpack.h @@ -94,7 +94,7 @@ typedef struct Decorr { typedef struct WvChannel { int median[3]; int slow_level, error_limit; -int bitrate_acc, bitrate_delta; +unsigned bitrate_acc, bitrate_delta; } WvChannel; // macros for manipulating median values ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/jpeg2000dwt: Fix runtime error: left shift of negative value -123
ffmpeg | branch: master | Michael Niedermayer | Sun Jun 11 20:28:46 2017 +0200| [d24043e1a2f93f206a2ad59054f24f45ff023e5c] | committer: Michael Niedermayer avcodec/jpeg2000dwt: Fix runtime error: left shift of negative value -123 Fixes: 2208/clusterfuzz-testcase-minimized-5976593765761024 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d24043e1a2f93f206a2ad59054f24f45ff023e5c --- libavcodec/jpeg2000dwt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/jpeg2000dwt.c b/libavcodec/jpeg2000dwt.c index 188cc261a4..735ed0b1dc 100644 --- a/libavcodec/jpeg2000dwt.c +++ b/libavcodec/jpeg2000dwt.c @@ -488,7 +488,7 @@ static void dwt_decode97_int(DWTContext *s, int32_t *t) line += 5; for (i = 0; i < w * h; i++) -data[i] <<= I_PRESHIFT; +data[i] *= 1 << I_PRESHIFT; for (lev = 0; lev < s->ndeclevels; lev++) { int lh = s->linelen[lev][0], ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/libvpxdec: Check that display dimensions fit in the storage dimensions
ffmpeg | branch: master | Michael Niedermayer | Wed Jun 7 19:17:30 2017 +0200| [f8593c2f492a514b67533a877b716a25d3770418] | committer: Michael Niedermayer avcodec/libvpxdec: Check that display dimensions fit in the storage dimensions Fixes assertion failure Fixes: 2112/clusterfuzz-testcase-minimized-4526878557732864 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f8593c2f492a514b67533a877b716a25d3770418 --- libavcodec/libvpxdec.c | 7 +++ 1 file changed, 7 insertions(+) diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c index 5204c993cd..ad0ea3b02a 100644 --- a/libavcodec/libvpxdec.c +++ b/libavcodec/libvpxdec.c @@ -244,6 +244,13 @@ static int vpx_decode(AVCodecContext *avctx, (img_alpha = vpx_codec_get_frame(&ctx->decoder_alpha, &iter_alpha { uint8_t *planes[4]; int linesizes[4]; + +if (img->d_w > img->w || img->d_h > img->h) { +av_log(avctx, AV_LOG_ERROR, "Display dimensions %dx%d exceed storage %dx%d\n", + img->d_w, img->d_h, img->w, img->h); +return AVERROR_EXTERNAL; +} + if ((ret = set_pix_fmt(avctx, img, ctx->has_alpha_channel)) < 0) { #ifdef VPX_IMG_FMT_HIGHBITDEPTH av_log(avctx, AV_LOG_ERROR, "Unsupported output colorspace (%d) / bit_depth (%d)\n", ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/avpacket: Limit iterations in ff_packet_split_and_drop_side_data()
ffmpeg | branch: master | Michael Niedermayer | Sun Jun 11 22:08:04 2017 +0200| [07339a45a04e5fa0848937090511d69a39a04740] | committer: Michael Niedermayer avcodec/avpacket: Limit iterations in ff_packet_split_and_drop_side_data() This avoids scaning beyond what a valid packet can contain Fixes: Timeout Fixes: 541/clusterfuzz-testcase-610189291657625 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=07339a45a04e5fa0848937090511d69a39a04740 --- libavcodec/avpacket.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index a04cdaf530..5ce3228166 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -495,6 +495,8 @@ int ff_packet_split_and_drop_side_data(AVPacket *pkt){ if (p - pkt->data < size + 5) return 0; p-= size+5; +if (i > AV_PKT_DATA_NB) +return 0; } pkt->size = p - pkt->data - size; av_assert0(pkt->size >= 0); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog