[FFmpeg-cvslog] mpegts: prevent division by zero
ffmpeg | branch: master | Andreas Cadhalpun| Mon Nov 7 23:37:59 2016 +0100| [1bbb18fe82fc77a10d45fa53bd2738d2c54de6c6] | committer: Andreas Cadhalpun mpegts: prevent division by zero Reviewed-by: Michael Niedermayer Signed-off-by: Andreas Cadhalpun > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1bbb18fe82fc77a10d45fa53bd2738d2c54de6c6 --- libavformat/mpegts.c | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index fad10c6..0aa0ad7 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -2681,8 +2681,17 @@ static int mpegts_read_header(AVFormatContext *s) packet_count[nb_pcrs] = nb_packets; pcrs[nb_pcrs] = pcr_h * 300 + pcr_l; nb_pcrs++; -if (nb_pcrs >= 2) -break; +if (nb_pcrs >= 2) { +if (pcrs[1] - pcrs[0] > 0) { +/* the difference needs to be positive to make sense for bitrate computation */ +break; +} else { +av_log(ts->stream, AV_LOG_WARNING, "invalid pcr pair %"PRId64" >= %"PRId64"\n", pcrs[0], pcrs[1]); +pcrs[0] = pcrs[1]; +packet_count[0] = packet_count[1]; +nb_pcrs--; +} +} } else { finished_reading_packet(s, ts->raw_packet_size); } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] matroskadec: fix NULL pointer dereference in webm_dash_manifest_read_header
ffmpeg | branch: master | Andreas Cadhalpun| Tue Nov 8 00:42:23 2016 +0100| [ff100c9dd97d2f1f456ff38b192edf84f9744738] | committer: Andreas Cadhalpun matroskadec: fix NULL pointer dereference in webm_dash_manifest_read_header The code assumes that s->streams[0] is valid. Reviewed-by: Michael Niedermayer Signed-off-by: Andreas Cadhalpun > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ff100c9dd97d2f1f456ff38b192edf84f9744738 --- libavformat/matroskadec.c | 5 + 1 file changed, 5 insertions(+) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index d2a691b..f79511e 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3776,6 +3776,11 @@ static int webm_dash_manifest_read_header(AVFormatContext *s) av_log(s, AV_LOG_ERROR, "Failed to read file headers\n"); return -1; } +if (!s->nb_streams) { +matroska_read_close(s); +av_log(s, AV_LOG_ERROR, "No streams found\n"); +return AVERROR_INVALIDDATA; +} if (!matroska->is_live) { buf = av_asprintf("%g", matroska->duration); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/hap: pass texture-compression destination as argument, not in context
ffmpeg | branch: master | Tom Butterworth| Mon Nov 7 16:25:33 2016 +| [0a245875887430fbdfa9cbd19eb4d337dae93d2e] | committer: Tom Butterworth avcodec/hap: pass texture-compression destination as argument, not in context This allows a subsequent change to compress directly into the output packet when possible. Reviewed-by: Michael Niedermayer Signed-off-by: Tom Butterworth > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0a245875887430fbdfa9cbd19eb4d337dae93d2e --- libavcodec/hapenc.c | 12 +--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libavcodec/hapenc.c b/libavcodec/hapenc.c index 076923b..79b6074 100644 --- a/libavcodec/hapenc.c +++ b/libavcodec/hapenc.c @@ -52,12 +52,14 @@ enum HapHeaderLength { HAP_HDR_LONG = 8, }; -static void compress_texture(AVCodecContext *avctx, const AVFrame *f) +static int compress_texture(AVCodecContext *avctx, uint8_t *out, int out_length, const AVFrame *f) { HapContext *ctx = avctx->priv_data; -uint8_t *out = ctx->tex_buf; int i, j; +if (ctx->tex_size > out_length) +return AVERROR_BUFFER_TOO_SMALL; + for (j = 0; j < avctx->height; j += 4) { for (i = 0; i < avctx->width; i += 4) { uint8_t *p = f->data[0] + i * 4 + j * f->linesize[0]; @@ -65,6 +67,8 @@ static void compress_texture(AVCodecContext *avctx, const AVFrame *f) out += step; } } + +return 0; } /* section_length does not include the header */ @@ -201,7 +205,9 @@ static int hap_encode(AVCodecContext *avctx, AVPacket *pkt, return ret; /* DXTC compression. */ -compress_texture(avctx, frame); +ret = compress_texture(avctx, ctx->tex_buf, ctx->tex_size, frame); +if (ret < 0) +return ret; /* Compress (using Snappy) the frame */ final_data_size = hap_compress_frame(avctx, pkt->data + header_length); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat/matroskadec: fix DiscardPadding element parsing
ffmpeg | branch: master | James Almer| Sat Nov 5 17:46:52 2016 -0300| [70c6a1bcf021b396c9186c4a46dd6c96cc9f59f8] | committer: James Almer avformat/matroskadec: fix DiscardPadding element parsing If the value is negative then it means padding at the start of the packet instead of at the end. Based on a patch by Hendrik Leppkes. Reviewed-by: James Zern Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=70c6a1bcf021b396c9186c4a46dd6c96cc9f59f8 --- libavformat/matroskadec.c | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 32f5e49..d2a691b 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3082,10 +3082,14 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, av_free(pkt); return AVERROR(ENOMEM); } -AV_WL32(side_data, 0); -AV_WL32(side_data + 4, av_rescale_q(discard_padding, +discard_padding = av_rescale_q(discard_padding, (AVRational){1, 10}, -(AVRational){1, st->codecpar->sample_rate})); +(AVRational){1, st->codecpar->sample_rate}); +if (discard_padding > 0) { +AV_WL32(side_data + 4, discard_padding); +} else { +AV_WL32(side_data, -discard_padding); +} } if (track->ms_compat) ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] opus: move the entropy decoding functions to opus_rc.c
ffmpeg | branch: master | Rostislav Pehlivanov| Mon Nov 7 22:33:11 2016 +| [317be31eaf4f07b3bbeb703e8ee73d04b08a587c] | committer: Rostislav Pehlivanov opus: move the entropy decoding functions to opus_rc.c The intention is to have both encoding and decoding functions in opus_rc.c. Signed-off-by: Rostislav Pehlivanov > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=317be31eaf4f07b3bbeb703e8ee73d04b08a587c --- libavcodec/Makefile| 2 +- libavcodec/opus.h | 222 + libavcodec/opus_celt.c | 58 ++--- libavcodec/opus_rc.c | 221 libavcodec/opus_rc.h | 85 +++ libavcodec/opus_silk.c | 72 libavcodec/opusdec.c | 40 ++--- 7 files changed, 380 insertions(+), 320 deletions(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 8e4087e..5fdc97f 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -436,7 +436,7 @@ OBJS-$(CONFIG_NELLYMOSER_DECODER) += nellymoserdec.o nellymoser.o OBJS-$(CONFIG_NELLYMOSER_ENCODER) += nellymoserenc.o nellymoser.o OBJS-$(CONFIG_NUV_DECODER) += nuv.o rtjpeg.o OBJS-$(CONFIG_ON2AVC_DECODER) += on2avc.o on2avcdata.o -OBJS-$(CONFIG_OPUS_DECODER)+= opusdec.o opus.o opus_celt.o \ +OBJS-$(CONFIG_OPUS_DECODER)+= opusdec.o opus.o opus_celt.o opus_rc.o \ opus_silk.o opustab.o vorbis_data.o OBJS-$(CONFIG_PAF_AUDIO_DECODER) += pafaudio.o OBJS-$(CONFIG_PAF_VIDEO_DECODER) += pafvideo.o diff --git a/libavcodec/opus.h b/libavcodec/opus.h index 3a7ea9f..2079f42 100644 --- a/libavcodec/opus.h +++ b/libavcodec/opus.h @@ -32,7 +32,7 @@ #include "libswresample/swresample.h" #include "avcodec.h" -#include "get_bits.h" +#include "opus_rc.h" #define MAX_FRAME_SIZE 1275 #define MAX_FRAMES 48 @@ -59,7 +59,6 @@ #define ROUND_MULL(a,b,s) (((MUL64(a, b) >> ((s) - 1)) + 1) >> 1) #define ROUND_MUL16(a,b) ((MUL16(a, b) + 16384) >> 15) -#define opus_ilog(i) (av_log2(i) + !!(i)) #define OPUS_TS_HEADER 0x7FE0// 0x3ff (11 bits) #define OPUS_TS_MASK 0xFFE0// top 11 bits @@ -84,21 +83,6 @@ enum OpusBandwidth { OPUS_BANDWIDTH_FULLBAND }; -typedef struct RawBitsContext { -const uint8_t *position; -unsigned int bytes; -unsigned int cachelen; -unsigned int cacheval; -} RawBitsContext; - -typedef struct OpusRangeCoder { -GetBitContext gb; -RawBitsContext rb; -unsigned int range; -unsigned int value; -unsigned int total_read_bits; -} OpusRangeCoder; - typedef struct SilkContext SilkContext; typedef struct CeltContext CeltContext; @@ -193,210 +177,6 @@ typedef struct OpusContext { ChannelMap *channel_maps; } OpusContext; -static av_always_inline void opus_rc_normalize(OpusRangeCoder *rc) -{ -while (rc->range <= 1<<23) { -rc->value = ((rc->value << 8) | (get_bits(>gb, 8) ^ 0xFF)) & ((1u << 31) - 1); -rc->range <<= 8; -rc->total_read_bits += 8; -} -} - -static av_always_inline void opus_rc_update(OpusRangeCoder *rc, unsigned int scale, - unsigned int low, unsigned int high, - unsigned int total) -{ -rc->value -= scale * (total - high); -rc->range = low ? scale * (high - low) - : rc->range - scale * (total - high); -opus_rc_normalize(rc); -} - -static av_always_inline unsigned int opus_rc_getsymbol(OpusRangeCoder *rc, const uint16_t *cdf) -{ -unsigned int k, scale, total, symbol, low, high; - -total = *cdf++; - -scale = rc->range / total; -symbol = rc->value / scale + 1; -symbol = total - FFMIN(symbol, total); - -for (k = 0; cdf[k] <= symbol; k++); -high = cdf[k]; -low = k ? cdf[k-1] : 0; - -opus_rc_update(rc, scale, low, high, total); - -return k; -} - -static av_always_inline unsigned int opus_rc_p2model(OpusRangeCoder *rc, unsigned int bits) -{ -unsigned int k, scale; -scale = rc->range >> bits; // in this case, scale = symbol - -if (rc->value >= scale) { -rc->value -= scale; -rc->range -= scale; -k = 0; -} else { -rc->range = scale; -k = 1; -} -opus_rc_normalize(rc); -return k; -} - -/** - * CELT: estimate bits of entropy that have thus far been consumed for the - * current CELT frame, to integer and fractional (1/8th bit) precision - */ -static av_always_inline unsigned int opus_rc_tell(const OpusRangeCoder *rc) -{ -return rc->total_read_bits - av_log2(rc->range) - 1; -} - -static av_always_inline unsigned int opus_rc_tell_frac(const OpusRangeCoder *rc) -{ -unsigned int i, total_bits, rcbuffer, range; - -total_bits = rc->total_read_bits << 3; -
[FFmpeg-cvslog] avformat/mov: Read multiple stsd from DV
ffmpeg | branch: master | Vittorio Giovara| Mon Nov 7 22:32:05 2016 -0500| [a765ba647d3d5ecb7270011693cb5b171f9afd01] | committer: Michael Niedermayer avformat/mov: Read multiple stsd from DV Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a765ba647d3d5ecb7270011693cb5b171f9afd01 --- libavformat/mov.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index f06de06..ca978c2 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2213,6 +2213,8 @@ static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb, (codec_tag != format && // prores is allowed to have differing data format and codec tag codec_tag != AV_RL32("apcn") && codec_tag != AV_RL32("apch") && + // so is dv (sigh) + codec_tag != AV_RL32("dvpp") && codec_tag != AV_RL32("dvcp") && (c->fc->video_codec_id ? video_codec_id != c->fc->video_codec_id : codec_tag != MKTAG('j','p','e','g' { /* Multiple fourcc, we skip JPEG. This is not correct, we should ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] ffserver: use .codecpar instead of .codec in print_stream_params()
ffmpeg | branch: master | Reynaldo H. Verdejo Pinochet| Tue Nov 8 00:49:43 2016 -0800| [689f648a9596fc1a47a719b20d7e9d67eb388d73] | committer: Michael Niedermayer ffserver: use .codecpar instead of .codec in print_stream_params() AVStream.codec is deprecated Signed-off-by: Reynaldo H. Verdejo Pinochet Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=689f648a9596fc1a47a719b20d7e9d67eb388d73 --- ffserver.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ffserver.c b/ffserver.c index bbeca35..ed8cb2f 100644 --- a/ffserver.c +++ b/ffserver.c @@ -1880,21 +1880,21 @@ static inline void print_stream_params(AVIOContext *pb, FFServerStream *stream) for (i = 0; i < stream_no; i++) { st = stream->streams[i]; -codec = avcodec_find_encoder(st->codec->codec_id); +codec = avcodec_find_encoder(st->codecpar->codec_id); parameters[0] = 0; -switch(st->codec->codec_type) { +switch(st->codecpar->codec_type) { case AVMEDIA_TYPE_AUDIO: type = "audio"; snprintf(parameters, sizeof(parameters), "%d channel(s), %d Hz", - st->codec->channels, st->codec->sample_rate); + st->codecpar->channels, st->codecpar->sample_rate); break; case AVMEDIA_TYPE_VIDEO: type = "video"; snprintf(parameters, sizeof(parameters), - "%dx%d, q=%d-%d, fps=%d", st->codec->width, - st->codec->height, st->codec->qmin, st->codec->qmax, + "%dx%d, q=%d-%d, fps=%d", st->codecpar->width, + st->codecpar->height, st->codec->qmin, st->codec->qmax, st->codec->time_base.den / st->codec->time_base.num); break; default: ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] ffserver: use AVStream.codecpar in open_input_stream()
ffmpeg | branch: master | Reynaldo H. Verdejo Pinochet| Tue Nov 8 01:34:58 2016 -0800| [6f0a1710d77dde0d803861506a2157a23f08c14c] | committer: Michael Niedermayer ffserver: use AVStream.codecpar in open_input_stream() AVStream.codec is deprecated Signed-off-by: Reynaldo H. Verdejo Pinochet Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6f0a1710d77dde0d803861506a2157a23f08c14c --- ffserver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ffserver.c b/ffserver.c index 01f311d..3007e2d 100644 --- a/ffserver.c +++ b/ffserver.c @@ -2213,7 +2213,7 @@ static int open_input_stream(HTTPContext *c, const char *info) c->pts_stream_index = 0; for(i=0;istream->nb_streams;i++) { if (c->pts_stream_index == 0 && -c->stream->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { +c->stream->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { c->pts_stream_index = i; } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] ffserver: user AVStream.codecpar in compute_status()
ffmpeg | branch: master | Reynaldo H. Verdejo Pinochet| Tue Nov 8 01:07:14 2016 -0800| [822e3e2ddb8a122130047451276cda2b1b5e5e7f] | committer: Michael Niedermayer ffserver: user AVStream.codecpar in compute_status() AVStream.codec is deprecated Signed-off-by: Reynaldo H. Verdejo Pinochet Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=822e3e2ddb8a122130047451276cda2b1b5e5e7f --- ffserver.c | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ffserver.c b/ffserver.c index 63c408b..01f311d 100644 --- a/ffserver.c +++ b/ffserver.c @@ -1990,11 +1990,11 @@ static void compute_status(HTTPContext *c) for(i=0;inb_streams;i++) { AVStream *st = stream->streams[i]; -AVCodec *codec = avcodec_find_encoder(st->codec->codec_id); +AVCodec *codec = avcodec_find_encoder(st->codecpar->codec_id); -switch(st->codec->codec_type) { +switch(st->codecpar->codec_type) { case AVMEDIA_TYPE_AUDIO: -audio_bit_rate += st->codec->bit_rate; +audio_bit_rate += st->codecpar->bit_rate; if (codec) { if (*audio_codec_name) audio_codec_name_extra = "..."; @@ -2002,7 +2002,7 @@ static void compute_status(HTTPContext *c) } break; case AVMEDIA_TYPE_VIDEO: -video_bit_rate += st->codec->bit_rate; +video_bit_rate += st->codecpar->bit_rate; if (codec) { if (*video_codec_name) video_codec_name_extra = "..."; @@ -2010,7 +2010,7 @@ static void compute_status(HTTPContext *c) } break; case AVMEDIA_TYPE_DATA: -video_bit_rate += st->codec->bit_rate; +video_bit_rate += st->codecpar->bit_rate; break; default: abort(); @@ -2107,9 +2107,9 @@ static void compute_status(HTTPContext *c) if (c1->stream) { for (j = 0; j < c1->stream->nb_streams; j++) { if (!c1->stream->feed) -bitrate += c1->stream->streams[j]->codec->bit_rate; +bitrate += c1->stream->streams[j]->codecpar->bit_rate; else if (c1->feed_streams[j] >= 0) -bitrate += c1->stream->feed->streams[c1->feed_streams[j]]->codec->bit_rate; +bitrate += c1->stream->feed->streams[c1->feed_streams[j]]->codecpar->bit_rate; } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] ffserver: get time_base from AVStream in print_stream_params()
ffmpeg | branch: master | Reynaldo H. Verdejo Pinochet| Tue Nov 8 00:51:28 2016 -0800| [1323349befd3f55bef2f9e46168f17a53f8f6d4a] | committer: Michael Niedermayer ffserver: get time_base from AVStream in print_stream_params() AVStream.codec is deprecated Signed-off-by: Reynaldo H. Verdejo Pinochet Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1323349befd3f55bef2f9e46168f17a53f8f6d4a --- ffserver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ffserver.c b/ffserver.c index ed8cb2f..65280d2 100644 --- a/ffserver.c +++ b/ffserver.c @@ -1895,7 +1895,7 @@ static inline void print_stream_params(AVIOContext *pb, FFServerStream *stream) snprintf(parameters, sizeof(parameters), "%dx%d, q=%d-%d, fps=%d", st->codecpar->width, st->codecpar->height, st->codec->qmin, st->codec->qmax, - st->codec->time_base.den / st->codec->time_base.num); + st->time_base.den / st->time_base.num); break; default: abort(); @@ -1903,7 +1903,7 @@ static inline void print_stream_params(AVIOContext *pb, FFServerStream *stream) avio_printf(pb, "%d%s%"PRId64 "%s%s\n", -i, type, (int64_t)st->codec->bit_rate/1000, +i, type, (int64_t)st->codecpar->bit_rate/1000, codec ? codec->name : "", parameters); } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog