[FFmpeg-cvslog] avcodec: add Gremlin DPCM decoder

2017-06-11 Thread Paul B Mahol
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

2017-06-11 Thread Paul B Mahol
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

2017-06-11 Thread Paul B Mahol
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

2017-06-11 Thread Paul B Mahol
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

2017-06-11 Thread Michael Niedermayer
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

2017-06-11 Thread Michael Niedermayer
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

2017-06-11 Thread James Almer
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'

2017-06-11 Thread Michael Niedermayer
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

2017-06-11 Thread Michael Niedermayer
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

2017-06-11 Thread Michael Niedermayer
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()

2017-06-11 Thread Michael Niedermayer
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