Projects
Multimedia
avidemux3
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 20
View file
avidemux3.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Fri Oct 16 2015 - joerg.lorenzen@ki.tng.de + +- update internal ffmpeg to version 2.8.1 + +------------------------------------------------------------------- Wed Sep 09 2015 - joerg.lorenzen@ki.tng.de - update internal ffmpeg to version 2.8
View file
avidemux3.spec
Changed
@@ -16,7 +16,7 @@ # -%define ffmpeg_version 2.8 +%define ffmpeg_version 2.8.1 Name: avidemux3 Summary: Graphical video editing and transcoding tool
View file
ffmpeg-2.8.tar.bz2/Changelog -> ffmpeg-2.8.1.tar.bz2/Changelog
Changed
@@ -1,6 +1,50 @@ Entries are sorted chronologically from oldest to youngest within each release, releases are sorted from youngest to oldest. +version 2.8.1: +- swscale: fix ticket #4881 +- doc: fix spelling errors +- hls: only seek if there is an offset +- asfdec: add more checks for size left in asf packet buffer +- asfdec: alloc enough space for storing name in asf_read_metadata_obj +- avcodec/pngdec: Check blend_op. +- h264_mp4toannexb: fix pps offfset fault when there are more than one sps in avcc +- avcodec/h264_mp4toannexb_bsf: Use av_freep() to free spspps_buf +- avformat/avidec: Workaround broken initial frame +- avformat/hls: fix some cases of HLS streams which require cookies +- avcodec/pngdec: reset has_trns after every decode_frame_png() +- lavf/img2dec: Fix memory leak +- avcodec/mp3: fix skipping zeros +- avformat/srtdec: make sure we probe a number +- configure: check for ID3D11VideoContext +- avformat/vobsub: compare correct packet stream IDs +- avformat/srtdec: more lenient first line probing +- avformat/srtdec: fix number check for the first character +- avcodec/mips: build fix for MSA 64bit +- avcodec/mips: build fix for MSA +- avformat/httpauth: Add space after commas in HTTP/RTSP auth header +- libavformat/hlsenc: Use of uninitialized memory unlinking old files +- avcodec/x86/sbrdsp: Fix using uninitialized upper 32bit of noise +- avcodec/ffv1dec: Fix off by 1 error in quant_table_count check +- avcodec/ffv1dec: Explicitly check read_quant_table() return value +- dnxhddata: correct weight tables +- dnxhddec: decode and use interlace mb flag +- swscale: fix ticket #4877 +- avcodec/rangecoder: Check e +- avcodec/ffv1: seperate slice_count from max_slice_count +- swscale: fix ticket 4850 +- cmdutils: Filter dst/srcw/h +- avutil/log: fix zero length gnu_printf format string warning +- lavf/webvttenc: Require webvtt file to contain exactly one WebVTT stream. +- swscale/swscale: Fix "unused variable" warning +- avcodec/mjpegdec: Fix decoding RGBA RCT LJPEG +- MAINTAINERS: add 2.8, drop 2.2 +- doc: mention libavcodec can decode Opus natively +- hevc: properly handle no_rasl_output_flag when removing pictures from the DPB +- avfilter/af_ladspa: process all channels for nb_handles > 1 +- configure: add libsoxr to swresample's pkgconfig +- lavc: Fix compilation with --disable-everything --enable-parser=mpeg4video. + version 2.8: - colorkey video filter - BFSTM/BCSTM demuxer
View file
ffmpeg-2.8.tar.bz2/MAINTAINERS -> ffmpeg-2.8.1.tar.bz2/MAINTAINERS
Changed
@@ -564,11 +564,11 @@ Releases ======== +2.8 Michael Niedermayer 2.7 Michael Niedermayer 2.6 Michael Niedermayer 2.5 Michael Niedermayer 2.4 Michael Niedermayer -2.2 Michael Niedermayer If you want to maintain an older release, please contact us
View file
ffmpeg-2.8.tar.bz2/RELEASE -> ffmpeg-2.8.1.tar.bz2/RELEASE
Changed
@@ -1,1 +1,1 @@ -2.8 +2.8.1
View file
ffmpeg-2.8.tar.bz2/VERSION -> ffmpeg-2.8.1.tar.bz2/VERSION
Changed
@@ -1,1 +1,1 @@ -2.8 +2.8.1
View file
ffmpeg-2.8.tar.bz2/cmdutils.c -> ffmpeg-2.8.1.tar.bz2/cmdutils.c
Changed
@@ -563,6 +563,12 @@ struct SwsContext *sws = sws_alloc_context(); int ret = av_opt_set(sws, opt, arg, 0); sws_freeContext(sws); + if (!strcmp(opt, "srcw") || !strcmp(opt, "srch") || + !strcmp(opt, "dstw") || !strcmp(opt, "dsth") || + !strcmp(opt, "src_format") || !strcmp(opt, "dst_format")) { + av_log(NULL, AV_LOG_ERROR, "Directly using swscale dimensions/format options is not supported, please use the -s or -pix_fmt options\n"); + return AVERROR(EINVAL); + } if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Error setting option %s.\n", opt); return ret;
View file
ffmpeg-2.8.tar.bz2/configure -> ffmpeg-2.8.1.tar.bz2/configure
Changed
@@ -2374,7 +2374,7 @@ # hardware accelerators crystalhd_deps="libcrystalhd_libcrystalhd_if_h" -d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder" +d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext" dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode" vaapi_deps="va_va_h" vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads CoreServices_CoreServices_h" @@ -5147,6 +5147,7 @@ check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 check_type "windows.h d3d11.h" "ID3D11VideoDecoder" +check_type "windows.h d3d11.h" "ID3D11VideoContext" check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602 check_type "va/va.h" "VAPictureParameterBufferHEVC" @@ -5261,7 +5262,7 @@ enabled libsmbclient && { use_pkg_config smbclient libsmbclient.h smbc_init || require smbclient libsmbclient.h smbc_init -lsmbclient; } enabled libsnappy && require snappy snappy-c.h snappy_compress -lsnappy -enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr +enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr" enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h @@ -6264,4 +6265,4 @@ pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM" pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" -pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" +pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM $LIBSOXR"
View file
ffmpeg-2.8.tar.bz2/doc/Doxyfile -> ffmpeg-2.8.1.tar.bz2/doc/Doxyfile
Changed
@@ -31,7 +31,7 @@ # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 2.8 +PROJECT_NUMBER = 2.8.1 # With the PROJECT_LOGO tag one can specify a logo or icon that is included # in the documentation. The maximum height of the logo should not exceed 55
View file
ffmpeg-2.8.tar.bz2/doc/encoders.texi -> ffmpeg-2.8.1.tar.bz2/doc/encoders.texi
Changed
@@ -1353,7 +1353,7 @@ @table @option @item format Can be set to either @code{j2k} or @code{jp2} (the default) that -allows to store non-rgb pix_fmts. +makes it possible to store non-rgb pix_fmts. @end table
View file
ffmpeg-2.8.tar.bz2/doc/filters.texi -> ffmpeg-2.8.1.tar.bz2/doc/filters.texi
Changed
@@ -1032,7 +1032,7 @@ For example full key look like this @code{lavfi.astats.1.DC_offset} or this @code{lavfi.astats.Overall.Peak_count}. -For description what each key means read bellow. +For description what each key means read below. @item reset Set number of frame after which stats are going to be recalculated. @@ -2199,7 +2199,7 @@ reduction starts. Default is 20. Range is between 0.01 and 2000. @item release -Amount of milliseconds the signal has to fall bellow the threshold before +Amount of milliseconds the signal has to fall below the threshold before reduction is decreased again. Default is 250. Range is between 0.01 and 9000. @item makeup @@ -4118,7 +4118,7 @@ @item threshold1 @item threshold2 @item threshold3 -Allows to limit the maximum change for each plane, default is 65535. +Limit the maximum change for each plane, default is 65535. If 0, plane will remain unchanged. @end table @@ -4321,7 +4321,7 @@ @item threshold1 @item threshold2 @item threshold3 -Allows to limit the maximum change for each plane, default is 65535. +Limit the maximum change for each plane, default is 65535. If 0, plane will remain unchanged. @item coordinates @@ -5206,7 +5206,7 @@ @item threshold1 @item threshold2 @item threshold3 -Allows to limit the maximum change for each plane, default is 65535. +Limit the maximum change for each plane, default is 65535. If 0, plane will remain unchanged. @item coordinates @@ -6900,7 +6900,7 @@ @item threshold1 @item threshold2 @item threshold3 -Allows to limit the maximum change for each plane, default is 65535. +Limit the maximum change for each plane, default is 65535. If 0, plane will remain unchanged. @end table @@ -9881,7 +9881,7 @@ @end example @item -Convert input video from above bellow (left eye above, right eye below) to side by side crosseye. +Convert input video from above below (left eye above, right eye below) to side by side crosseye. @example stereo3d=abl:sbsr @end example
View file
ffmpeg-2.8.tar.bz2/doc/general.texi -> ffmpeg-2.8.1.tar.bz2/doc/general.texi
Changed
@@ -983,8 +983,8 @@ @item Musepack SV8 @tab @tab X @item Nellymoser Asao @tab X @tab X @item On2 AVC (Audio for Video Codec) @tab @tab X -@item Opus @tab E @tab E - @tab supported through external library libopus +@item Opus @tab E @tab X + @tab encoding supported through external library libopus @item PCM A-law @tab X @tab X @item PCM mu-law @tab X @tab X @item PCM signed 8-bit planar @tab X @tab X
View file
ffmpeg-2.8.tar.bz2/libavcodec/Makefile -> ffmpeg-2.8.1.tar.bz2/libavcodec/Makefile
Changed
@@ -861,7 +861,7 @@ OBJS-$(CONFIG_MLP_PARSER) += mlp_parser.o mlp.o OBJS-$(CONFIG_MPEG4VIDEO_PARSER) += mpeg4video_parser.o h263.o \ mpeg4videodec.o mpeg4video.o \ - ituh263dec.o h263dec.o + ituh263dec.o h263dec.o h263data.o OBJS-$(CONFIG_PNG_PARSER) += png_parser.o OBJS-$(CONFIG_MPEGAUDIO_PARSER) += mpegaudio_parser.o \ mpegaudiodecheader.o mpegaudiodata.o
View file
ffmpeg-2.8.tar.bz2/libavcodec/dnxhddata.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/dnxhddata.c
Changed
@@ -48,7 +48,7 @@ 90, 90, 85, 79, 73, 73, 73, 73, }; -/* Used in CID 1237, 1253 */ +/* Used in CID 1237, 1253, 1259 */ static const uint8_t dnxhd_1237_luma_weight[] = { 0, 32, 33, 34, 34, 36, 37, 36, 36, 37, 38, 38, 38, 39, 41, 44, @@ -60,7 +60,7 @@ 97, 100, 104, 102, 98, 98, 99, 99, }; -/* Used in CID 1237, 1253 */ +/* Used in CID 1237, 1253, 1259 */ static const uint8_t dnxhd_1237_chroma_weight[] = { 0, 32, 36, 39, 39, 38, 39, 41, 45, 51, 57, 58, 53, 48, 47, 51, @@ -204,6 +204,7 @@ 61, 59, 59, 59, 61, 62, 62, 62, }; +/* Used in CID 1252, 1258 */ static const uint8_t dnxhd_1252_luma_weight[] = { 0, 32, 34, 35, 36, 36, 36, 37, 36, 37, 39, 40, 41, 40, 40, 40, @@ -214,6 +215,8 @@ 71, 82, 90, 90, 88, 87, 90, 95, 100, 107, 103, 97, 95, 93, 99, 99, }; + +/* Used in CID 1252, 1258 */ static const uint8_t dnxhd_1252_chroma_weight[] = { 0, 32, 35, 36, 37, 37, 38, 40, 42, 46, 49, 50, 50, 49, 49, 53, @@ -226,80 +229,36 @@ }; static const uint8_t dnxhd_1256_chroma_weight[] = { - 0, 32, 32, 32, 32, 32, 32, 33, - 32, 32, 32, 32, 32, 32, 32, 34, - 32, 32, 32, 32, 32, 32, 33, 37, - 32, 32, 32, 32, 32, 32, 36, 39, - 32, 32, 32, 32, 32, 34, 39, 44, - 32, 37, 32, 32, 35, 40, 43, 49, - 32, 33, 36, 36, 40, 43, 50, 60, - 34, 37, 39, 44, 51, 56, 61, 70, -}; - -static const uint8_t dnxhd_1258_luma_weight[] = { - 0, 32, 36, 36, 40, 40, 55, 60, - 34, 36, 37, 40, 41, 48, 57, 82, - 35, 36, 41, 41, 46, 52, 73, 82, - 37, 40, 42, 45, 50, 65, 80, 87, - 39, 41, 44, 49, 62, 78, 88, 90, - 41, 44, 49, 58, 73, 90, 95, 95, - 43, 52, 55, 68, 90, 100, 97, 93, - 52, 53, 71, 82, 107, 103, 99, 99, -}; - -static const uint8_t dnxhd_1258_chroma_weight[] = { - 0, 32, 37, 38, 49, 53, 65, 66, - 35, 37, 40, 49, 56, 64, 65, 82, - 36, 42, 50, 56, 64, 67, 73, 85, - 46, 50, 57, 63, 71, 72, 89, 87, - 49, 58, 65, 72, 78, 88, 88, 90, - 60, 64, 74, 81, 84, 90, 95, 134, - 62, 74, 77, 80, 90, 114, 129, 125, - 74, 74, 90, 100, 128, 125, 116, 116, -}; - -static const uint8_t dnxhd_1259_luma_weight[] = { - 0, 32, 36, 37, 41, 44, 54, 60, - 33, 34, 36, 39, 43, 51, 62, 78, - 34, 36, 38, 41, 49, 59, 73, 79, - 37, 38, 40, 47, 55, 66, 80, 95, - 38, 41, 46, 54, 63, 79, 93, 96, - 46, 47, 56, 64, 78, 90, 97, 98, - 49, 58, 66, 78, 89, 97, 102, 98, - 61, 65, 82, 87, 100, 104, 99, 99, -}; - -static const uint8_t dnxhd_1259_chroma_weight[] = { - 0, 32, 38, 39, 47, 51, 77, 83, - 36, 39, 41, 48, 55, 74, 85, 95, - 39, 45, 53, 58, 72, 83, 105, 89, - 51, 58, 66, 73, 82, 109, 92, 95, - 57, 75, 78, 89, 105, 95, 93, 96, - 81, 82, 99, 99, 94, 90, 97, 98, - 83, 96, 97, 93, 89, 97, 102, 98, - 90, 94, 92, 88, 100, 104, 99, 99, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 37, 32, + 32, 32, 32, 32, 33, 32, 32, 32, + 32, 32, 33, 34, 37, 36, 32, 32, + 32, 33, 34, 37, 36, 34, 35, 36, + 39, 44, 40, 40, 39, 39, 44, 43, + 43, 51, 56, 50, 49, 60, 61, 70, }; static const uint8_t dnxhd_1260_luma_weight[] = { - 0, 32, 37, 37, 40, 41, 52, 53, - 33, 36, 36, 38, 40, 48, 49, 52, - 34, 34, 37, 39, 44, 47, 49, 54, - 33, 35, 38, 40, 45, 46, 54, 51, - 34, 37, 37, 42, 44, 49, 52, 48, - 34, 34, 38, 43, 44, 51, 50, 50, - 33, 36, 41, 44, 51, 52, 50, 54, - 36, 38, 44, 47, 53, 53, 54, 54, + 0, 32, 33, 34, 36, 37, 37, 36, + 34, 33, 34, 35, 37, 38, 40, 41, + 40, 39, 38, 37, 34, 33, 34, 37, + 40, 44, 48, 52, 53, 49, 47, 45, + 42, 38, 36, 36, 38, 41, 43, 44, + 46, 49, 52, 54, 54, 49, 44, 44, + 44, 47, 51, 51, 52, 51, 48, 50, + 52, 53, 53, 50, 50, 54, 54, 54, }; static const uint8_t dnxhd_1260_chroma_weight[] = { - 0, 32, 40, 38, 42, 40, 45, 45, - 34, 42, 36, 43, 38, 46, 46, 49, - 38, 35, 43, 39, 44, 47, 47, 49, - 35, 42, 43, 42, 46, 47, 49, 52, - 38, 43, 43, 44, 50, 49, 56, 50, - 42, 43, 44, 50, 51, 57, 52, 53, - 41, 45, 46, 53, 53, 56, 53, 54, - 46, 46, 51, 49, 56, 53, 58, 58, + 0, 32, 34, 38, 42, 40, 38, 36, + 35, 35, 38, 42, 43, 43, 42, 40, + 38, 39, 43, 43, 42, 41, 43, 43, + 42, 44, 46, 45, 45, 46, 47, 46, + 44, 44, 45, 46, 46, 46, 50, 50, + 47, 47, 49, 49, 49, 49, 51, 53, + 51, 49, 53, 57, 56, 52, 50, 52, + 56, 56, 53, 53, 53, 54, 58, 58, }; /* Used in CID 1235, 1241, 1250, 1256 */ @@ -1090,14 +1049,14 @@ { 350, 390, 440, 730, 880 }, { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } }, { 1258, 960, 720, 0, 212992, 212992, 4, 8, 5, - dnxhd_1258_luma_weight, dnxhd_1258_chroma_weight, + dnxhd_1252_luma_weight, dnxhd_1252_chroma_weight, dnxhd_1237_dc_codes, dnxhd_1237_dc_bits, dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level, dnxhd_1252_ac_flags, dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run, { 42, 60, 75, 115 } }, { 1259, 1440, 1080, 0, 417792, 417792, 4, 8, 3, - dnxhd_1259_luma_weight, dnxhd_1259_chroma_weight, + dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight, dnxhd_1237_dc_codes, dnxhd_1237_dc_bits, dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level, dnxhd_1237_ac_flags,
View file
ffmpeg-2.8.tar.bz2/libavcodec/dnxhddec.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/dnxhddec.c
Changed
@@ -349,7 +349,12 @@ uint8_t *dest_y, *dest_u, *dest_v; int dct_y_offset, dct_x_offset; int qscale, i; + int interlaced_mb = 0; + if (ctx->cid_table->cid == 1260) { + interlaced_mb = get_bits1(&ctx->gb); + qscale = get_bits(&ctx->gb, 10); + } else qscale = get_bits(&ctx->gb, 11); skip_bits1(&ctx->gb); @@ -386,8 +391,12 @@ dest_u += frame->linesize[1]; dest_v += frame->linesize[2]; } + if (interlaced_mb) { + dct_linesize_luma <<= 1; + dct_linesize_chroma <<= 1; + } - dct_y_offset = dct_linesize_luma << 3; + dct_y_offset = interlaced_mb ? frame->linesize[0] : (dct_linesize_luma << 3); dct_x_offset = 8 << shift1; if (!ctx->is_444) { ctx->idsp.idct_put(dest_y, dct_linesize_luma, ctx->blocks[0]); @@ -396,7 +405,7 @@ ctx->idsp.idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, ctx->blocks[5]); if (!(ctx->avctx->flags & AV_CODEC_FLAG_GRAY)) { - dct_y_offset = dct_linesize_chroma << 3; + dct_y_offset = interlaced_mb ? frame->linesize[1] : (dct_linesize_chroma << 3); ctx->idsp.idct_put(dest_u, dct_linesize_chroma, ctx->blocks[2]); ctx->idsp.idct_put(dest_v, dct_linesize_chroma, ctx->blocks[3]); ctx->idsp.idct_put(dest_u + dct_y_offset, dct_linesize_chroma, ctx->blocks[6]); @@ -409,7 +418,7 @@ ctx->idsp.idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, ctx->blocks[7]); if (!(ctx->avctx->flags & AV_CODEC_FLAG_GRAY)) { - dct_y_offset = dct_linesize_chroma << 3; + dct_y_offset = interlaced_mb ? frame->linesize[1] : (dct_linesize_chroma << 3); ctx->idsp.idct_put(dest_u, dct_linesize_chroma, ctx->blocks[2]); ctx->idsp.idct_put(dest_u + dct_x_offset, dct_linesize_chroma, ctx->blocks[3]); ctx->idsp.idct_put(dest_u + dct_y_offset, dct_linesize_chroma, ctx->blocks[8]);
View file
ffmpeg-2.8.tar.bz2/libavcodec/ffv1.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/ffv1.c
Changed
@@ -101,7 +101,7 @@ av_cold int ff_ffv1_init_slices_state(FFV1Context *f) { int i, ret; - for (i = 0; i < f->slice_count; i++) { + for (i = 0; i < f->max_slice_count; i++) { FFV1Context *fs = f->slice_context[i]; if ((ret = ff_ffv1_init_slice_state(f, fs)) < 0) return AVERROR(ENOMEM); @@ -113,10 +113,10 @@ { int i; - f->slice_count = f->num_h_slices * f->num_v_slices; - av_assert0(f->slice_count > 0); + f->max_slice_count = f->num_h_slices * f->num_v_slices; + av_assert0(f->max_slice_count > 0); - for (i = 0; i < f->slice_count; i++) { + for (i = 0; i < f->max_slice_count; i++) { int sx = i % f->num_h_slices; int sy = i / f->num_h_slices; int sxs = f->avctx->width * sx / f->num_h_slices; @@ -210,7 +210,7 @@ ff_thread_release_buffer(avctx, &s->last_picture); av_frame_free(&s->last_picture.f); - for (j = 0; j < s->slice_count; j++) { + for (j = 0; j < s->max_slice_count; j++) { FFV1Context *fs = s->slice_context[j]; for (i = 0; i < s->plane_count; i++) { PlaneContext *p = &fs->plane[i]; @@ -224,14 +224,14 @@ av_freep(&avctx->stats_out); for (j = 0; j < s->quant_table_count; j++) { av_freep(&s->initial_states[j]); - for (i = 0; i < s->slice_count; i++) { + for (i = 0; i < s->max_slice_count; i++) { FFV1Context *sf = s->slice_context[i]; av_freep(&sf->rc_stat2[j]); } av_freep(&s->rc_stat2[j]); } - for (i = 0; i < s->slice_count; i++) + for (i = 0; i < s->max_slice_count; i++) av_freep(&s->slice_context[i]); return 0;
View file
ffmpeg-2.8.tar.bz2/libavcodec/ffv1.h -> ffmpeg-2.8.1.tar.bz2/libavcodec/ffv1.h
Changed
@@ -118,6 +118,7 @@ struct FFV1Context *slice_context[MAX_SLICES]; int slice_count; + int max_slice_count; int num_v_slices; int num_h_slices; int slice_width;
View file
ffmpeg-2.8.tar.bz2/libavcodec/ffv1dec.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/ffv1dec.c
Changed
@@ -47,8 +47,11 @@ else { int i, e, a; e = 0; - while (get_rac(c, state + 1 + FFMIN(e, 9))) // 1..10 + while (get_rac(c, state + 1 + FFMIN(e, 9))) { // 1..10 e++; + if (e > 31) + return AVERROR_INVALIDDATA; + } a = 1; for (i = e - 1; i >= 0; i--) @@ -302,7 +305,7 @@ for (i = 0; i < f->plane_count; i++) { PlaneContext * const p = &fs->plane[i]; int idx = get_symbol(c, state, 0); - if (idx > (unsigned)f->quant_table_count) { + if (idx >= (unsigned)f->quant_table_count) { av_log(f->avctx, AV_LOG_ERROR, "quant_table_index out of range\n"); return -1; } @@ -499,7 +502,10 @@ int context_count = 1; for (i = 0; i < 5; i++) { - context_count *= read_quant_table(c, quant_table[i], context_count); + int ret = read_quant_table(c, quant_table[i], context_count); + if (ret < 0) + return ret; + context_count *= ret; if (context_count > 32768U) { return AVERROR_INVALIDDATA; } @@ -775,6 +781,7 @@ av_log(f->avctx, AV_LOG_ERROR, "read_quant_table error\n"); return AVERROR_INVALIDDATA; } + f->slice_count = f->max_slice_count; } else if (f->version < 3) { f->slice_count = get_symbol(c, state, 0); } else { @@ -789,8 +796,8 @@ p -= size + trailer; } } - if (f->slice_count > (unsigned)MAX_SLICES || f->slice_count <= 0) { - av_log(f->avctx, AV_LOG_ERROR, "slice count %d is invalid\n", f->slice_count); + if (f->slice_count > (unsigned)MAX_SLICES || f->slice_count <= 0 || f->slice_count > f->max_slice_count) { + av_log(f->avctx, AV_LOG_ERROR, "slice count %d is invalid (max=%d)\n", f->slice_count, f->max_slice_count); return AVERROR_INVALIDDATA; } @@ -1016,6 +1023,7 @@ f->picture.f = NULL; f->last_picture.f = NULL; f->sample_buffer = NULL; + f->max_slice_count = 0; f->slice_count = 0; for (i = 0; i < f->quant_table_count; i++) { @@ -1091,7 +1099,7 @@ av_assert0(!fdst->sample_buffer); } - av_assert1(fdst->slice_count == fsrc->slice_count); + av_assert1(fdst->max_slice_count == fsrc->max_slice_count); ff_thread_release_buffer(dst, &fdst->picture);
View file
ffmpeg-2.8.tar.bz2/libavcodec/ffv1enc.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/ffv1enc.c
Changed
@@ -977,6 +977,7 @@ if ((ret = ff_ffv1_init_slice_contexts(s)) < 0) return ret; + s->slice_count = s->max_slice_count; if ((ret = ff_ffv1_init_slices_state(s)) < 0) return ret; @@ -986,7 +987,7 @@ if (!avctx->stats_out) return AVERROR(ENOMEM); for (i = 0; i < s->quant_table_count; i++) - for (j = 0; j < s->slice_count; j++) { + for (j = 0; j < s->max_slice_count; j++) { FFV1Context *sf = s->slice_context[j]; av_assert0(!sf->rc_stat2[i]); sf->rc_stat2[i] = av_mallocz(s->context_count[i] * @@ -1210,6 +1211,7 @@ for (i = 0; i < f->quant_table_count; i++) memset(f->rc_stat2[i], 0, f->context_count[i] * sizeof(*f->rc_stat2[i])); + av_assert0(f->slice_count == f->max_slice_count); for (j = 0; j < f->slice_count; j++) { FFV1Context *fs = f->slice_context[j]; for (i = 0; i < 256; i++) {
View file
ffmpeg-2.8.tar.bz2/libavcodec/g726.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/g726.c
Changed
@@ -32,7 +32,7 @@ /** * G.726 11bit float. - * G.726 Standard uses rather odd 11bit floating point arithmentic for + * G.726 Standard uses rather odd 11bit floating point arithmetic for * numerous occasions. It's a mystery to me why they did it this way * instead of simply using 32bit integer arithmetic. */
View file
ffmpeg-2.8.tar.bz2/libavcodec/h264_mp4toannexb_bsf.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/h264_mp4toannexb_bsf.c
Changed
@@ -122,7 +122,7 @@ if (!unit_nb && !sps_done++) { unit_nb = *extradata++; /* number of pps unit(s) */ if (unit_nb) { - ctx->pps_offset = (extradata - 1) - (avctx->extradata + 4); + ctx->pps_offset = total_size; pps_seen = 1; } } @@ -276,7 +276,7 @@ { H264BSFContext *ctx = bsfc->priv_data; if (ctx->private_spspps) - av_free(ctx->spspps_buf); + av_freep(&ctx->spspps_buf); } AVBitStreamFilter ff_h264_mp4toannexb_bsf = {
View file
ffmpeg-2.8.tar.bz2/libavcodec/hevc.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/hevc.c
Changed
@@ -809,6 +809,8 @@ s->HEVClc->tu.cu_qp_offset_cb = 0; s->HEVClc->tu.cu_qp_offset_cr = 0; + s->no_rasl_output_flag = IS_IDR(s) || IS_BLA(s) || (s->nal_unit_type == NAL_CRA_NUT && s->last_eos); + return 0; } @@ -3135,6 +3137,7 @@ s->pocTid0 = s0->pocTid0; s->max_ra = s0->max_ra; s->eos = s0->eos; + s->no_rasl_output_flag = s0->no_rasl_output_flag; s->is_nalff = s0->is_nalff; s->nal_length_size = s0->nal_length_size; @@ -3239,6 +3242,7 @@ s->enable_parallel_tiles = 0; s->picture_struct = 0; + s->eos = 1; if(avctx->active_thread_type & FF_THREAD_SLICE) s->threads_number = avctx->thread_count; @@ -3280,6 +3284,7 @@ HEVCContext *s = avctx->priv_data; ff_hevc_flush_dpb(s); s->max_ra = INT_MAX; + s->eos = 1; } #define OFFSET(x) offsetof(HEVCContext, x)
View file
ffmpeg-2.8.tar.bz2/libavcodec/hevc.h -> ffmpeg-2.8.1.tar.bz2/libavcodec/hevc.h
Changed
@@ -866,6 +866,7 @@ int bs_height; int is_decoded; + int no_rasl_output_flag; HEVCPredContext hpc; HEVCDSPContext hevcdsp;
View file
ffmpeg-2.8.tar.bz2/libavcodec/hevc_refs.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/hevc_refs.c
Changed
@@ -174,7 +174,7 @@ int min_poc = INT_MAX; int i, min_idx, ret; - if (s->sh.no_output_of_prior_pics_flag == 1) { + if (s->sh.no_output_of_prior_pics_flag == 1 && s->no_rasl_output_flag == 1) { for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { HEVCFrame *frame = &s->DPB[i]; if (!(frame->flags & HEVC_FRAME_FLAG_BUMPING) && frame->poc != s->poc &&
View file
ffmpeg-2.8.tar.bz2/libavcodec/mips/hevcpred_msa.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/mips/hevcpred_msa.c
Changed
@@ -1915,24 +1915,24 @@ v16u8 vec0; HEVCLocalContext *lc = s->HEVClc; int i; - int hshift = s->sps->hshift[c_idx]; - int vshift = s->sps->vshift[c_idx]; + int hshift = s->ps.sps->hshift[c_idx]; + int vshift = s->ps.sps->vshift[c_idx]; int size_in_luma_h = 16 << hshift; - int size_in_tbs_h = size_in_luma_h >> s->sps->log2_min_tb_size; + int size_in_tbs_h = size_in_luma_h >> s->ps.sps->log2_min_tb_size; int size_in_luma_v = 16 << vshift; - int size_in_tbs_v = size_in_luma_v >> s->sps->log2_min_tb_size; + int size_in_tbs_v = size_in_luma_v >> s->ps.sps->log2_min_tb_size; int x = x0 >> hshift; int y = y0 >> vshift; - int x_tb = (x0 >> s->sps->log2_min_tb_size) & s->sps->tb_mask; - int y_tb = (y0 >> s->sps->log2_min_tb_size) & s->sps->tb_mask; + int x_tb = (x0 >> s->ps.sps->log2_min_tb_size) & s->ps.sps->tb_mask; + int y_tb = (y0 >> s->ps.sps->log2_min_tb_size) & s->ps.sps->tb_mask; int cur_tb_addr = - s->pps->min_tb_addr_zs[(y_tb) * (s->sps->tb_mask + 2) + (x_tb)]; + s->ps.pps->min_tb_addr_zs[(y_tb) * (s->ps.sps->tb_mask + 2) + (x_tb)]; ptrdiff_t stride = s->frame->linesize[c_idx] / sizeof(uint8_t); uint8_t *src = (uint8_t *) s->frame->data[c_idx] + x + y * stride; - int min_pu_width = s->sps->min_pu_width; + int min_pu_width = s->ps.sps->min_pu_width; enum IntraPredMode mode = c_idx ? lc->tu.intra_pred_mode_c : lc->tu.intra_pred_mode; @@ -1948,41 +1948,41 @@ uint8_t *filtered_top = filtered_top_array + 1; int cand_bottom_left = lc->na.cand_bottom_left && cur_tb_addr > - s->pps->min_tb_addr_zs[((y_tb + size_in_tbs_v) & s->sps->tb_mask) * - (s->sps->tb_mask + 2) + (x_tb - 1)]; + s->ps.pps->min_tb_addr_zs[((y_tb + size_in_tbs_v) & s->ps.sps->tb_mask) * + (s->ps.sps->tb_mask + 2) + (x_tb - 1)]; int cand_left = lc->na.cand_left; int cand_up_left = lc->na.cand_up_left; int cand_up = lc->na.cand_up; int cand_up_right = lc->na.cand_up_right && cur_tb_addr > - s->pps->min_tb_addr_zs[(y_tb - 1) * (s->sps->tb_mask + 2) + - ((x_tb + size_in_tbs_h) & s->sps->tb_mask)]; + s->ps.pps->min_tb_addr_zs[(y_tb - 1) * (s->ps.sps->tb_mask + 2) + + ((x_tb + size_in_tbs_h) & s->ps.sps->tb_mask)]; int bottom_left_size = (((y0 + 2 * size_in_luma_v) > - (s->sps->height) ? (s->sps->height) : (y0 + + (s->ps.sps->height) ? (s->ps.sps->height) : (y0 + 2 * size_in_luma_v)) - (y0 + size_in_luma_v)) >> vshift; int top_right_size = (((x0 + 2 * size_in_luma_h) > - (s->sps->width) ? (s->sps->width) : (x0 + 2 * size_in_luma_h)) - + (s->ps.sps->width) ? (s->ps.sps->width) : (x0 + 2 * size_in_luma_h)) - (x0 + size_in_luma_h)) >> hshift; - if (s->pps->constrained_intra_pred_flag == 1) { - int size_in_luma_pu_v = ((size_in_luma_v) >> s->sps->log2_min_pu_size); - int size_in_luma_pu_h = ((size_in_luma_h) >> s->sps->log2_min_pu_size); - int on_pu_edge_x = !(x0 & ((1 << s->sps->log2_min_pu_size) - 1)); - int on_pu_edge_y = !(y0 & ((1 << s->sps->log2_min_pu_size) - 1)); + if (s->ps.pps->constrained_intra_pred_flag == 1) { + int size_in_luma_pu_v = ((size_in_luma_v) >> s->ps.sps->log2_min_pu_size); + int size_in_luma_pu_h = ((size_in_luma_h) >> s->ps.sps->log2_min_pu_size); + int on_pu_edge_x = !(x0 & ((1 << s->ps.sps->log2_min_pu_size) - 1)); + int on_pu_edge_y = !(y0 & ((1 << s->ps.sps->log2_min_pu_size) - 1)); if (!size_in_luma_pu_h) size_in_luma_pu_h++; if (cand_bottom_left == 1 && on_pu_edge_x) { - int x_left_pu = ((x0 - 1) >> s->sps->log2_min_pu_size); + int x_left_pu = ((x0 - 1) >> s->ps.sps->log2_min_pu_size); int y_bottom_pu = - ((y0 + size_in_luma_v) >> s->sps->log2_min_pu_size); + ((y0 + size_in_luma_v) >> s->ps.sps->log2_min_pu_size); int max = ((size_in_luma_pu_v) > - (s->sps->min_pu_height - - y_bottom_pu) ? (s->sps->min_pu_height - + (s->ps.sps->min_pu_height - + y_bottom_pu) ? (s->ps.sps->min_pu_height - y_bottom_pu) : (size_in_luma_pu_v)); cand_bottom_left = 0; for (i = 0; i < max; i += 2) @@ -1993,12 +1993,12 @@ PF_INTRA); } if (cand_left == 1 && on_pu_edge_x) { - int x_left_pu = ((x0 - 1) >> s->sps->log2_min_pu_size); - int y_left_pu = ((y0) >> s->sps->log2_min_pu_size); + int x_left_pu = ((x0 - 1) >> s->ps.sps->log2_min_pu_size); + int y_left_pu = ((y0) >> s->ps.sps->log2_min_pu_size); int max = ((size_in_luma_pu_v) > - (s->sps->min_pu_height - - y_left_pu) ? (s->sps->min_pu_height - + (s->ps.sps->min_pu_height - + y_left_pu) ? (s->ps.sps->min_pu_height - y_left_pu) : (size_in_luma_pu_v)); cand_left = 0; for (i = 0; i < max; i += 2) @@ -2009,20 +2009,20 @@ PF_INTRA); } if (cand_up_left == 1) { - int x_left_pu = ((x0 - 1) >> s->sps->log2_min_pu_size); - int y_top_pu = ((y0 - 1) >> s->sps->log2_min_pu_size); + int x_left_pu = ((x0 - 1) >> s->ps.sps->log2_min_pu_size); + int y_top_pu = ((y0 - 1) >> s->ps.sps->log2_min_pu_size); cand_up_left = (s->ref->tab_mvf[(x_left_pu) + (y_top_pu) * min_pu_width]).pred_flag == PF_INTRA; } if (cand_up == 1 && on_pu_edge_y) { - int x_top_pu = ((x0) >> s->sps->log2_min_pu_size); - int y_top_pu = ((y0 - 1) >> s->sps->log2_min_pu_size); + int x_top_pu = ((x0) >> s->ps.sps->log2_min_pu_size); + int y_top_pu = ((y0 - 1) >> s->ps.sps->log2_min_pu_size); int max = ((size_in_luma_pu_h) > - (s->sps->min_pu_width - - x_top_pu) ? (s->sps->min_pu_width - + (s->ps.sps->min_pu_width - + x_top_pu) ? (s->ps.sps->min_pu_width - x_top_pu) : (size_in_luma_pu_h)); cand_up = 0; for (i = 0; i < max; i += 2) @@ -2032,13 +2032,13 @@ min_pu_width]).pred_flag == PF_INTRA); } if (cand_up_right == 1 && on_pu_edge_y) { - int y_top_pu = ((y0 - 1) >> s->sps->log2_min_pu_size); + int y_top_pu = ((y0 - 1) >> s->ps.sps->log2_min_pu_size); int x_right_pu = - ((x0 + size_in_luma_h) >> s->sps->log2_min_pu_size); + ((x0 + size_in_luma_h) >> s->ps.sps->log2_min_pu_size); int max = ((size_in_luma_pu_h) > - (s->sps->min_pu_width - - x_right_pu) ? (s->sps->min_pu_width - + (s->ps.sps->min_pu_width - + x_right_pu) ? (s->ps.sps->min_pu_width - x_right_pu) : (size_in_luma_pu_h)); cand_up_right = 0; for (i = 0; i < max; i += 2) @@ -2093,56 +2093,56 @@ } while (0); } - if (s->pps->constrained_intra_pred_flag == 1) { + if (s->ps.pps->constrained_intra_pred_flag == 1) { if (cand_bottom_left || cand_left || cand_up_left || cand_up || cand_up_right) { int size_max_x = x0 + ((2 * 16) << hshift) < - s->sps->width ? 2 * 16 : (s->sps->width - x0) >> hshift; + s->ps.sps->width ? 2 * 16 : (s->ps.sps->width - x0) >> hshift; int size_max_y = y0 + ((2 * 16) << vshift) < - s->sps->height ? 2 * 16 : (s->sps->height - y0) >> vshift; + s->ps.sps->height ? 2 * 16 : (s->ps.sps->height - y0) >> vshift; int j = 16 + (cand_bottom_left ? bottom_left_size : 0) - 1; if (!cand_up_right) { - size_max_x = x0 + ((16) << hshift) < s->sps->width ? - 16 : (s->sps->width - x0) >> hshift; + size_max_x = x0 + ((16) << hshift) < s->ps.sps->width ? + 16 : (s->ps.sps->width - x0) >> hshift; } if (!cand_bottom_left) { - size_max_y = y0 + ((16) << vshift) < s->sps->height ? - 16 : (s->sps->height - y0) >> vshift; + size_max_y = y0 + ((16) << vshift) < s->ps.sps->height ? + 16 : (s->ps.sps->height - y0) >> vshift; } if (cand_bottom_left || cand_left || cand_up_left) { while (j > -1 && !((s->ref->tab_mvf[(((x0 + - ((-1) << hshift)) >> s->sps-> + ((-1) << hshift)) >> s->ps.sps-> log2_min_pu_size)) + (((y0 + ((j) << vshift)) - >> s->sps-> + >> s->ps.sps-> log2_min_pu_size)) * min_pu_width]).pred_flag == PF_INTRA)) j--; if (! ((s->ref->tab_mvf[(((x0 + - ((-1) << hshift)) >> s->sps-> + ((-1) << hshift)) >> s->ps.sps->
View file
ffmpeg-2.8.tar.bz2/libavcodec/mips/vp9_lpf_msa.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/mips/vp9_lpf_msa.c
Changed
@@ -259,7 +259,7 @@ mask_out = __msa_xori_b(mask_out, 0xff); \ } -void ff_loop_filter_v_4_8_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_4_8_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -288,7 +288,7 @@ } -void ff_loop_filter_v_44_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_44_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -318,7 +318,7 @@ ST_UB4(p1, p0, q0, q1, (src - 2 * pitch), pitch); } -void ff_loop_filter_v_8_8_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_8_8_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -392,7 +392,7 @@ } } -void ff_loop_filter_v_88_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_88_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -471,7 +471,7 @@ } } -void ff_loop_filter_v_84_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_84_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -542,7 +542,7 @@ } } -void ff_loop_filter_v_48_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_48_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -614,7 +614,7 @@ } } -static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *src, int32_t pitch, +static int32_t vp9_hz_lpf_t4_and_t8_16w(uint8_t *src, ptrdiff_t pitch, uint8_t *filter48, int32_t b_limit_ptr, int32_t limit_ptr, @@ -689,7 +689,7 @@ } } -static void vp9_hz_lpf_t16_16w(uint8_t *src, int32_t pitch, uint8_t *filter48) +static void vp9_hz_lpf_t16_16w(uint8_t *src, ptrdiff_t pitch, uint8_t *filter48) { v16u8 flat, flat2, filter8; v16i8 zero = { 0 }; @@ -1021,7 +1021,7 @@ } } -void ff_loop_filter_v_16_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_16_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1037,7 +1037,7 @@ } } -void ff_loop_filter_v_16_8_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_v_16_8_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1261,7 +1261,7 @@ } } -void ff_loop_filter_h_4_8_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_4_8_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1290,7 +1290,7 @@ ST4x4_UB(vec3, vec3, 0, 1, 2, 3, src, pitch); } -void ff_loop_filter_h_44_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_44_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1337,7 +1337,7 @@ ST4x8_UB(tmp4, tmp5, src, pitch); } -void ff_loop_filter_h_8_8_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_8_8_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1417,7 +1417,7 @@ } } -void ff_loop_filter_h_88_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_88_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1531,7 +1531,7 @@ } } -void ff_loop_filter_h_84_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_84_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1635,7 +1635,7 @@ } } -void ff_loop_filter_h_48_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_48_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -1912,7 +1912,7 @@ } } -static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, int32_t pitch, +static int32_t vp9_vt_lpf_t16_8w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch, uint8_t *filter48) { v16i8 zero = { 0 }; @@ -2136,7 +2136,7 @@ } } -void ff_loop_filter_h_16_8_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_16_8_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -2162,7 +2162,7 @@ } static int32_t vp9_vt_lpf_t4_and_t8_16w(uint8_t *src, uint8_t *filter48, - uint8_t *src_org, int32_t pitch, + uint8_t *src_org, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr) @@ -2246,7 +2246,7 @@ } } -static int32_t vp9_vt_lpf_t16_16w(uint8_t *src, uint8_t *src_org, int32_t pitch, +static int32_t vp9_vt_lpf_t16_16w(uint8_t *src, uint8_t *src_org, ptrdiff_t pitch, uint8_t *filter48) { v16u8 flat, flat2, filter8; @@ -2573,7 +2573,7 @@ } } -void ff_loop_filter_h_16_16_msa(uint8_t *src, int32_t pitch, +void ff_loop_filter_h_16_16_msa(uint8_t *src, ptrdiff_t pitch, int32_t b_limit_ptr, int32_t limit_ptr, int32_t thresh_ptr)
View file
ffmpeg-2.8.tar.bz2/libavcodec/mjpegdec.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/mjpegdec.c
Changed
@@ -995,7 +995,14 @@ skip_bits(&s->gb, 16); /* skip RSTn */ } } - if (s->nb_components == 4) { + if (s->rct && s->nb_components == 4) { + for (mb_x = 0; mb_x < s->mb_width; mb_x++) { + ptr[4*mb_x + 2] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2); + ptr[4*mb_x + 1] = buffer[mb_x][1] + ptr[4*mb_x + 2]; + ptr[4*mb_x + 3] = buffer[mb_x][2] + ptr[4*mb_x + 2]; + ptr[4*mb_x + 0] = buffer[mb_x][3]; + } + } else if (s->nb_components == 4) { for(i=0; i<nb_components; i++) { int c= s->comp_index[i]; if (s->bits <= 8) {
View file
ffmpeg-2.8.tar.bz2/libavcodec/mpegaudiodec_template.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/mpegaudiodec_template.c
Changed
@@ -1657,9 +1657,11 @@ uint32_t header; int ret; + int skipped = 0; while(buf_size && !*buf){ buf++; buf_size--; + skipped++; } if (buf_size < HEADER_SIZE) @@ -1714,7 +1716,7 @@ return ret; } s->frame_size = 0; - return buf_size; + return buf_size + skipped; } static void mp_flush(MPADecodeContext *ctx)
View file
ffmpeg-2.8.tar.bz2/libavcodec/pngdec.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/pngdec.c
Changed
@@ -912,6 +912,11 @@ cur_w > s->width - x_offset|| cur_h > s->height - y_offset) return AVERROR_INVALIDDATA; + if (blend_op != APNG_BLEND_OP_OVER && blend_op != APNG_BLEND_OP_SOURCE) { + av_log(avctx, AV_LOG_ERROR, "Invalid blend_op %d\n", blend_op); + return AVERROR_INVALIDDATA; + } + if (sequence_number == 0 && dispose_op == APNG_DISPOSE_OP_PREVIOUS) { // No previous frame to revert to for the first frame // Spec says to just treat it as a APNG_DISPOSE_OP_BACKGROUND @@ -1254,7 +1259,7 @@ return AVERROR_INVALIDDATA; } - s->y = s->state = 0; + s->y = s->state = s->has_trns = 0; /* init the zlib */ s->zstream.zalloc = ff_png_zalloc;
View file
ffmpeg-2.8.tar.bz2/libavcodec/snow.h -> ffmpeg-2.8.1.tar.bz2/libavcodec/snow.h
Changed
@@ -565,6 +565,8 @@ e= 0; while(get_rac(c, state+1 + FFMIN(e,9))){ //1..10 e++; + if (e > 31) + return AVERROR_INVALIDDATA; } a= 1;
View file
ffmpeg-2.8.tar.bz2/libavcodec/vaapi_hevc.c -> ffmpeg-2.8.1.tar.bz2/libavcodec/vaapi_hevc.c
Changed
@@ -205,7 +205,7 @@ pp->pps_tc_offset_div2 = h->ps.pps->tc_offset / 2; pp->log2_parallel_merge_level_minus2 = h->ps.pps->log2_parallel_merge_level - 2; - /* Diffrent chroma/luma bit depths are currently not supported by ffmpeg. */ + /* Different chroma/luma bit depths are currently not supported by ffmpeg. */ pp->bit_depth_luma_minus8 = h->ps.sps->bit_depth - 8; pp->bit_depth_chroma_minus8 = h->ps.sps->bit_depth - 8;
View file
ffmpeg-2.8.tar.bz2/libavcodec/x86/sbrdsp.asm -> ffmpeg-2.8.1.tar.bz2/libavcodec/x86/sbrdsp.asm
Changed
@@ -382,6 +382,7 @@ %else %define count m_maxq %endif + movsxdifnidn noiseq, noised dec noiseq shl count, 2 %ifdef PIC
View file
ffmpeg-2.8.tar.bz2/libavfilter/af_ladspa.c -> ffmpeg-2.8.1.tar.bz2/libavfilter/af_ladspa.c
Changed
@@ -142,7 +142,7 @@ AVFilterContext *ctx = inlink->dst; LADSPAContext *s = ctx->priv; AVFrame *out; - int i, h; + int i, h, p; if (!s->nb_outputs || (av_frame_is_writable(in) && s->nb_inputs == s->nb_outputs && @@ -159,13 +159,15 @@ for (h = 0; h < s->nb_handles; h++) { for (i = 0; i < s->nb_inputs; i++) { + p = s->nb_handles > 1 ? h : i; s->desc->connect_port(s->handles[h], s->ipmap[i], - (LADSPA_Data*)in->extended_data[i]); + (LADSPA_Data*)in->extended_data[p]); } for (i = 0; i < s->nb_outputs; i++) { + p = s->nb_handles > 1 ? h : i; s->desc->connect_port(s->handles[h], s->opmap[i], - (LADSPA_Data*)out->extended_data[i]); + (LADSPA_Data*)out->extended_data[p]); } s->desc->run(s->handles[h], in->nb_samples);
View file
ffmpeg-2.8.tar.bz2/libavfilter/x86/vf_removegrain.asm -> ffmpeg-2.8.1.tar.bz2/libavfilter/x86/vf_removegrain.asm
Changed
@@ -359,7 +359,7 @@ paddw m2, m7 ; c2 paddw m3, m6 ; c3 paddw m4, m5 ; c4 - ; As the differences (d1..d4) can only be postive, there is no need to + ; As the differences (d1..d4) can only be positive, there is no need to ; clip to zero. Also, the maximum positive value is less than 768. pminsw m1, m2 @@ -485,7 +485,7 @@ paddw m2, m7 ; c1 paddw m3, m6 ; c1 paddw m4, m5 ; c1 - ; As the differences (d1..d4) can only be postive, there is no need to + ; As the differences (d1..d4) can only be positive, there is no need to ; clip to zero. Also, the maximum positive value is less than 768. pminsw m1, m2
View file
ffmpeg-2.8.tar.bz2/libavformat/asfdec_o.c -> ffmpeg-2.8.1.tar.bz2/libavformat/asfdec_o.c
Changed
@@ -583,7 +583,7 @@ break; type = avio_rl16(pb); val_len = avio_rl32(pb); - name = av_malloc(name_len); + name = av_malloc(buflen); if (!name) return AVERROR(ENOMEM); avio_get_str16le(pb, name_len, name, @@ -1042,8 +1042,8 @@ { "Mutex Language", { 0xD6, 0xE2, 0x2A, 0x00, 0x25, 0xDA, 0x11, 0xD1, 0x90, 0x34, 0x00, 0xA0, 0xC9, 0x03, 0x49, 0xBE }, asf_read_unknown, 1 }, { "Mutex Bitrate", { 0xD6, 0xE2, 0x2A, 0x01, 0x25, 0xDA, 0x11, 0xD1, 0x90, 0x34, 0x00, 0xA0, 0xC9, 0x03, 0x49, 0xBE }, asf_read_unknown, 1 }, { "Mutex Unknown", { 0xD6, 0xE2, 0x2A, 0x02, 0x25, 0xDA, 0x11, 0xD1, 0x90, 0x34, 0x00, 0xA0, 0xC9, 0x03, 0x49, 0xBE }, asf_read_unknown, 1 }, - { "Bandwith Sharing Exclusive", { 0xAF, 0x60, 0x60, 0xAA, 0x51, 0x97, 0x11, 0xD2, 0xB6, 0xAF, 0x00, 0xC0, 0x4F, 0xD9, 0x08, 0xE9 }, asf_read_unknown, 1 }, - { "Bandwith Sharing Partial", { 0xAF, 0x60, 0x60, 0xAB, 0x51, 0x97, 0x11, 0xD2, 0xB6, 0xAF, 0x00, 0xC0, 0x4F, 0xD9, 0x08, 0xE9 }, asf_read_unknown, 1 }, + { "Bandwidth Sharing Exclusive", { 0xAF, 0x60, 0x60, 0xAA, 0x51, 0x97, 0x11, 0xD2, 0xB6, 0xAF, 0x00, 0xC0, 0x4F, 0xD9, 0x08, 0xE9 }, asf_read_unknown, 1 }, + { "Bandwidth Sharing Partial", { 0xAF, 0x60, 0x60, 0xAB, 0x51, 0x97, 0x11, 0xD2, 0xB6, 0xAF, 0x00, 0xC0, 0x4F, 0xD9, 0x08, 0xE9 }, asf_read_unknown, 1 }, { "Payload Extension System Timecode", { 0x39, 0x95, 0x95, 0xEC, 0x86, 0x67, 0x4E, 0x2D, 0x8F, 0xDB, 0x98, 0x81, 0x4C, 0xE7, 0x6C, 0x1E }, asf_read_unknown, 1 }, { "Payload Extension System File Name", { 0xE1, 0x65, 0xEC, 0x0E, 0x19, 0xED, 0x45, 0xD7, 0xB4, 0xA7, 0x25, 0xCB, 0xD1, 0xE2, 0x8E, 0x9B }, asf_read_unknown, 1 }, { "Payload Extension System Content Type", { 0xD5, 0x90, 0xDC, 0x20, 0x07, 0xBC, 0x43, 0x6C, 0x9C, 0xF7, 0xF3, 0xBB, 0xFB, 0xF1, 0xA4, 0xDC }, asf_read_unknown, 1 }, @@ -1141,7 +1141,7 @@ if (!asf_pkt->data_size) { asf_pkt->data_size = asf_pkt->size_left = avio_rl32(pb); // read media object size if (asf_pkt->data_size <= 0) - return AVERROR_EOF; + return AVERROR_INVALIDDATA; if ((ret = av_new_packet(&asf_pkt->avpkt, asf_pkt->data_size)) < 0) return ret; } else @@ -1163,7 +1163,7 @@ int ret; int skip = 0; - // if replicated lenght is 1, subpayloads are present + // if replicated length is 1, subpayloads are present if (asf->rep_data_len == 1) { asf->sub_left = 1; asf->state = READ_MULTI_SUB; @@ -1190,6 +1190,8 @@ skip = pay_len - asf_pkt->size_left; pay_len = asf_pkt->size_left; } + if (asf_pkt->size_left <= 0) + return AVERROR_INVALIDDATA; if ((ret = avio_read(pb, p, pay_len)) < 0) return ret; if (s->key && s->keylen == 20) @@ -1237,7 +1239,7 @@ return AVERROR_INVALIDDATA; } p = asf_pkt->avpkt.data + asf_pkt->data_size - asf_pkt->size_left; - if (size > asf_pkt->size_left) + if (size > asf_pkt->size_left || asf_pkt->size_left <= 0) return AVERROR_INVALIDDATA; if (asf_pkt->size_left > size) asf_pkt->size_left -= size;
View file
ffmpeg-2.8.tar.bz2/libavformat/avidec.c -> ffmpeg-2.8.1.tar.bz2/libavformat/avidec.c
Changed
@@ -1581,7 +1581,8 @@ ast = st->priv_data; if (first_packet && first_packet_pos) { - data_offset = first_packet_pos - pos; + if (avi->movi_list + 4 != pos || pos + 500 > first_packet_pos) + data_offset = first_packet_pos - pos; first_packet = 0; } pos += data_offset;
View file
ffmpeg-2.8.tar.bz2/libavformat/ffmdec.c -> ffmpeg-2.8.1.tar.bz2/libavformat/ffmdec.c
Changed
@@ -151,7 +151,7 @@ return size1 - size; } -/* ensure that acutal seeking happens between FFM_PACKET_SIZE +/* ensure that actual seeking happens between FFM_PACKET_SIZE and file_size - FFM_PACKET_SIZE */ static int64_t ffm_seek1(AVFormatContext *s, int64_t pos1) {
View file
ffmpeg-2.8.tar.bz2/libavformat/hls.c -> ffmpeg-2.8.1.tar.bz2/libavformat/hls.c
Changed
@@ -516,15 +516,11 @@ av_dict_copy(&tmp, opts, 0); av_dict_copy(&tmp, opts2, 0); - if ((ret = av_opt_set_dict(pls->input, &tmp)) < 0) - goto fail; - - if ((ret = ffurl_connect(pls->input, NULL)) < 0) { + if ((ret = ffurl_connect(pls->input, &tmp)) < 0) { ffurl_close(pls->input); pls->input = NULL; } -fail: av_dict_free(&tmp); return ret; } @@ -1047,7 +1043,7 @@ /* Seek to the requested position. If this was a HTTP request, the offset * should already be where want it to, but this allows e.g. local testing * without a HTTP server. */ - if (ret == 0 && seg->key_type == KEY_NONE) { + if (ret == 0 && seg->key_type == KEY_NONE && seg->url_offset) { int seekret = ffurl_seek(pls->input, seg->url_offset, SEEK_SET); if (seekret < 0) { av_log(pls->parent, AV_LOG_ERROR, "Unable to seek to offset %"PRId64" of HLS segment '%s'\n", seg->url_offset, seg->url);
View file
ffmpeg-2.8.tar.bz2/libavformat/hlsenc.c -> ffmpeg-2.8.1.tar.bz2/libavformat/hlsenc.c
Changed
@@ -163,12 +163,6 @@ ret = AVERROR(ENOMEM); goto fail; } - sub_path_size = strlen(dirname) + strlen(segment->sub_filename) + 1; - sub_path = av_malloc(sub_path_size); - if (!sub_path) { - ret = AVERROR(ENOMEM); - goto fail; - } av_strlcpy(path, dirname, path_size); av_strlcat(path, segment->filename, path_size); @@ -177,14 +171,23 @@ path, strerror(errno)); } - av_strlcpy(sub_path, dirname, sub_path_size); - av_strlcat(sub_path, segment->sub_filename, sub_path_size); - if (unlink(sub_path) < 0) { - av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s: %s\n", - sub_path, strerror(errno)); + if (segment->sub_filename[0] != '\0') { + sub_path_size = strlen(dirname) + strlen(segment->sub_filename) + 1; + sub_path = av_malloc(sub_path_size); + if (!sub_path) { + ret = AVERROR(ENOMEM); + goto fail; + } + + av_strlcpy(sub_path, dirname, sub_path_size); + av_strlcat(sub_path, segment->sub_filename, sub_path_size); + if (unlink(sub_path) < 0) { + av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s: %s\n", + sub_path, strerror(errno)); + } + av_free(sub_path); } av_freep(&path); - av_free(sub_path); previous_segment = segment; segment = previous_segment->next; av_free(previous_segment); @@ -310,6 +313,8 @@ if(hls->has_subtitle) av_strlcpy(en->sub_filename, av_basename(hls->vtt_avf->filename), sizeof(en->sub_filename)); + else + en->sub_filename[0] = '\0'; en->duration = duration; en->pos = pos;
View file
ffmpeg-2.8.tar.bz2/libavformat/httpauth.c -> ffmpeg-2.8.1.tar.bz2/libavformat/httpauth.c
Changed
@@ -220,21 +220,21 @@ /* TODO: Escape the quoted strings properly. */ av_strlcatf(authstr, len, "username=\"%s\"", username); - av_strlcatf(authstr, len, ",realm=\"%s\"", state->realm); - av_strlcatf(authstr, len, ",nonce=\"%s\"", digest->nonce); - av_strlcatf(authstr, len, ",uri=\"%s\"", uri); - av_strlcatf(authstr, len, ",response=\"%s\"", response); + av_strlcatf(authstr, len, ", realm=\"%s\"", state->realm); + av_strlcatf(authstr, len, ", nonce=\"%s\"", digest->nonce); + av_strlcatf(authstr, len, ", uri=\"%s\"", uri); + av_strlcatf(authstr, len, ", response=\"%s\"", response); // we are violating the RFC and use "" because all others seem to do that too. if (digest->algorithm[0]) - av_strlcatf(authstr, len, ",algorithm=\"%s\"", digest->algorithm); + av_strlcatf(authstr, len, ", algorithm=\"%s\"", digest->algorithm); if (digest->opaque[0]) - av_strlcatf(authstr, len, ",opaque=\"%s\"", digest->opaque); + av_strlcatf(authstr, len, ", opaque=\"%s\"", digest->opaque); if (digest->qop[0]) { - av_strlcatf(authstr, len, ",qop=\"%s\"", digest->qop); - av_strlcatf(authstr, len, ",cnonce=\"%s\"", cnonce); - av_strlcatf(authstr, len, ",nc=%s", nc); + av_strlcatf(authstr, len, ", qop=\"%s\"", digest->qop); + av_strlcatf(authstr, len, ", cnonce=\"%s\"", cnonce); + av_strlcatf(authstr, len, ", nc=%s", nc); } av_strlcatf(authstr, len, "\r\n");
View file
ffmpeg-2.8.tar.bz2/libavformat/img2dec.c -> ffmpeg-2.8.1.tar.bz2/libavformat/img2dec.c
Changed
@@ -444,14 +444,17 @@ } res = av_new_packet(pkt, size[0] + size[1] + size[2]); - if (res < 0) - return res; + if (res < 0) { + goto fail; + } pkt->stream_index = 0; pkt->flags |= AV_PKT_FLAG_KEY; if (s->ts_from_file) { struct stat img_stat; - if (stat(filename, &img_stat)) - return AVERROR(EIO); + if (stat(filename, &img_stat)) { + res = AVERROR(EIO); + goto fail; + } pkt->pts = (int64_t)img_stat.st_mtime; #if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC if (s->ts_from_file == 2) @@ -485,18 +488,29 @@ if (ret[0] <= 0 || ret[1] < 0 || ret[2] < 0) { av_free_packet(pkt); if (ret[0] < 0) { - return ret[0]; + res = ret[0]; } else if (ret[1] < 0) { - return ret[1]; - } else if (ret[2] < 0) - return ret[2]; - return AVERROR_EOF; + res = ret[1]; + } else if (ret[2] < 0) { + res = ret[2]; + } else { + res = AVERROR_EOF; + } + goto fail; } else { s->img_count++; s->img_number++; s->pts++; return 0; } + +fail: + if (!s->is_pipe) { + for (i = 0; i < 3; i++) { + avio_closep(&f[i]); + } + } + return res; } static int img_read_close(struct AVFormatContext* s1)
View file
ffmpeg-2.8.tar.bz2/libavformat/mov.c -> ffmpeg-2.8.1.tar.bz2/libavformat/mov.c
Changed
@@ -838,9 +838,9 @@ } /* drm blob processing */ - avio_read(pb, output, 8); // go to offset 8, absolute postion 0x251 + avio_read(pb, output, 8); // go to offset 8, absolute position 0x251 avio_read(pb, input, DRM_BLOB_SIZE); - avio_read(pb, output, 4); // go to offset 4, absolute postion 0x28d + avio_read(pb, output, 4); // go to offset 4, absolute position 0x28d avio_read(pb, file_checksum, 20); av_log(c->fc, AV_LOG_INFO, "[aax] file checksum == "); // required by external tools
View file
ffmpeg-2.8.tar.bz2/libavformat/mpeg.c -> ffmpeg-2.8.1.tar.bz2/libavformat/mpeg.c
Changed
@@ -939,7 +939,7 @@ total_read += pkt_size; /* the current chunk doesn't match the stream index (unlikely) */ - if ((startcode & 0x1f) != idx_pkt.stream_index) + if ((startcode & 0x1f) != s->streams[idx_pkt.stream_index]->id) break; ret = av_grow_packet(pkt, to_read);
View file
ffmpeg-2.8.tar.bz2/libavformat/srtdec.c -> ffmpeg-2.8.1.tar.bz2/libavformat/srtdec.c
Changed
@@ -41,15 +41,17 @@ ff_text_r8(&tr); /* Check if the first non-empty line is a number. We do not check what the - * number is because in practice it can be anything. */ + * number is because in practice it can be anything. + * Also, that number can be followed by random garbage, so we can not + * unfortunately check that we only have a number. */ if (ff_subtitles_read_line(&tr, buf, sizeof(buf)) < 0 || - strtol(buf, &pbuf, 10) < 0 || *pbuf) + strtol(buf, &pbuf, 10) < 0 || pbuf == buf) return 0; /* Check if the next line matches a SRT timestamp */ if (ff_subtitles_read_line(&tr, buf, sizeof(buf)) < 0) return 0; - if (buf[0] >= '0' && buf[1] <= '9' && strstr(buf, " --> ") + if (buf[0] >= '0' && buf[0] <= '9' && strstr(buf, " --> ") && sscanf(buf, "%*d:%*2d:%*2d%*1[,.]%*3d --> %*d:%*2d:%*2d%*1[,.]%3d", &v) == 1) return AVPROBE_SCORE_MAX;
View file
ffmpeg-2.8.tar.bz2/libavformat/webvttenc.c -> ffmpeg-2.8.1.tar.bz2/libavformat/webvttenc.c
Changed
@@ -46,8 +46,14 @@ static int webvtt_write_header(AVFormatContext *ctx) { AVStream *s = ctx->streams[0]; + AVCodecContext *avctx = ctx->streams[0]->codec; AVIOContext *pb = ctx->pb; + if (ctx->nb_streams != 1 || avctx->codec_id != AV_CODEC_ID_WEBVTT) { + av_log(ctx, AV_LOG_ERROR, "Exactly one WebVTT stream is needed.\n"); + return AVERROR(EINVAL); + } + avpriv_set_pts_info(s, 64, 1, 1000); avio_printf(pb, "WEBVTT\n");
View file
ffmpeg-2.8.tar.bz2/libavutil/log.c -> ffmpeg-2.8.1.tar.bz2/libavutil/log.c
Changed
@@ -343,7 +343,7 @@ #if CONFIG_VALGRIND_BACKTRACE if (level <= BACKTRACE_LOGLEVEL) - VALGRIND_PRINTF_BACKTRACE(""); + VALGRIND_PRINTF_BACKTRACE("%s", ""); #endif end: av_bprint_finalize(part+3, NULL);
View file
ffmpeg-2.8.tar.bz2/libswscale/slice.c -> ffmpeg-2.8.1.tar.bz2/libswscale/slice.c
Changed
@@ -144,7 +144,7 @@ return 0; } -int ff_init_slice_from_src(SwsSlice * s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH) +int ff_init_slice_from_src(SwsSlice * s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH, int relative) { int i = 0; @@ -158,30 +158,32 @@ chrY + chrH, lumY + lumH}; + const uint8_t *src_[4] = {src[0] + (relative ? 0 : start[0]) * stride[0], + src[1] + (relative ? 0 : start[1]) * stride[0], + src[2] + (relative ? 0 : start[2]) * stride[0], + src[3] + (relative ? 0 : start[3]) * stride[0]}; + s->width = srcW; for (i = 0; i < 4; ++i) { int j; - int lines = end[i]; - lines = s->plane[i].available_lines < lines ? s->plane[i].available_lines : lines; + int first = s->plane[i].sliceY; + int n = s->plane[i].available_lines; + int lines = end[i] - start[i]; + int tot_lines = end[i] - first; - if (end[i] > s->plane[i].sliceY+s->plane[i].sliceH) { - if (start[i] <= s->plane[i].sliceY+1) - s->plane[i].sliceY = FFMIN(start[i], s->plane[i].sliceY); - else - s->plane[i].sliceY = start[i]; - s->plane[i].sliceH = end[i] - s->plane[i].sliceY; + if (start[i] >= first && n >= tot_lines) { + s->plane[i].sliceH = FFMAX(tot_lines, s->plane[i].sliceH); + for (j = 0; j < lines; j+= 1) + s->plane[i].line[start[i] - first + j] = src_[i] + j * stride[i]; } else { - if (end[i] >= s->plane[i].sliceY) - s->plane[i].sliceH = s->plane[i].sliceY + s->plane[i].sliceH - start[i]; - else - s->plane[i].sliceH = end[i] - start[i]; s->plane[i].sliceY = start[i]; + lines = lines > n ? n : lines; + s->plane[i].sliceH = lines; + for (j = 0; j < lines; j+= 1) + s->plane[i].line[j] = src_[i] + j * stride[i]; } - for (j = start[i]; j < lines; j+= 1) - s->plane[i].line[j] = src[i] + (start[i] + j) * stride[i]; - } return 0;
View file
ffmpeg-2.8.tar.bz2/libswscale/swscale.c -> ffmpeg-2.8.1.tar.bz2/libswscale/swscale.c
Changed
@@ -359,6 +359,7 @@ #ifndef NEW_FILTER uint8_t *formatConvBuffer = c->formatConvBuffer; uint32_t *pal = c->pal_yuv; + int perform_gamma = c->is_internal_gamma; #endif yuv2planar1_fn yuv2plane1 = c->yuv2plane1; yuv2planarX_fn yuv2planeX = c->yuv2planeX; @@ -379,7 +380,6 @@ int chrBufIndex = c->chrBufIndex; int lastInLumBuf = c->lastInLumBuf; int lastInChrBuf = c->lastInChrBuf; - int perform_gamma = c->is_internal_gamma; #ifdef NEW_FILTER int lumStart = 0; @@ -471,22 +471,23 @@ yuv2packed1, yuv2packed2, yuv2packedX, yuv2anyX, c->use_mmx_vfilter); ff_init_slice_from_src(src_slice, (uint8_t**)src, srcStride, c->srcW, - srcSliceY, srcSliceH, chrSrcSliceY, chrSrcSliceH); + srcSliceY, srcSliceH, chrSrcSliceY, chrSrcSliceH, 1); ff_init_slice_from_src(vout_slice, (uint8_t**)dst, dstStride, c->dstW, dstY, dstH, dstY >> c->chrDstVSubSample, - FF_CEIL_RSHIFT(dstH, c->chrDstVSubSample)); - - hout_slice->plane[0].sliceY = lastInLumBuf + 1; - hout_slice->plane[1].sliceY = lastInChrBuf + 1; - hout_slice->plane[2].sliceY = lastInChrBuf + 1; - hout_slice->plane[3].sliceY = lastInLumBuf + 1; - - hout_slice->plane[0].sliceH = - hout_slice->plane[1].sliceH = - hout_slice->plane[2].sliceH = - hout_slice->plane[3].sliceH = 0; - hout_slice->width = dstW; + FF_CEIL_RSHIFT(dstH, c->chrDstVSubSample), 0); + if (srcSliceY == 0) { + hout_slice->plane[0].sliceY = lastInLumBuf + 1; + hout_slice->plane[1].sliceY = lastInChrBuf + 1; + hout_slice->plane[2].sliceY = lastInChrBuf + 1; + hout_slice->plane[3].sliceY = lastInLumBuf + 1; + + hout_slice->plane[0].sliceH = + hout_slice->plane[1].sliceH = + hout_slice->plane[2].sliceH = + hout_slice->plane[3].sliceH = 0; + hout_slice->width = dstW; + } #endif for (; dstY < dstH; dstY++) { @@ -522,8 +523,8 @@ #ifdef NEW_FILTER hasLumHoles = lastInLumBuf != firstLumSrcY - 1; if (hasLumHoles) { - hout_slice->plane[0].sliceY = lastInLumBuf + 1; - hout_slice->plane[3].sliceY = lastInLumBuf + 1; + hout_slice->plane[0].sliceY = firstLumSrcY; + hout_slice->plane[3].sliceY = firstLumSrcY; hout_slice->plane[0].sliceH = hout_slice->plane[3].sliceH = 0; } @@ -534,8 +535,8 @@ #ifdef NEW_FILTER hasChrHoles = lastInChrBuf != firstChrSrcY - 1; if (hasChrHoles) { - hout_slice->plane[1].sliceY = lastInChrBuf + 1; - hout_slice->plane[2].sliceY = lastInChrBuf + 1; + hout_slice->plane[1].sliceY = firstChrSrcY; + hout_slice->plane[2].sliceY = firstChrSrcY; hout_slice->plane[1].sliceH = hout_slice->plane[2].sliceH = 0; }
View file
ffmpeg-2.8.tar.bz2/libswscale/swscale_internal.h -> ffmpeg-2.8.1.tar.bz2/libswscale/swscale_internal.h
Changed
@@ -1012,7 +1012,8 @@ } VScalerContext; // warp input lines in the form (src + width*i + j) to slice format (line[i][j]) -int ff_init_slice_from_src(SwsSlice * s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH); +// relative=true means first line src[x][0] otherwise first line is src[x][lum/crh Y] +int ff_init_slice_from_src(SwsSlice * s, uint8_t *src[4], int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH, int relative); // Initialize scaler filter descriptor chain int ff_init_filters(SwsContext *c);
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.