[FFmpeg-cvslog] avcodec/mjpegdec: Skip blocks which are outside the visible area
ffmpeg | branch: master | Michael Niedermayer | Wed Feb 11 03:33:53 2015 +0100| [08509c8f86626815a3e9e68d600d1aacbb8df4bf] | committer: Michael Niedermayer avcodec/mjpegdec: Skip blocks which are outside the visible area Fixes out of array accesses Fixes: ffmpeg_mjpeg_crash.avi Found-by: Thomas Lindroth Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=08509c8f86626815a3e9e68d600d1aacbb8df4bf --- libavcodec/mjpegdec.c | 23 +++ 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 08c8033..5e86c2e 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -1248,13 +1248,18 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, if (s->interlaced && s->bottom_field) block_offset += linesize[c] >> 1; -ptr = data[c] + block_offset; +if ( 8*(h * mb_x + x) < s->width +&& 8*(v * mb_y + y) < s->height) { +ptr = data[c] + block_offset; +} else +ptr = NULL; if (!s->progressive) { -if (copy_mb) -mjpeg_copy_block(s, ptr, reference_data[c] + block_offset, - linesize[c], s->avctx->lowres); +if (copy_mb) { +if (ptr) +mjpeg_copy_block(s, ptr, reference_data[c] + block_offset, +linesize[c], s->avctx->lowres); -else { +} else { s->bdsp.clear_block(s->block); if (decode_block(s, s->block, i, s->dc_index[i], s->ac_index[i], @@ -1263,9 +1268,11 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, "error y=%d x=%d\n", mb_y, mb_x); return AVERROR_INVALIDDATA; } -s->idsp.idct_put(ptr, linesize[c], s->block); -if (s->bits & 7) -shift_output(s, ptr, linesize[c]); +if (ptr) { +s->idsp.idct_put(ptr, linesize[c], s->block); +if (s->bits & 7) +shift_output(s, ptr, linesize[c]); +} } } else { int block_idx = s->block_stride[c] * (v * mb_y + y) + ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] ffmpeg: Print negative times like "-00:05:01.22" instead of "00:-5:-1.-22"
ffmpeg | branch: master | Michael Niedermayer | Tue Feb 10 22:09:29 2015 +0100| [23849339855875b737aee94813b31ddde2e40f9a] | committer: Michael Niedermayer ffmpeg: Print negative times like "-00:05:01.22" instead of "00:-5:-1.-22" Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=23849339855875b737aee94813b31ddde2e40f9a --- ffmpeg.c |6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index fd45afb..becd5df 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1528,8 +1528,8 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti nb_frames_drop += ost->last_droped; } -secs = pts / AV_TIME_BASE; -us = pts % AV_TIME_BASE; +secs = FFABS(pts) / AV_TIME_BASE; +us = FFABS(pts) % AV_TIME_BASE; mins = secs / 60; secs %= 60; hours = mins / 60; @@ -1541,6 +1541,8 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti "size=N/A time="); elsesnprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "size=%8.0fkB time=", total_size / 1024.0); +if (pts < 0) +snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "-"); snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%02d:%02d:%02d.%02d ", hours, mins, secs, (100 * us) / AV_TIME_BASE); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] Changelog: mention more ported filters
ffmpeg | branch: master | Paul B Mahol | Wed Feb 11 09:35:23 2015 +| [3a8801eb8d721b2ae16d4b178985e3893aa783e8] | committer: Paul B Mahol Changelog: mention more ported filters Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3a8801eb8d721b2ae16d4b178985e3893aa783e8 --- Changelog |2 ++ 1 file changed, 2 insertions(+) diff --git a/Changelog b/Changelog index ca5e089..49b4793 100644 --- a/Changelog +++ b/Changelog @@ -18,8 +18,10 @@ version : - showpalette filter - Twofish symmetric block cipher - Support DNx100 (960x720@8) +- eq2 filter ported from libmpcodecs as eq filter - removed libmpcodecs - Changed default DNxHD colour range in QuickTime .mov derivatives to mpeg range +- ported softpulldown filter from libmpcodecs as repeatfields filter version 2.5: ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/h264_slice: Check picture structure before setting the related fields
ffmpeg | branch: release/1.2 | Michael Niedermayer | Sat Feb 7 02:22:44 2015 +0100| [4de40be5077364c8b0e25c5fa8d3fc9afbcfe94b] | committer: Michael Niedermayer avcodec/h264_slice: Check picture structure before setting the related fields This might fix a hypothetical race condition Signed-off-by: Michael Niedermayer (cherry picked from commit f111831ed61103f9fa8fdda41473a23da016bdaa) Signed-off-by: Michael Niedermayer Conflicts: libavcodec/h264_slice.c Conflicts: libavcodec/h264.c > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4de40be5077364c8b0e25c5fa8d3fc9afbcfe94b --- libavcodec/h264.c | 30 -- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index dfbab66..3e62104 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3148,7 +3148,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) int must_reinit; int needs_reinit = 0; int first_slice = h == h0 && !h0->current_slice; -int frame_num; +int frame_num, picture_structure, droppable; PPS *pps; h->me.qpel_put = h->h264qpel.put_h264_qpel_pixels_tab; @@ -3342,37 +3342,32 @@ static int decode_slice_header(H264Context *h, H264Context *h0) return AVERROR_INVALIDDATA; } } -h->frame_num = frame_num; h->mb_mbaff= 0; h->mb_aff_frame= 0; last_pic_structure = h0->picture_structure; last_pic_droppable = h0->droppable; -h->droppable = h->nal_ref_idc == 0; +droppable = h->nal_ref_idc == 0; if (h->sps.frame_mbs_only_flag) { -h->picture_structure = PICT_FRAME; +picture_structure = PICT_FRAME; } else { if (!h->sps.direct_8x8_inference_flag && slice_type == AV_PICTURE_TYPE_B) { av_log(h->avctx, AV_LOG_ERROR, "This stream was generated by a broken encoder, invalid 8x8 inference\n"); return -1; } if (get_bits1(&h->gb)) { // field_pic_flag -h->picture_structure = PICT_TOP_FIELD + get_bits1(&h->gb); // bottom_field_flag +picture_structure = PICT_TOP_FIELD + get_bits1(&h->gb); // bottom_field_flag } else { -h->picture_structure = PICT_FRAME; +picture_structure = PICT_FRAME; h->mb_aff_frame = h->sps.mb_aff; } } -h->mb_field_decoding_flag = h->picture_structure != PICT_FRAME; - -if (h0->current_slice != 0) { -if (last_pic_structure != h->picture_structure || -last_pic_droppable != h->droppable) { +if (h0->current_slice) { +if (last_pic_structure != picture_structure || +last_pic_droppable != droppable) { av_log(h->avctx, AV_LOG_ERROR, "Changing field mode (%d -> %d) between slices is not allowed\n", last_pic_structure, h->picture_structure); -h->picture_structure = last_pic_structure; -h->droppable = last_pic_droppable; return AVERROR_INVALIDDATA; } else if (!h0->cur_pic_ptr) { av_log(h->avctx, AV_LOG_ERROR, @@ -3380,7 +3375,14 @@ static int decode_slice_header(H264Context *h, H264Context *h0) h0->current_slice + 1); return AVERROR_INVALIDDATA; } -} else { +} + +h->picture_structure = picture_structure; +h->droppable = droppable; +h->frame_num = frame_num; +h->mb_field_decoding_flag = picture_structure != PICT_FRAME; + +if (h0->current_slice == 0) { /* Shorten frame num gaps so we don't have to allocate reference * frames just to throw them away */ if (h->frame_num != h->prev_frame_num) { ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avutil/opt: Fix type used to access AV_OPT_TYPE_SAMPLE_FMT
ffmpeg | branch: release/1.2 | Michael Niedermayer | Fri Feb 6 22:16:08 2015 +0100| [5b4a79ee02177075ca0ea8d00b9771eec0daa9ea] | committer: Michael Niedermayer avutil/opt: Fix type used to access AV_OPT_TYPE_SAMPLE_FMT Signed-off-by: Michael Niedermayer (cherry picked from commit 1750b45cdf7498d0a05bea29cafcb26aa576d595) Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5b4a79ee02177075ca0ea8d00b9771eec0daa9ea --- libavutil/opt.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 52cc7a1..56fde73 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -75,7 +75,7 @@ static int read_number(const AVOption *o, void *dst, double *num, int *den, int6 switch (o->type) { case AV_OPT_TYPE_FLAGS: *intnum = *(unsigned int*)dst;return 0; case AV_OPT_TYPE_PIXEL_FMT: *intnum = *(enum AVPixelFormat *)dst;return 0; -case AV_OPT_TYPE_SAMPLE_FMT: +case AV_OPT_TYPE_SAMPLE_FMT:*intnum = *(enum AVSampleFormat*)dst;return 0; case AV_OPT_TYPE_INT: *intnum = *(int *)dst;return 0; case AV_OPT_TYPE_INT64: *intnum = *(int64_t *)dst;return 0; case AV_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0; @@ -98,8 +98,8 @@ static int write_number(void *obj, const AVOption *o, void *dst, double num, int switch (o->type) { case AV_OPT_TYPE_PIXEL_FMT: *(enum AVPixelFormat *)dst = llrint(num/den) * intnum; break; +case AV_OPT_TYPE_SAMPLE_FMT:*(enum AVSampleFormat*)dst = llrint(num/den) * intnum; break; case AV_OPT_TYPE_FLAGS: -case AV_OPT_TYPE_SAMPLE_FMT: case AV_OPT_TYPE_INT: *(int *)dst= llrint(num/den)*intnum; break; case AV_OPT_TYPE_INT64: *(int64_t *)dst= llrint(num/den)*intnum; break; case AV_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat/thp: Check av_get_packet() for failure not only for partial output
ffmpeg | branch: release/1.2 | Michael Niedermayer | Thu Feb 5 03:45:21 2015 +0100| [3508aa142766288c87c471af4de34c204089a800] | committer: Michael Niedermayer avformat/thp: Check av_get_packet() for failure not only for partial output Fixes null pointer dereference Fixes: signal_sigsegv_db2c1f_3108_cov_163322880_pikmin2_opening1_partial.thp Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit f2579dbb4b31e6ae731e7f680528ef3020ab) Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3508aa142766288c87c471af4de34c204089a800 --- libavformat/thp.c |2 ++ 1 file changed, 2 insertions(+) diff --git a/libavformat/thp.c b/libavformat/thp.c index 568807d..3ef9497 100644 --- a/libavformat/thp.c +++ b/libavformat/thp.c @@ -180,6 +180,8 @@ static int thp_read_packet(AVFormatContext *s, pkt->stream_index = thp->video_stream_index; } else { ret = av_get_packet(pb, pkt, thp->audiosize); +if (ret < 0) +return ret; if (ret != thp->audiosize) { av_free_packet(pkt); return AVERROR(EIO); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mjpegdec: Check number of components for JPEG-LS
ffmpeg | branch: release/1.2 | Michael Niedermayer | Wed Feb 4 20:48:30 2015 +0100| [fd6a9fcd427b86c0a249a8cdb33f746f33706725] | committer: Michael Niedermayer avcodec/mjpegdec: Check number of components for JPEG-LS Fixes out of array accesses Fixes: asan_heap-oob_1c1a4ea_1242_cov_2274415971_TESTcmyk.jpg Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit fabbfaa095660982cc0bc63242c459561fa37037) Conflicts: libavcodec/mjpegdec.c > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fd6a9fcd427b86c0a249a8cdb33f746f33706725 --- libavcodec/mjpegdec.c |7 +-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index f04b603..fe1e5da 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -437,9 +437,12 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) } if (s->ls) { s->upscale_h = s->upscale_v = 0; -if (s->nb_components > 1) +if (s->nb_components == 3) { s->avctx->pix_fmt = AV_PIX_FMT_RGB24; -else if (s->bits <= 8) +} else if (s->nb_components != 1) { +av_log(s->avctx, AV_LOG_ERROR, "Unsupported number of components %d\n", s->nb_components); +return AVERROR_PATCHWELCOME; +} else if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GRAY8; else s->avctx->pix_fmt = AV_PIX_FMT_GRAY16; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mjpegdec: Check escape sequence validity
ffmpeg | branch: release/1.2 | Michael Niedermayer | Wed Feb 4 20:13:18 2015 +0100| [20be3ea442abafbdc4d8288a549c302a306bc63c] | committer: Michael Niedermayer avcodec/mjpegdec: Check escape sequence validity Fixes assertion failure Fixes: asan_heap-oob_1c1a4ea_1242_cov_2274415971_TESTcmyk.jpg Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=20be3ea442abafbdc4d8288a549c302a306bc63c --- libavcodec/mjpegdec.c |4 1 file changed, 4 insertions(+) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index a2a93c1..f04b603 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -1631,6 +1631,10 @@ int ff_mjpeg_find_marker(MJpegDecodeContext *s, put_bits(&pb, 8, x); if (x == 0xFF) { x = src[b++]; +if (x & 0x80) { +av_log(s->avctx, AV_LOG_WARNING, "Invalid escape sequence\n"); +x &= 0x7f; +} put_bits(&pb, 7, x); bit_count--; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/h264_ps: More completely check the bit depths
ffmpeg | branch: release/1.2 | Michael Niedermayer | Fri Feb 6 04:11:56 2015 +0100| [4ef5605fc91d5e01611dde6532f8b91742af3c60] | committer: Michael Niedermayer avcodec/h264_ps: More completely check the bit depths Fixes out of array read Fixes: asan_static-oob_30328b6_719_cov_3325483287_H264_artifacts_motion.h264 Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit 69aa79365c1e8e1cb597d33e77bf1062c2ef47d4) Conflicts: libavcodec/h264_ps.c Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4ef5605fc91d5e01611dde6532f8b91742af3c60 --- libavcodec/h264_ps.c |4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 8638ce2..12a16c8 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -379,7 +379,9 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){ } sps->bit_depth_luma = get_ue_golomb(&h->gb) + 8; sps->bit_depth_chroma = get_ue_golomb(&h->gb) + 8; -if (sps->bit_depth_luma > 14U || sps->bit_depth_chroma > 14U || sps->bit_depth_luma != sps->bit_depth_chroma) { +if (sps->bit_depth_luma < 8 || sps->bit_depth_luma > 14 || +sps->bit_depth_chroma < 8 || sps->bit_depth_chroma > 14 || +sps->bit_depth_luma != sps->bit_depth_chroma) { av_log(h->avctx, AV_LOG_ERROR, "illegal bit depth value (%d, %d)\n", sps->bit_depth_luma, sps->bit_depth_chroma); goto fail; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mjpegdec: Skip blocks which are outside the visible area
ffmpeg | branch: release/1.2 | Michael Niedermayer | Wed Feb 11 03:33:53 2015 +0100| [7e7772c13ad8c75786f3980ad4e118158697d4db] | committer: Michael Niedermayer avcodec/mjpegdec: Skip blocks which are outside the visible area Fixes out of array accesses Fixes: ffmpeg_mjpeg_crash.avi Found-by: Thomas Lindroth Signed-off-by: Michael Niedermayer (cherry picked from commit 08509c8f86626815a3e9e68d600d1aacbb8df4bf) Conflicts: libavcodec/mjpegdec.c (cherry picked from commit b881a97b9977b79dfe3ce02d61542c630fe78c14) Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7e7772c13ad8c75786f3980ad4e118158697d4db --- libavcodec/mjpegdec.c | 19 +-- 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index fe1e5da..fa5844b 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -1083,13 +1083,18 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, if (s->interlaced && s->bottom_field) block_offset += linesize[c] >> 1; -ptr = data[c] + block_offset; +if ( 8*(h * mb_x + x) < s->width +&& 8*(v * mb_y + y) < s->height) { +ptr = data[c] + block_offset; +} else +ptr = NULL; if (!s->progressive) { -if (copy_mb) -mjpeg_copy_block(s, ptr, reference_data[c] + block_offset, - linesize[c], s->avctx->lowres); +if (copy_mb) { +if (ptr) +mjpeg_copy_block(s, ptr, reference_data[c] + block_offset, +linesize[c], s->avctx->lowres); -else { +} else { s->dsp.clear_block(s->block); if (decode_block(s, s->block, i, s->dc_index[i], s->ac_index[i], @@ -1098,7 +1103,9 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, "error y=%d x=%d\n", mb_y, mb_x); return AVERROR_INVALIDDATA; } -s->dsp.idct_put(ptr, linesize[c], s->block); +if (ptr) { +s->dsp.idct_put(ptr, linesize[c], s->block); +} } } else { int block_idx = s->block_stride[c] * (v * mb_y + y) + ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] swscale/utils: Limit filter shifting so as not to read from prior the array
ffmpeg | branch: release/1.2 | Michael Niedermayer | Thu Feb 5 00:12:08 2015 +0100| [42d9a7010f2d24e93c12c001430186d544eea591] | committer: Michael Niedermayer swscale/utils: Limit filter shifting so as not to read from prior the array Fixes out of array read Fixes: asan_heap-oob_1fb2f9b_3780_cov_3984375136_usf.mkv Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit 692b22626ec9a9585f667c124a186b1a9796e432) Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=42d9a7010f2d24e93c12c001430186d544eea591 --- libswscale/utils.c |5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libswscale/utils.c b/libswscale/utils.c index 69ae7d8..de40bf5 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -571,14 +571,15 @@ static int initFilter(int16_t **outFilter, int32_t **filterPos, } if ((*filterPos)[i] + filterSize > srcW) { -int shift = (*filterPos)[i] + filterSize - srcW; +int shift = (*filterPos)[i] + FFMIN(filterSize - srcW, 0); + // move filter coefficients right to compensate for filterPos for (j = filterSize - 2; j >= 0; j--) { int right = FFMIN(j + shift, filterSize - 1); filter[i * filterSize + right] += filter[i * filterSize + j]; filter[i * filterSize + j] = 0; } -(*filterPos)[i]= srcW - filterSize; +(*filterPos)[i]-= shift; } } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/h264_slice: ignore SAR changes in slices after the first
ffmpeg | branch: release/1.2 | Michael Niedermayer | Sat Feb 7 03:34:48 2015 +0100| [ac8ef33f9a397ed6ddfe936a2bdd6866ecb211dc] | committer: Michael Niedermayer avcodec/h264_slice: ignore SAR changes in slices after the first Fixes race condition and null pointer dereference Fixes: signal_sigsegv_1472ac3_468_cov_2915641226_CABACI3_Sony_B.jsv Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit 38d5241b7f36c1571a88517a0650caade16dd5f4) Signed-off-by: Michael Niedermayer Conflicts: libavcodec/h264_slice.c > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ac8ef33f9a397ed6ddfe936a2bdd6866ecb211dc --- libavcodec/h264.c |4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 3e62104..533cb9e 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3254,13 +3254,15 @@ static int decode_slice_header(H264Context *h, H264Context *h0) || 16*h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag) != h->avctx->coded_height || h->avctx->bits_per_raw_sample != h->sps.bit_depth_luma || h->cur_chroma_format_idc != h->sps.chroma_format_idc - || av_cmp_q(h->sps.sar, h->avctx->sample_aspect_ratio) || h->mb_width != h->sps.mb_width || h->mb_height != h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag) )); if (non_j_pixfmt(h0->avctx->pix_fmt) != non_j_pixfmt(get_pixel_format(h0, 0))) must_reinit = 1; +if (first_slice && av_cmp_q(h->sps.sar, h->avctx->sample_aspect_ratio)) +must_reinit = 1; + h->mb_width = h->sps.mb_width; h->mb_height = h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag); h->mb_num= h->mb_width * h->mb_height; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/h264: Be more strict on rejecting pps/sps changes
ffmpeg | branch: release/1.2 | Michael Niedermayer | Fri Feb 6 15:09:54 2015 +0100| [763c7533483b332bfe2064df4de43056f3935d84] | committer: Michael Niedermayer avcodec/h264: Be more strict on rejecting pps/sps changes Fixes race condition Fixes: signal_sigsegv_1472ac3_468_cov_2915641226_CABACI3_Sony_B.jsv Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit 6fafc62b0bd0e206deb77a7aabbf3a370ad80789) Conflicts: libavcodec/h264.c > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=763c7533483b332bfe2064df4de43056f3935d84 --- libavcodec/h264.c | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 65e53ac..f4b19a0 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3147,6 +3147,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0) int last_pic_structure, last_pic_droppable; int must_reinit; int needs_reinit = 0; +int first_slice = h == h0 && !h0->current_slice; +PPS *pps; h->me.qpel_put = h->h264qpel.put_h264_qpel_pixels_tab; h->me.qpel_avg = h->h264qpel.avg_h264_qpel_pixels_tab; @@ -3200,17 +3202,26 @@ static int decode_slice_header(H264Context *h, H264Context *h0) pps_id); return -1; } -h->pps = *h0->pps_buffers[pps_id]; -if (!h0->sps_buffers[h->pps.sps_id]) { +pps = h0->pps_buffers[pps_id]; + +if (!h0->sps_buffers[pps->sps_id]) { av_log(h->avctx, AV_LOG_ERROR, "non-existing SPS %u referenced\n", h->pps.sps_id); return -1; } +if (first_slice) +h->pps = *h0->pps_buffers[pps_id]; + +if (pps->sps_id != h->current_sps_id || +h0->sps_buffers[pps->sps_id]->new) { -if (h->pps.sps_id != h->current_sps_id || -h0->sps_buffers[h->pps.sps_id]->new) { +if (!first_slice) { +av_log(h->avctx, AV_LOG_ERROR, + "SPS changed in the middle of the frame\n"); +return AVERROR_INVALIDDATA; +} h0->sps_buffers[h->pps.sps_id]->new = 0; h->current_sps_id = h->pps.sps_id; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avutil/opt: Fix types used to access AV_OPT_TYPE_PIXEL_FMT
ffmpeg | branch: release/1.2 | Michael Niedermayer | Fri Feb 6 22:14:15 2015 +0100| [d9618b964b179bd4f8cb55aa95e7426f914c95fe] | committer: Michael Niedermayer avutil/opt: Fix types used to access AV_OPT_TYPE_PIXEL_FMT Signed-off-by: Michael Niedermayer (cherry picked from commit a0640e63463e6428b80422c89e1bfc96147ecfc6) Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d9618b964b179bd4f8cb55aa95e7426f914c95fe --- libavutil/opt.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 5b88b28..52cc7a1 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -74,7 +74,7 @@ static int read_number(const AVOption *o, void *dst, double *num, int *den, int6 { switch (o->type) { case AV_OPT_TYPE_FLAGS: *intnum = *(unsigned int*)dst;return 0; -case AV_OPT_TYPE_PIXEL_FMT: +case AV_OPT_TYPE_PIXEL_FMT: *intnum = *(enum AVPixelFormat *)dst;return 0; case AV_OPT_TYPE_SAMPLE_FMT: case AV_OPT_TYPE_INT: *intnum = *(int *)dst;return 0; case AV_OPT_TYPE_INT64: *intnum = *(int64_t *)dst;return 0; @@ -97,8 +97,8 @@ static int write_number(void *obj, const AVOption *o, void *dst, double num, int } switch (o->type) { +case AV_OPT_TYPE_PIXEL_FMT: *(enum AVPixelFormat *)dst = llrint(num/den) * intnum; break; case AV_OPT_TYPE_FLAGS: -case AV_OPT_TYPE_PIXEL_FMT: case AV_OPT_TYPE_SAMPLE_FMT: case AV_OPT_TYPE_INT: *(int *)dst= llrint(num/den)*intnum; break; case AV_OPT_TYPE_INT64: *(int64_t *)dst= llrint(num/den)*intnum; break; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/h264_slice: Do not change frame_num after the first slice
ffmpeg | branch: release/1.2 | Michael Niedermayer | Sat Feb 7 02:06:20 2015 +0100| [64e50b2f2a6830475224b2ec03bb88ff300067f8] | committer: Michael Niedermayer avcodec/h264_slice: Do not change frame_num after the first slice Fixes potential race condition Fixes: signal_sigsegv_1472ac3_468_cov_2915641226_CABACI3_Sony_B.jsv Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer (cherry picked from commit f906982c9411f3062e3ce68013309b37c213c4dd) Signed-off-by: Michael Niedermayer Conflicts: libavcodec/h264_slice.c > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=64e50b2f2a6830475224b2ec03bb88ff300067f8 --- libavcodec/h264.c | 11 ++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index f4b19a0..dfbab66 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3148,6 +3148,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) int must_reinit; int needs_reinit = 0; int first_slice = h == h0 && !h0->current_slice; +int frame_num; PPS *pps; h->me.qpel_put = h->h264qpel.put_h264_qpel_pixels_tab; @@ -,7 +3334,15 @@ static int decode_slice_header(H264Context *h, H264Context *h0) init_dequant_tables(h); } -h->frame_num = get_bits(&h->gb, h->sps.log2_max_frame_num); +frame_num = get_bits(&h->gb, h->sps.log2_max_frame_num); +if (!first_slice) { +if (h0->frame_num != frame_num) { +av_log(h->avctx, AV_LOG_ERROR, "Frame num change from %d to %d\n", + h0->frame_num, frame_num); +return AVERROR_INVALIDDATA; +} +} +h->frame_num = frame_num; h->mb_mbaff= 0; h->mb_aff_frame= 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat/isom: add X-Com Radvision fourcc
ffmpeg | branch: master | Paul B Mahol | Wed Feb 11 09:46:20 2015 +| [ac494e5a66507c8124e8ba399b3f0685a51d7a82] | committer: Paul B Mahol avformat/isom: add X-Com Radvision fourcc Fixes bug #4303. Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ac494e5a66507c8124e8ba399b3f0685a51d7a82 --- libavformat/isom.c |1 + 1 file changed, 1 insertion(+) diff --git a/libavformat/isom.c b/libavformat/isom.c index 68ddd32..fcd696a 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -173,6 +173,7 @@ const AVCodecTag ff_codec_movvideo_tags[] = { { AV_CODEC_ID_H264, MKTAG('a', 'i', '1', '6') }, /* AVC-Intra 100M 1080i60 */ { AV_CODEC_ID_H264, MKTAG('A', 'V', 'i', 'n') }, /* AVC-Intra with implicit SPS/PPS */ { AV_CODEC_ID_H264, MKTAG('a', 'i', 'v', 'x') }, /* XAVC 4:2:2 10bit */ +{ AV_CODEC_ID_H264, MKTAG('r', 'v', '6', '4') }, /* X-Com Radvision */ { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', '1', 'v', ' ') }, { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', '1', 'v', '1') }, /* Apple MPEG-1 Camcorder */ ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avfilter/unsharp: OpenCL unsharpen filter optimization: substitute N^2 filter computation with 2N+C
ffmpeg | branch: master | Alexey Titov | Tue Feb 10 12:21:05 2015 -0800| [a05a7373166c3c1b2eed3db66e143e9d227e0354] | committer: Michael Niedermayer avfilter/unsharp: OpenCL unsharpen filter optimization: substitute N^2 filter computation with 2N+C i7-4770K luma 21% faster, chroma 18% faster A10-7850K luma 42% faster, chroma 37% faster on 1920x1080 res Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a05a7373166c3c1b2eed3db66e143e9d227e0354 --- libavfilter/unsharp.h |4 ++ libavfilter/unsharp_opencl.c| 77 +++--- libavfilter/unsharp_opencl_kernel.h | 122 +-- 3 files changed, 148 insertions(+), 55 deletions(-) diff --git a/libavfilter/unsharp.h b/libavfilter/unsharp.h index c2aed64..fc651c0 100644 --- a/libavfilter/unsharp.h +++ b/libavfilter/unsharp.h @@ -41,6 +41,10 @@ typedef struct { cl_kernel kernel_chroma; cl_mem cl_luma_mask; cl_mem cl_chroma_mask; +cl_mem cl_luma_mask_x; +cl_mem cl_chroma_mask_x; +cl_mem cl_luma_mask_y; +cl_mem cl_chroma_mask_y; int in_plane_size[8]; int out_plane_size[8]; int plane_num; diff --git a/libavfilter/unsharp_opencl.c b/libavfilter/unsharp_opencl.c index 5c6b5ef..2cc0704 100644 --- a/libavfilter/unsharp_opencl.c +++ b/libavfilter/unsharp_opencl.c @@ -87,11 +87,12 @@ end: return ret; } -static int compute_mask_matrix(cl_mem cl_mask_matrix, int step_x, int step_y) +static int copy_separable_masks(cl_mem cl_mask_x, cl_mem cl_mask_y, int step_x, int step_y) { -int i, j, ret = 0; -uint32_t *mask_matrix, *mask_x, *mask_y; -size_t size_matrix = sizeof(uint32_t) * (2 * step_x + 1) * (2 * step_y + 1); +int ret = 0; +uint32_t *mask_x, *mask_y; +size_t size_mask_x = sizeof(uint32_t) * (2 * step_x + 1); +size_t size_mask_y = sizeof(uint32_t) * (2 * step_y + 1); mask_x = av_mallocz_array(2 * step_x + 1, sizeof(uint32_t)); if (!mask_x) { ret = AVERROR(ENOMEM); @@ -102,37 +103,36 @@ static int compute_mask_matrix(cl_mem cl_mask_matrix, int step_x, int step_y) ret = AVERROR(ENOMEM); goto end; } -mask_matrix = av_mallocz(size_matrix); -if (!mask_matrix) { -ret = AVERROR(ENOMEM); -goto end; -} + ret = compute_mask(step_x, mask_x); if (ret < 0) goto end; ret = compute_mask(step_y, mask_y); if (ret < 0) goto end; -for (j = 0; j < 2 * step_y + 1; j++) { -for (i = 0; i < 2 * step_x + 1; i++) { -mask_matrix[i + j * (2 * step_x + 1)] = mask_y[j] * mask_x[i]; -} -} -ret = av_opencl_buffer_write(cl_mask_matrix, (uint8_t *)mask_matrix, size_matrix); + +ret = av_opencl_buffer_write(cl_mask_x, (uint8_t *)mask_x, size_mask_x); +ret = av_opencl_buffer_write(cl_mask_y, (uint8_t *)mask_y, size_mask_y); end: av_freep(&mask_x); av_freep(&mask_y); -av_freep(&mask_matrix); + return ret; } static int generate_mask(AVFilterContext *ctx) { -UnsharpContext *unsharp = ctx->priv; -int i, ret = 0, step_x[2], step_y[2]; +cl_mem masks[4]; cl_mem mask_matrix[2]; +int i, ret = 0, step_x[2], step_y[2]; + +UnsharpContext *unsharp = ctx->priv; mask_matrix[0] = unsharp->opencl_ctx.cl_luma_mask; mask_matrix[1] = unsharp->opencl_ctx.cl_chroma_mask; +masks[0] = unsharp->opencl_ctx.cl_luma_mask_x; +masks[1] = unsharp->opencl_ctx.cl_luma_mask_y; +masks[2] = unsharp->opencl_ctx.cl_chroma_mask_x; +masks[3] = unsharp->opencl_ctx.cl_chroma_mask_y; step_x[0] = unsharp->luma.steps_x; step_x[1] = unsharp->chroma.steps_x; step_y[0] = unsharp->luma.steps_y; @@ -144,12 +144,16 @@ static int generate_mask(AVFilterContext *ctx) else unsharp->opencl_ctx.use_fast_kernels = 1; +if (!masks[0] || !masks[1] || !masks[2] || !masks[3]) { +av_log(ctx, AV_LOG_ERROR, "Luma mask and chroma mask should not be NULL\n"); +return AVERROR(EINVAL); +} if (!mask_matrix[0] || !mask_matrix[1]) { av_log(ctx, AV_LOG_ERROR, "Luma mask and chroma mask should not be NULL\n"); return AVERROR(EINVAL); } for (i = 0; i < 2; i++) { -ret = compute_mask_matrix(mask_matrix[i], step_x[i], step_y[i]); +ret = copy_separable_masks(masks[2*i], masks[2*i+1], step_x[i], step_y[i]); if (ret < 0) return ret; } @@ -184,7 +188,8 @@ int ff_opencl_apply_unsharp(AVFilterContext *ctx, AVFrame *in, AVFrame *out) ret = avpriv_opencl_set_parameter(&kernel1, FF_OPENCL_PARAM_INFO(unsharp->opencl_ctx.cl_inbuf), FF_OPENCL_PARAM_INFO(unsharp->opencl_ctx.cl_outbuf), - FF_OPENCL_PARAM_INFO(unsharp->opencl_ctx.cl_luma_mask), + FF_OPENCL_PARAM_INFO(unsharp->
[FFmpeg-cvslog] avfilter: add dcshift filter
ffmpeg | branch: master | Paul B Mahol | Wed Jan 28 15:46:58 2015 +| [edf217ebb7d518be3030184d03b5534033e82d0f] | committer: Paul B Mahol avfilter: add dcshift filter Signed-off-by: Paul B Mahol > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=edf217ebb7d518be3030184d03b5534033e82d0f --- Changelog|1 + doc/filters.texi | 19 ++ libavfilter/Makefile |1 + libavfilter/af_dcshift.c | 164 ++ libavfilter/allfilters.c |1 + libavfilter/version.h|4 +- 6 files changed, 188 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index 49b4793..c663d5e 100644 --- a/Changelog +++ b/Changelog @@ -22,6 +22,7 @@ version : - removed libmpcodecs - Changed default DNxHD colour range in QuickTime .mov derivatives to mpeg range - ported softpulldown filter from libmpcodecs as repeatfields filter +- dcshift filter version 2.5: diff --git a/doc/filters.texi b/doc/filters.texi index 2f29c46..8069554 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -917,6 +917,7 @@ audio, the data is treated as if all the planes were concatenated. A list of Adler-32 checksums for each data plane. @end table +@anchor{astats} @section astats Display time domain statistical information about the audio channels. @@ -1394,6 +1395,24 @@ compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1 @end example @end itemize +@section dcshift +Apply a DC shift to the audio. + +This can be useful to remove a DC offset (caused perhaps by a hardware problem +in the recording chain) from the audio. The effect of a DC offset is reduced +headroom and hence volume. The @ref{astats} filter can be used to determine if +a signal has a DC offset. + +@table @option +@item shift +Set the DC shift, allowed range is [-1, 1]. It indicates the amount to shift +the audio. + +@item limitergain +Optional. It should have a value much less than 1 (e.g. 0.05 or 0.02) and is +used to prevent clipping. +@end table + @section earwax Make audio easier to listen to on headphones. diff --git a/libavfilter/Makefile b/libavfilter/Makefile index 21a3fbe..7d1ea91 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -65,6 +65,7 @@ OBJS-$(CONFIG_BS2B_FILTER) += af_bs2b.o OBJS-$(CONFIG_CHANNELMAP_FILTER) += af_channelmap.o OBJS-$(CONFIG_CHANNELSPLIT_FILTER) += af_channelsplit.o OBJS-$(CONFIG_COMPAND_FILTER)+= af_compand.o +OBJS-$(CONFIG_DCSHIFT_FILTER)+= af_dcshift.o OBJS-$(CONFIG_EARWAX_FILTER) += af_earwax.o OBJS-$(CONFIG_EBUR128_FILTER)+= f_ebur128.o OBJS-$(CONFIG_EQUALIZER_FILTER) += af_biquads.o diff --git a/libavfilter/af_dcshift.c b/libavfilter/af_dcshift.c new file mode 100644 index 000..c1abb3c --- /dev/null +++ b/libavfilter/af_dcshift.c @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2000 Chris Ausbrooks + * Copyright (c) 2000 Fabien COELHO + * + * 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/opt.h" +#include "libavutil/samplefmt.h" +#include "avfilter.h" +#include "audio.h" +#include "internal.h" + +typedef struct DCShiftContext { +const AVClass *class; +double dcshift; +double limiterthreshhold; +double limitergain; +} DCShiftContext; + +#define OFFSET(x) offsetof(DCShiftContext, x) +#define A AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM + +static const AVOption dcshift_options[] = { +{ "shift", "set DC shift", OFFSET(dcshift), AV_OPT_TYPE_DOUBLE, {.dbl=0}, -1, 1, A }, +{ "limitergain", "set limiter gain", OFFSET(limitergain), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, A }, +{ NULL } +}; + +AVFILTER_DEFINE_CLASS(dcshift); + +static av_cold int init(AVFilterContext *ctx) +{ +DCShiftContext *s = ctx->priv; + +s->limiterthreshhold = INT32_MAX * (1.0 - (fabs(s->dcshift) - s->limitergain)); + +return 0; +} + +static int query_formats(AVFilterContext *ctx) +{ +AVFilterChannelLayouts *layouts; +AVFilterFormats *formats; +static const enum AVSampleFormat sample_fmts[] = { +AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_NONE +}; + +layouts = ff_all_channel_layouts(); +if (!layou
[FFmpeg-cvslog] cmdutils: fix success path
ffmpeg | branch: master | Jean Delvare | Wed Feb 11 14:18:27 2015 +0100| [194165aed8629257b73e53ba951586ed4754cee3] | committer: Michael Niedermayer cmdutils: fix success path Since commit 934f2d2f5c16df8aad9f401a9fd842b5d9a78b11, cmdutils_read_file() prints a confusing message on success: IO error: Success This is because the error message is printed on the success path as well. Add the missing condition so that it is only printed on error. Signed-off-by: Jean Delvare Cc: Michael Niedermayer Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=194165aed8629257b73e53ba951586ed4754cee3 --- cmdutils.c |3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmdutils.c b/cmdutils.c index 6c40df9..46d0b4b 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -1912,7 +1912,8 @@ int cmdutils_read_file(const char *filename, char **bufptr, size_t *size) } out: -av_log(NULL, AV_LOG_ERROR, "IO error: %s\n", av_err2str(ret)); +if (ret < 0) +av_log(NULL, AV_LOG_ERROR, "IO error: %s\n", av_err2str(ret)); fclose(f); return ret; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mjpegenc: support trellis quantization
ffmpeg | branch: master | Michael Niedermayer | Wed Feb 11 00:47:15 2015 +0100| [7cac568b39703934b6ee62411dfe949816f7f840] | committer: Michael Niedermayer avcodec/mjpegenc: support trellis quantization Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7cac568b39703934b6ee62411dfe949816f7f840 --- libavcodec/mjpegenc.c | 36 libavcodec/mpegvideo_enc.c |6 +- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 14701e2..001833c 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -38,6 +38,35 @@ #include "mjpeg.h" #include "mjpegenc.h" +static uint8_t uni_ac_vlc_len[64 * 64 * 2]; +static uint8_t uni_chroma_ac_vlc_len[64 * 64 * 2]; + +static av_cold void init_uni_ac_vlc(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len) +{ +int i; + +for (i = 0; i < 128; i++) { +int level = i - 64; +int run; +if (!level) +continue; +for (run = 0; run < 64; run++) { +int len, code, nbits; +int alevel = FFABS(level); + +len = (run >> 4) * huff_size_ac[0xf0]; + +nbits= av_log2_16bit(alevel) + 1; +code = ((15&run) << 4) | nbits; + +len += huff_size_ac[code] + nbits; + +uni_ac_vlc_len[UNI_AC_ENC_INDEX(run, i)] = len; +// We ignore EOB as its just a constant which does not change generally +} +} +} + av_cold int ff_mjpeg_encode_init(MpegEncContext *s) { MJpegContext *m; @@ -72,6 +101,13 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) avpriv_mjpeg_bits_ac_chrominance, avpriv_mjpeg_val_ac_chrominance); +init_uni_ac_vlc(m->huff_size_ac_luminance, uni_ac_vlc_len); +init_uni_ac_vlc(m->huff_size_ac_chrominance, uni_chroma_ac_vlc_len); +s->intra_ac_vlc_length = +s->intra_ac_vlc_last_length = uni_ac_vlc_len; +s->intra_chroma_ac_vlc_length = +s->intra_chroma_ac_vlc_last_length = uni_chroma_ac_vlc_len; + s->mjpeg_ctx = m; return 0; } diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index f17c6b3..811fbe8 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -3811,8 +3811,9 @@ static int dct_quantize_trellis_c(MpegEncContext *s, start_i = 1; last_non_zero = 0; qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale]; -if(s->mpeg_quant || s->out_format == FMT_MPEG1) +if(s->mpeg_quant || s->out_format == FMT_MPEG1 || s->out_format == FMT_MJPEG) bias= 1<<(QMAT_SHIFT-1); + if (n > 3 && s->intra_chroma_ac_vlc_length) { length = s->intra_chroma_ac_vlc_length; last_length= s->intra_chroma_ac_vlc_last_length; @@ -3899,6 +3900,9 @@ static int dct_quantize_trellis_c(MpegEncContext *s, if(s->out_format == FMT_H263 || s->out_format == FMT_H261){ unquant_coeff= alevel*qmul + qadd; +} else if(s->out_format == FMT_MJPEG) { +j = s->idsp.idct_permutation[scantable[i]]; +unquant_coeff = alevel * s->intra_matrix[j] * 8; }else{ //MPEG1 j = s->idsp.idct_permutation[scantable[i]]; // FIXME: optimize if(s->mb_intra){ ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] fate: mjpeg trellis test
ffmpeg | branch: master | Michael Niedermayer | Wed Feb 11 01:28:12 2015 +0100| [7d24ccaf002b65f3073338b4dcd81e2a609fa267] | committer: Michael Niedermayer fate: mjpeg trellis test Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7d24ccaf002b65f3073338b4dcd81e2a609fa267 --- tests/fate/vcodec.mak|3 ++- tests/ref/vsynth/vsynth1-mjpeg-trell |4 tests/ref/vsynth/vsynth2-mjpeg-trell |4 tests/ref/vsynth/vsynth3-mjpeg-trell |4 tests/ref/vsynth/vsynth_lena-mjpeg-trell |4 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak index 6363117..0aba87b 100644 --- a/tests/fate/vcodec.mak +++ b/tests/fate/vcodec.mak @@ -118,10 +118,11 @@ fate-vsynth%-jpeg2000-97: DECINOPTS = -vcodec jpeg2000 FATE_VCODEC-$(call ENCDEC, LJPEG MJPEG, AVI) += ljpeg fate-vsynth%-ljpeg: ENCOPTS = -strict -1 -FATE_VCODEC-$(call ENCDEC, MJPEG, AVI) += mjpeg mjpeg-422 mjpeg-444 +FATE_VCODEC-$(call ENCDEC, MJPEG, AVI) += mjpeg mjpeg-422 mjpeg-444 mjpeg-trell fate-vsynth%-mjpeg: ENCOPTS = -qscale 9 -pix_fmt yuvj420p fate-vsynth%-mjpeg-422: ENCOPTS = -qscale 9 -pix_fmt yuvj422p fate-vsynth%-mjpeg-444: ENCOPTS = -qscale 9 -pix_fmt yuvj444p +fate-vsynth%-mjpeg-trell:ENCOPTS = -qscale 9 -pix_fmt yuvj420p -trellis 1 FATE_VCODEC-$(call ENCDEC, MPEG1VIDEO, MPEG1VIDEO MPEGVIDEO) += mpeg1 mpeg1b fate-vsynth%-mpeg1: FMT = mpeg1video diff --git a/tests/ref/vsynth/vsynth1-mjpeg-trell b/tests/ref/vsynth/vsynth1-mjpeg-trell new file mode 100644 index 000..8146677 --- /dev/null +++ b/tests/ref/vsynth/vsynth1-mjpeg-trell @@ -0,0 +1,4 @@ +9efc0311c1e7a0ae55e3117a41c40e5b *tests/data/fate/vsynth1-mjpeg-trell.avi +1454304 tests/data/fate/vsynth1-mjpeg-trell.avi +218d4dc8086fdef15d5382e6ba97df0b *tests/data/fate/vsynth1-mjpeg-trell.out.rawvideo +stddev:7.71 PSNR: 30.39 MAXDIFF: 62 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth2-mjpeg-trell b/tests/ref/vsynth/vsynth2-mjpeg-trell new file mode 100644 index 000..e94a5b6 --- /dev/null +++ b/tests/ref/vsynth/vsynth2-mjpeg-trell @@ -0,0 +1,4 @@ +ff1b7f482f6bc2eed5ffa07a8d09aedb *tests/data/fate/vsynth2-mjpeg-trell.avi +765624 tests/data/fate/vsynth2-mjpeg-trell.avi +ce145393bece26d49076b26cf1a2e52e *tests/data/fate/vsynth2-mjpeg-trell.out.rawvideo +stddev:5.03 PSNR: 34.09 MAXDIFF: 67 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth3-mjpeg-trell b/tests/ref/vsynth/vsynth3-mjpeg-trell new file mode 100644 index 000..8b46a80 --- /dev/null +++ b/tests/ref/vsynth/vsynth3-mjpeg-trell @@ -0,0 +1,4 @@ +56228a157453db7c9fd20ffcd49e3d6b *tests/data/fate/vsynth3-mjpeg-trell.avi +63990 tests/data/fate/vsynth3-mjpeg-trell.avi +4fed1e12c80df7b67df292b153c3cf16 *tests/data/fate/vsynth3-mjpeg-trell.out.rawvideo +stddev:8.27 PSNR: 29.77 MAXDIFF: 61 bytes:86700/86700 diff --git a/tests/ref/vsynth/vsynth_lena-mjpeg-trell b/tests/ref/vsynth/vsynth_lena-mjpeg-trell new file mode 100644 index 000..4d21f59 --- /dev/null +++ b/tests/ref/vsynth/vsynth_lena-mjpeg-trell @@ -0,0 +1,4 @@ +2bf49df3e74d059bfe5636c27b2eb43e *tests/data/fate/vsynth_lena-mjpeg-trell.avi +613608 tests/data/fate/vsynth_lena-mjpeg-trell.avi +ee4999fcc0913e01e69fe689b4229cbe *tests/data/fate/vsynth_lena-mjpeg-trell.out.rawvideo +stddev:4.51 PSNR: 35.03 MAXDIFF: 60 bytes: 7603200/ 7603200 ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mpegvideo_enc: Add intra_chroma_ac_vlc_length, it will be needed for mjpeg
ffmpeg | branch: master | Michael Niedermayer | Wed Feb 11 00:34:02 2015 +0100| [7366bb38f10e5955be4280e11b7dbe15d2c0edb8] | committer: Michael Niedermayer avcodec/mpegvideo_enc: Add intra_chroma_ac_vlc_length, it will be needed for mjpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7366bb38f10e5955be4280e11b7dbe15d2c0edb8 --- libavcodec/mpegvideo.h |2 ++ libavcodec/mpegvideo_enc.c | 18 ++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 81f412b..6215d23 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -443,6 +443,8 @@ typedef struct MpegEncContext { int ac_esc_length; ///< num of bits needed to encode the longest esc uint8_t *intra_ac_vlc_length; uint8_t *intra_ac_vlc_last_length; +uint8_t *intra_chroma_ac_vlc_length; +uint8_t *intra_chroma_ac_vlc_last_length; uint8_t *inter_ac_vlc_length; uint8_t *inter_ac_vlc_last_length; uint8_t *luma_dc_vlc_length; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index af75df6..f17c6b3 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -3813,8 +3813,13 @@ static int dct_quantize_trellis_c(MpegEncContext *s, qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale]; if(s->mpeg_quant || s->out_format == FMT_MPEG1) bias= 1<<(QMAT_SHIFT-1); -length = s->intra_ac_vlc_length; -last_length= s->intra_ac_vlc_last_length; +if (n > 3 && s->intra_chroma_ac_vlc_length) { +length = s->intra_chroma_ac_vlc_length; +last_length= s->intra_chroma_ac_vlc_last_length; +} else { +length = s->intra_ac_vlc_length; +last_length= s->intra_ac_vlc_last_length; +} } else { start_i = 0; last_non_zero = -1; @@ -4123,8 +4128,13 @@ static int messed_sign=0; start_i = 1; //if(s->mpeg_quant || s->out_format == FMT_MPEG1) //bias= 1<<(QMAT_SHIFT-1); -length = s->intra_ac_vlc_length; -last_length= s->intra_ac_vlc_last_length; +if (n > 3 && s->intra_chroma_ac_vlc_length) { +length = s->intra_chroma_ac_vlc_length; +last_length= s->intra_chroma_ac_vlc_last_length; +} else { +length = s->intra_ac_vlc_length; +last_length= s->intra_ac_vlc_last_length; +} } else { dc= 0; start_i = 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mpegvideo_enc: Consider chroma_intra_matrix in dct_quantize_trellis_c()
ffmpeg | branch: master | Michael Niedermayer | Wed Feb 11 23:55:30 2015 +0100| [0bcb040a2ec9138a8da2ea67170e9f738259423f] | committer: Michael Niedermayer avcodec/mpegvideo_enc: Consider chroma_intra_matrix in dct_quantize_trellis_c() Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0bcb040a2ec9138a8da2ea67170e9f738259423f --- libavcodec/mpegvideo_enc.c | 11 +++ 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 811fbe8..cb6ac28 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -3763,6 +3763,7 @@ static int dct_quantize_trellis_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow){ const int *qmat; +const uint16_t *matrix; const uint8_t *scantable= s->intra_scantable.scantable; const uint8_t *perm_scantable= s->intra_scantable.permutated; int max=0; @@ -3811,6 +3812,7 @@ static int dct_quantize_trellis_c(MpegEncContext *s, start_i = 1; last_non_zero = 0; qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale]; +matrix = n < 4 ? s->intra_matrix : s->chroma_intra_matrix; if(s->mpeg_quant || s->out_format == FMT_MPEG1 || s->out_format == FMT_MJPEG) bias= 1<<(QMAT_SHIFT-1); @@ -3825,6 +3827,7 @@ static int dct_quantize_trellis_c(MpegEncContext *s, start_i = 0; last_non_zero = -1; qmat = s->q_inter_matrix[qscale]; +matrix = s->inter_matrix; length = s->inter_ac_vlc_length; last_length= s->inter_ac_vlc_last_length; } @@ -3902,14 +3905,14 @@ static int dct_quantize_trellis_c(MpegEncContext *s, unquant_coeff= alevel*qmul + qadd; } else if(s->out_format == FMT_MJPEG) { j = s->idsp.idct_permutation[scantable[i]]; -unquant_coeff = alevel * s->intra_matrix[j] * 8; +unquant_coeff = alevel * matrix[j] * 8; }else{ //MPEG1 j = s->idsp.idct_permutation[scantable[i]]; // FIXME: optimize if(s->mb_intra){ -unquant_coeff = (int)( alevel * qscale * s->intra_matrix[j]) >> 3; +unquant_coeff = (int)( alevel * qscale * matrix[j]) >> 3; unquant_coeff = (unquant_coeff - 1) | 1; }else{ -unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) s->inter_matrix[j])) >> 4; +unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) matrix[j])) >> 4; unquant_coeff = (unquant_coeff - 1) | 1; } unquant_coeff<<= 3; @@ -4025,7 +4028,7 @@ static int dct_quantize_trellis_c(MpegEncContext *s, if(s->out_format == FMT_H263 || s->out_format == FMT_H261){ unquant_coeff= (alevel*qmul + qadd)>>3; }else{ //MPEG1 -unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) s->inter_matrix[0])) >> 4; +unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) matrix[0])) >> 4; unquant_coeff = (unquant_coeff - 1) | 1; } unquant_coeff = (unquant_coeff + 4) >> 3; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/mpegvideo_enc: correctly initialize chroma_intra_matrix for MPEG1/ 2
ffmpeg | branch: master | Michael Niedermayer | Thu Feb 12 00:18:59 2015 +0100| [98437465704ddd2145cb9b41f683a36d3cefede6] | committer: Michael Niedermayer avcodec/mpegvideo_enc: correctly initialize chroma_intra_matrix for MPEG1/2 Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=98437465704ddd2145cb9b41f683a36d3cefede6 --- libavcodec/mpegvideo_enc.c |1 + 1 file changed, 1 insertion(+) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index cb6ac28..16f88aa 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -907,6 +907,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i]; } else { /* mpeg1/2 */ +s->chroma_intra_matrix[j] = s->intra_matrix[j] = ff_mpeg1_default_intra_matrix[i]; s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i]; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] LICENSE.md: Formatting updates
ffmpeg | branch: master | Robert Xiao | Wed Feb 11 19:38:55 2015 -0500| [60bb893386d451f768c8d659c0561a84d4c1623e] | committer: Michael Niedermayer LICENSE.md: Formatting updates Put filenames and configuration options in code for clarity, and fix some list formatting. Reviewed-by: Timothy Gu Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=60bb893386d451f768c8d659c0561a84d4c1623e --- LICENSE.md | 113 ++-- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 4fbe137..42c6b9c 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,73 +1,73 @@ #FFmpeg: Most files in FFmpeg are under the GNU Lesser General Public License version 2.1 -or later (LGPL v2.1+). Read the file COPYING.LGPLv2.1 for details. Some other +or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to FFmpeg. Some optional parts of FFmpeg are licensed under the GNU General Public License -version 2 or later (GPL v2+). See the file COPYING.GPLv2 for details. None of -these parts are used by default, you have to explicitly pass --enable-gpl to +version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of +these parts are used by default, you have to explicitly pass `--enable-gpl` to configure to activate them. In this case, FFmpeg's license changes to GPL v2+. Specifically, the GPL parts of FFmpeg are: - libpostproc - optional x86 optimizations in the files - libavcodec/x86/flac_dsp_gpl.asm - libavcodec/x86/idct_mmx.c + - `libavcodec/x86/flac_dsp_gpl.asm` + - `libavcodec/x86/idct_mmx.c` - libutvideo encoding/decoding wrappers in - libavcodec/libutvideo*.cpp -- the X11 grabber in libavdevice/x11grab.c + `libavcodec/libutvideo*.cpp` +- the X11 grabber in `libavdevice/x11grab.c` - the swresample test app in - libswresample/swresample-test.c -- the texi2pod.pl tool + `libswresample/swresample-test.c` +- the `texi2pod.pl` tool - the following filters in libavfilter: -- f_ebur128.c -- vf_blackframe.c -- vf_boxblur.c -- vf_colormatrix.c -- vf_cropdetect.c -- vf_delogo.c -- vf_eq.c -- vf_fspp.c -- vf_geq.c -- vf_histeq.c -- vf_hqdn3d.c -- vf_interlace.c -- vf_kerndeint.c -- vf_mcdeint.c -- vf_mpdecimate.c -- vf_owdenoise.c -- vf_perspective.c -- vf_phase.c -- vf_pp.c -- vf_pp7.c -- vf_pullup.c -- vf_sab.c -- vf_smartblur.c -- vf_repeatfields.c -- vf_spp.c -- vf_stereo3d.c -- vf_super2xsai.c -- vf_tinterlace.c -- vf_uspp.c -- vsrc_mptestsrc.c +- `f_ebur128.c` +- `vf_blackframe.c` +- `vf_boxblur.c` +- `vf_colormatrix.c` +- `vf_cropdetect.c` +- `vf_delogo.c` +- `vf_eq.c` +- `vf_fspp.c` +- `vf_geq.c` +- `vf_histeq.c` +- `vf_hqdn3d.c` +- `vf_interlace.c` +- `vf_kerndeint.c` +- `vf_mcdeint.c` +- `vf_mpdecimate.c` +- `vf_owdenoise.c` +- `vf_perspective.c` +- `vf_phase.c` +- `vf_pp.c` +- `vf_pp7.c` +- `vf_pullup.c` +- `vf_sab.c` +- `vf_smartblur.c` +- `vf_repeatfields.c` +- `vf_spp.c` +- `vf_stereo3d.c` +- `vf_super2xsai.c` +- `vf_tinterlace.c` +- `vf_uspp.c` +- `vsrc_mptestsrc.c` Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then -the configure parameter --enable-version3 will activate this licensing option -for you. Read the file COPYING.LGPLv3 or, if you have enabled GPL parts, -COPYING.GPLv3 to learn the exact legal terms that apply in this case. +the configure parameter `--enable-version3` will activate this licensing option +for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts, +`COPYING.GPLv3` to learn the exact legal terms that apply in this case. There are a handful of files under other licensing terms, namely: -* The files libavcodec/jfdctfst.c, libavcodec/jfdctint_template.c and - libavcodec/jrevdct.c are taken from libjpeg, see the top of the files for +* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and + `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for licensing details. Specifically note that you must credit the IJG in the documentation accompanying your program if you only distribute executables. You must also indicate any changes including additions and deletions to those three files in the documentation. - tests/reference.pnm is under the expat license +* `tests/reference.pnm` is under the expat license. external libraries @@ -80,21 +80,22 @@ compatible libraries The following libraries are under GPL: -- frei0r -- libcdio -- libutvideo -- libvidstab -- libx264 -- libx265 -- libxavs -- libxvid +- frei0r +- libcdio +- libutvideo +- libvids