[FFmpeg-cvslog] avcodec/exr: preserve half-float NaN bits and add fate test
ffmpeg | branch: master | Mark Reid | Sun Nov 22 20:32:15 2020 -0800| [8d19b3c4a5176c181dc1751e08834193b549162c] | committer: Paul B Mahol avcodec/exr: preserve half-float NaN bits and add fate test Handles NaNs more like the official implementation handles them, preserving the original bits. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8d19b3c4a5176c181dc1751e08834193b549162c --- libavcodec/exr.c| 3 +-- tests/fate/image.mak| 2 ++ tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0x | 6 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libavcodec/exr.c b/libavcodec/exr.c index d233dd43fb..6e6ce4275c 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -193,8 +193,7 @@ static union av_intfloat32 exr_half2float(uint16_t hf) // half-float NaNs will be converted to a single precision NaN // half-float Infs will be converted to a single precision Inf exp = FLOAT_MAX_BIASED_EXP; -if (mantissa) -mantissa = (1 << 23) - 1;// set all bits to indicate a NaN +mantissa <<= 13; // preserve half-float NaN bits if set } else if (exp == 0x0) { // convert half-float zero/denorm to single precision value if (mantissa) { diff --git a/tests/fate/image.mak b/tests/fate/image.mak index 22072a62f1..c453f0f79c 100644 --- a/tests/fate/image.mak +++ b/tests/fate/image.mak @@ -317,6 +317,8 @@ fate-exr-rgb-scanline-half-zip-dw-outside: CMD = framecrc -i $(TARGET_SAMPLES)/e FATE_EXR += fate-exr-rgb-tile-half-zip-dw-outside fate-exr-rgb-tile-half-zip-dw-outside: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_half_zip_dw_outside.exr -pix_fmt gbrpf32le +FATE_EXR += fate-exr-rgb-scanline-zip-half-0x0-0x +fate-exr-rgb-scanline-zip-half-0x0-0x: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_zip_half_float_0x0_to_0x.exr -pix_fmt gbrpf32le FATE_EXR-$(call DEMDEC, IMAGE2, EXR) += $(FATE_EXR) diff --git a/tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0x b/tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0x new file mode 100644 index 00..b6201116fe --- /dev/null +++ b/tests/ref/fate/exr-rgb-scanline-zip-half-0x0-0x @@ -0,0 +1,6 @@ +#tb 0: 1/25 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 256x256 +#sar 0: 1/1 +0, 0, 0,1, 786432, 0x1445e411 ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/vaapi_av1: fill the remaining VAFilmGrainStructAV1 fields
ffmpeg | branch: master | James Almer | Mon Nov 30 13:55:11 2020 -0300| [0e62efad7cd6b1fa07dcb3badb6ab92957a576dc] | committer: James Almer avcodec/vaapi_av1: fill the remaining VAFilmGrainStructAV1 fields Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0e62efad7cd6b1fa07dcb3badb6ab92957a576dc --- libavcodec/vaapi_av1.c | 60 ++ 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index 2763c1e866..b76e217daa 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -115,15 +115,27 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, .temporal_update = frame_header->segmentation_temporal_update, .update_data = frame_header->segmentation_update_data, }, -.film_grain_info.film_grain_info_fields.bits = { -.apply_grain = film_grain->apply_grain, -.chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma, -.grain_scaling_minus_8= film_grain->grain_scaling_minus_8, -.ar_coeff_lag = film_grain->ar_coeff_lag, -.ar_coeff_shift_minus_6 = film_grain->ar_coeff_shift_minus_6, -.grain_scale_shift= film_grain->grain_scale_shift, -.overlap_flag = film_grain->overlap_flag, -.clip_to_restricted_range = film_grain->clip_to_restricted_range, +.film_grain_info = { +.film_grain_info_fields.bits = { +.apply_grain = film_grain->apply_grain, +.chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma, +.grain_scaling_minus_8= film_grain->grain_scaling_minus_8, +.ar_coeff_lag = film_grain->ar_coeff_lag, +.ar_coeff_shift_minus_6 = film_grain->ar_coeff_shift_minus_6, +.grain_scale_shift= film_grain->grain_scale_shift, +.overlap_flag = film_grain->overlap_flag, +.clip_to_restricted_range = film_grain->clip_to_restricted_range, +}, +.grain_seed= film_grain->grain_seed, +.num_y_points = film_grain->num_y_points, +.num_cb_points = film_grain->num_cb_points, +.num_cr_points = film_grain->num_cr_points, +.cb_mult = film_grain->cb_mult, +.cb_luma_mult = film_grain->cb_luma_mult, +.cb_offset = film_grain->cb_offset, +.cr_mult = film_grain->cr_mult, +.cr_luma_mult = film_grain->cr_luma_mult, +.cr_offset = film_grain->cr_offset, }, .pic_info_fields.bits = { .frame_type = frame_header->frame_type, @@ -203,6 +215,36 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, for (int j = 0; j < 6; j++) pic_param.wm[i - 1].wmmat[j] = s->cur_frame.gm_params[i][j]; } +if (film_grain->apply_grain) { +for (int i = 0; i < film_grain->num_y_points; i++) { +pic_param.film_grain_info.point_y_value[i] = +film_grain->point_y_value[i]; +pic_param.film_grain_info.point_y_scaling[i] = +film_grain->point_y_scaling[i]; +} +for (int i = 0; i < film_grain->num_cb_points; i++) { +pic_param.film_grain_info.point_cb_value[i] = +film_grain->point_cb_value[i]; +pic_param.film_grain_info.point_cb_scaling[i] = +film_grain->point_cb_scaling[i]; +} +for (int i = 0; i < film_grain->num_cr_points; i++) { +pic_param.film_grain_info.point_cr_value[i] = +film_grain->point_cr_value[i]; +pic_param.film_grain_info.point_cr_scaling[i] = +film_grain->point_cr_scaling[i]; +} +for (int i = 0; i < 24; i++) { +pic_param.film_grain_info.ar_coeffs_y[i] = +film_grain->ar_coeffs_y_plus_128[i] - 128; +} +for (int i = 0; i < 25; i++) { +pic_param.film_grain_info.ar_coeffs_cb[i] = +film_grain->ar_coeffs_cb_plus_128[i] - 128; +pic_param.film_grain_info.ar_coeffs_cr[i] = +film_grain->ar_coeffs_cr_plus_128[i] - 128; +} +} err = ff_vaapi_decode_make_param_buffer(avctx, pic, VAPictureParameterBufferType, &pic_param, sizeof(pic_param)); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avformat/vividas: Make len signed
ffmpeg | branch: master | Michael Niedermayer | Sun Nov 22 17:24:20 2020 +0100| [b29d351f972f801d0374ca8565cee398b8f69160] | committer: Michael Niedermayer avformat/vividas: Make len signed Fixes: out of array access Fixes: 27424/clusterfuzz-testcase-minimized-ffmpeg_dem_VIVIDAS_fuzzer-5682070692823040 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b29d351f972f801d0374ca8565cee398b8f69160 --- libavformat/vividas.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/vividas.c b/libavformat/vividas.c index 46c66bf9a0..4adc125439 100644 --- a/libavformat/vividas.c +++ b/libavformat/vividas.c @@ -389,8 +389,8 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * ffio_read_varlen(pb); // len_3 num_data = avio_r8(pb); for (j = 0; j < num_data; j++) { -uint64_t len = ffio_read_varlen(pb); -if (len > INT_MAX/2 - xd_size) { +int64_t len = ffio_read_varlen(pb); +if (len < 0 || len > INT_MAX/2 - xd_size) { return AVERROR_INVALIDDATA; } data_len[j] = len; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avformat/rpl: Check the number of streams
ffmpeg | branch: master | Michael Niedermayer | Wed Dec 9 00:49:29 2020 +0100| [0677bdb1f522d0d25b47bca3d8e09ece83083678] | committer: Michael Niedermayer avformat/rpl: Check the number of streams Fixes: out of memory access Fixes: 27787/clusterfuzz-testcase-minimized-ffmpeg_dem_RPL_fuzzer-4743666463408128.fuzz Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Reviewed-by: Paul B Mahol Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0677bdb1f522d0d25b47bca3d8e09ece83083678 --- libavformat/rpl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavformat/rpl.c b/libavformat/rpl.c index c79419d558..b98488c7b1 100644 --- a/libavformat/rpl.c +++ b/libavformat/rpl.c @@ -253,6 +253,9 @@ static int rpl_read_header(AVFormatContext *s) error |= read_line(pb, line, sizeof(line)); } +if (s->nb_streams == 0) +return AVERROR_INVALIDDATA; + rpl->frames_per_chunk = read_line_and_int(pb, &error); // video frames per chunk if (vst && rpl->frames_per_chunk > 1 && vst->codecpar->codec_tag != 124) av_log(s, AV_LOG_WARNING, ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avformat/vividas: Check sample_rate
ffmpeg | branch: master | Michael Niedermayer | Tue Nov 10 22:36:25 2020 +0100| [b1bced5433adcf5ad743d929c788b66af9efaf24] | committer: Michael Niedermayer avformat/vividas: Check sample_rate Fixes: Assertion c > 0 failed at libavutil/mathematics.c Fixes: 27001/clusterfuzz-testcase-minimized-ffmpeg_dem_VIVIDAS_fuzzer-5726041328582656 Fixes: 27453/clusterfuzz-testcase-minimized-ffmpeg_dem_VIVIDAS_fuzzer-5716060384526336 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b1bced5433adcf5ad743d929c788b66af9efaf24 --- libavformat/vividas.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavformat/vividas.c b/libavformat/vividas.c index 4adc125439..96e0631b06 100644 --- a/libavformat/vividas.c +++ b/libavformat/vividas.c @@ -373,6 +373,8 @@ static int track_header(VividasDemuxContext *viv, AVFormatContext *s, uint8_t * avio_rl16(pb); //codec_subid st->codecpar->channels = avio_rl16(pb); // channels st->codecpar->sample_rate = avio_rl32(pb); // sample_rate +if (st->codecpar->sample_rate <= 0) +return AVERROR_INVALIDDATA; avio_seek(pb, 10, SEEK_CUR); // data_1 q = avio_r8(pb); avio_seek(pb, q, SEEK_CUR); // data_2 ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avformat/matroskadec: Sanity check codec_id/track type
ffmpeg | branch: master | Michael Niedermayer | Mon Dec 7 00:37:25 2020 +0100| [7b88dd8f0cb48b46f3178d274a9117a3d2307f4e] | committer: Michael Niedermayer avformat/matroskadec: Sanity check codec_id/track type Fixes: memleak Fixes: 27766/clusterfuzz-testcase-minimized-ffmpeg_dem_MATROSKA_fuzzer-5198300814508032 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7b88dd8f0cb48b46f3178d274a9117a3d2307f4e --- libavformat/matroskadec.c | 9 + 1 file changed, 9 insertions(+) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 44db2c8358..374831baa3 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2318,6 +2318,15 @@ static int matroska_parse_tracks(AVFormatContext *s) if (!track->codec_id) continue; +if ( track->type == MATROSKA_TRACK_TYPE_AUDIO && track->codec_id[0] != 'A' +|| track->type == MATROSKA_TRACK_TYPE_VIDEO && track->codec_id[0] != 'V' +|| track->type == MATROSKA_TRACK_TYPE_SUBTITLE && track->codec_id[0] != 'D' && track->codec_id[0] != 'S' +|| track->type == MATROSKA_TRACK_TYPE_METADATA && track->codec_id[0] != 'D' && track->codec_id[0] != 'S' +) { +av_log(matroska->ctx, AV_LOG_INFO, "Inconsistent track type\n"); +continue; +} + if (track->audio.samplerate < 0 || track->audio.samplerate > INT_MAX || isnan(track->audio.samplerate)) { av_log(matroska->ctx, AV_LOG_WARNING, ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/cinepak: Mark decoder as init-threadsafe
ffmpeg | branch: master | Andreas Rheinhardt | Mon Nov 30 14:46:30 2020 +0100| [41519b29facb3727fae1744376ef79bc280c6597] | committer: Andreas Rheinhardt avcodec/cinepak: Mark decoder as init-threadsafe Reviewed-by: Tomas Härdin Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=41519b29facb3727fae1744376ef79bc280c6597 --- libavcodec/cinepak.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c index 9c5b254231..17148a3577 100644 --- a/libavcodec/cinepak.c +++ b/libavcodec/cinepak.c @@ -522,4 +522,5 @@ AVCodec ff_cinepak_decoder = { .close = cinepak_decode_end, .decode = cinepak_decode_frame, .capabilities = AV_CODEC_CAP_DR1, +.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/idcinvideo: Mark decoder as init-threadsafe
ffmpeg | branch: master | Andreas Rheinhardt | Mon Nov 30 18:24:37 2020 +0100| [bdfe51b44f01de89f794a307f0a59941bc0ec9fa] | committer: Andreas Rheinhardt avcodec/idcinvideo: Mark decoder as init-threadsafe Reviewed-by: Tomas Härdin Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bdfe51b44f01de89f794a307f0a59941bc0ec9fa --- libavcodec/idcinvideo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavcodec/idcinvideo.c b/libavcodec/idcinvideo.c index 6b2d8087ae..941a89d36d 100644 --- a/libavcodec/idcinvideo.c +++ b/libavcodec/idcinvideo.c @@ -258,4 +258,5 @@ AVCodec ff_idcin_decoder = { .decode = idcin_decode_frame, .capabilities = AV_CODEC_CAP_DR1, .defaults = idcin_defaults, +.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, }; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/snow: Use ff_thread_once() in ff_snow_common_init()
ffmpeg | branch: master | Andreas Rheinhardt | Wed Dec 2 00:10:13 2020 +0100| [6a94afbd5bf4aa3ccab12f038e8bbae7ef3973c0] | committer: Andreas Rheinhardt avcodec/snow: Use ff_thread_once() in ff_snow_common_init() ff_snow_common_init() currently initializes static data every time it is invoked; given that both the Snow encoder and decoder have the FF_CODEC_CAP_INIT_THREADSAFE flag set, this can lead to data races (and therefore undefined behaviour) even though all threads write the same values. This commit fixes this by using ff_thread_once() for the initializations. Reviewed-by: Michael Niedermayer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6a94afbd5bf4aa3ccab12f038e8bbae7ef3973c0 --- libavcodec/snow.c | 18 +- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/libavcodec/snow.c b/libavcodec/snow.c index 066efc5171..bb65a6f43f 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -21,6 +21,7 @@ #include "libavutil/intmath.h" #include "libavutil/log.h" #include "libavutil/opt.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "me_cmp.h" #include "snow_dwt.h" @@ -427,10 +428,19 @@ mca( 8, 0,8) mca( 0, 8,8) mca( 8, 8,8) +static av_cold void snow_static_init(void) +{ +for (int i = 0; i < MAX_REF_FRAMES; i++) +for (int j = 0; j < MAX_REF_FRAMES; j++) +ff_scale_mv_ref[i][j] = 256 * (i + 1) / (j + 1); +init_qexp(); +} + av_cold int ff_snow_common_init(AVCodecContext *avctx){ +static AVOnce init_static_once = AV_ONCE_INIT; SnowContext *s = avctx->priv_data; int width, height; -int i, j; +int i; s->avctx= avctx; s->max_ref_frames=1; //just make sure it's not an invalid value in case of no initial keyframe @@ -480,8 +490,6 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){ mcfh(0, 8) mcfh(8, 8) -init_qexp(); - //dec += FFMAX(s->chroma_h_shift, s->chroma_v_shift); width= s->avctx->width; @@ -495,8 +503,6 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){ return AVERROR(ENOMEM); for(i=0; ilast_picture[i] = av_frame_alloc(); if (!s->last_picture[i]) return AVERROR(ENOMEM); @@ -507,6 +513,8 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){ if (!s->mconly_picture || !s->current_picture) return AVERROR(ENOMEM); +ff_thread_once(&init_static_once, snow_static_init); + return 0; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/cinepakenc: Mark encoder as init-threadsafe
ffmpeg | branch: master | Andreas Rheinhardt | Mon Nov 30 14:44:49 2020 +0100| [f79927990db8c01dfafe26aa98aee3bea87aa9fc] | committer: Andreas Rheinhardt avcodec/cinepakenc: Mark encoder as init-threadsafe Reviewed-by: Tomas Härdin Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f79927990db8c01dfafe26aa98aee3bea87aa9fc --- libavcodec/cinepakenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/cinepakenc.c b/libavcodec/cinepakenc.c index cc125ed39e..9eaa972a9c 100644 --- a/libavcodec/cinepakenc.c +++ b/libavcodec/cinepakenc.c @@ -1189,5 +1189,5 @@ AVCodec ff_cinepak_encoder = { .close = cinepak_encode_end, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_RGB24, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }, .priv_class = &cinepak_class, -.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, +.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, }; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".