[FFmpeg-cvslog] avformat/mpegts: remove decoding param from ts_packetsize option
ffmpeg | branch: master | James Almer | Mon Feb 19 11:22:21 2024 -0300| [4b8be3616dd41422eae0230967df2701a0b57714] | committer: James Almer avformat/mpegts: remove decoding param from ts_packetsize option It's a read only exported option, and not meant to be set by the user. Also, move it to MPEGTS_OPTIONS while at it to avoid duplication. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4b8be3616dd41422eae0230967df2701a0b57714 --- libavformat/mpegts.c | 9 +++-- 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index b2c7365519..836d5dd5a3 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -191,14 +191,15 @@ struct MpegTSContext { { .i64 = MAX_RESYNC_SIZE}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, \ { "ts_id", "transport stream id", \ offsetof(MpegTSContext, id), AV_OPT_TYPE_INT, \ +{ .i64 = 0 }, 0, INT_MAX, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, \ +{ "ts_packetsize", "output option carrying the raw packet size", \ +offsetof(MpegTSContext, raw_packet_size), AV_OPT_TYPE_INT, \ { .i64 = 0 }, 0, INT_MAX, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY } static const AVOption options[] = { MPEGTS_OPTIONS, {"fix_teletext_pts", "try to fix pts values of dvb teletext streams", offsetof(MpegTSContext, fix_teletext_pts), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, AV_OPT_FLAG_DECODING_PARAM }, -{"ts_packetsize", "output option carrying the raw packet size", offsetof(MpegTSContext, raw_packet_size), AV_OPT_TYPE_INT, - {.i64 = 0}, 0, 0, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, {"scan_all_pmts", "scan and combine all PMTs", offsetof(MpegTSContext, scan_all_pmts), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, AV_OPT_FLAG_DECODING_PARAM }, {"skip_unknown_pmt", "skip PMTs for programs not advertised in the PAT", offsetof(MpegTSContext, skip_unknown_pmt), AV_OPT_TYPE_BOOL, @@ -226,10 +227,6 @@ static const AVOption raw_options[] = { { "compute_pcr", "compute exact PCR for each transport stream packet", offsetof(MpegTSContext, mpeg2ts_compute_pcr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM }, -{ "ts_packetsize", "output option carrying the raw packet size", - offsetof(MpegTSContext, raw_packet_size), AV_OPT_TYPE_INT, - { .i64 = 0 }, 0, 0, - AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, { NULL }, }; ___ 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/mpegts: add a ts_id exported option
ffmpeg | branch: master | James Almer | Sun Feb 18 23:47:23 2024 -0300| [f9f56fdc3763bf0a0f0a2d12c55af7c4b9aad9a6] | committer: James Almer avformat/mpegts: add a ts_id exported option It will replace AVFormatContext.ts_id in the coming bump. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f9f56fdc3763bf0a0f0a2d12c55af7c4b9aad9a6 --- libavformat/mpegts.c | 11 +-- libavformat/version.h | 2 +- tests/ref/fate/ts-demux | 6 +++--- tests/ref/fate/ts-opus-demux | 2 +- tests/ref/fate/ts-small-demux | 2 +- tests/ref/fate/ts-timed-id3-demux | 2 +- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 1cf390e98e..b2c7365519 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -167,6 +167,8 @@ struct MpegTSContext { int merge_pmt_versions; int max_packet_size; +int id; + /**/ /* private mpegts data */ /* scan context */ @@ -184,7 +186,12 @@ struct MpegTSContext { }; #define MPEGTS_OPTIONS \ -{ "resync_size", "set size limit for looking up a new synchronization", offsetof(MpegTSContext, resync_size), AV_OPT_TYPE_INT, { .i64 = MAX_RESYNC_SIZE}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM } +{ "resync_size", "set size limit for looking up a new synchronization", \ +offsetof(MpegTSContext, resync_size), AV_OPT_TYPE_INT, \ +{ .i64 = MAX_RESYNC_SIZE}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, \ +{ "ts_id", "transport stream id", \ +offsetof(MpegTSContext, id), AV_OPT_TYPE_INT, \ +{ .i64 = 0 }, 0, INT_MAX, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY } static const AVOption options[] = { MPEGTS_OPTIONS, @@ -2554,7 +2561,7 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len if (skip_identical(h, tssf)) return; -ts->stream->ts_id = h->id; +ts->stream->ts_id = ts->id = h->id; for (;;) { sid = get16(&p, p_end); diff --git a/libavformat/version.h b/libavformat/version.h index 683184d5da..2f54f57c02 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ #include "version_major.h" #define LIBAVFORMAT_VERSION_MINOR 21 -#define LIBAVFORMAT_VERSION_MICRO 100 +#define LIBAVFORMAT_VERSION_MICRO 101 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/tests/ref/fate/ts-demux b/tests/ref/fate/ts-demux index cbf018fa8b..b01f525c38 100644 --- a/tests/ref/fate/ts-demux +++ b/tests/ref/fate/ts-demux @@ -23,7 +23,7 @@ packet|codec_type=audio|stream_index=2|pts=3912642700|pts_time=43473.807778|dts= packet|codec_type=video|stream_index=0|pts=3912686363|pts_time=43474.292922|dts=3912686363|dts_time=43474.292922|duration=1501|duration_time=0.016678|size=4944|pos=506660|flags=___|data_hash=CRC32:54a86cbb packet|codec_type=audio|stream_index=1|pts=3912644825|pts_time=43473.831389|dts=3912644825|dts_time=43473.831389|duration=2880|duration_time=0.032000|size=906|pos=474888|flags=K__|data_hash=CRC32:0893d398 packet|codec_type=audio|stream_index=2|pts=3912645580|pts_time=43473.839778|dts=3912645580|dts_time=43473.839778|duration=2880|duration_time=0.032000|size=354|pos=491808|flags=K__|data_hash=CRC32:f5963fa6 -stream|index=0|codec_name=mpeg2video|profile=4|codec_type=video|codec_tag_string=[2][0][0][0]|codec_tag=0x0002|width=1280|height=720|coded_width=0|coded_height=0|closed_captions=0|film_grain=0|has_b_frames=1|sample_aspect_ratio=1:1|display_aspect_ratio=16:9|pix_fmt=yuv420p|level=4|color_range=tv|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|refs=1|ts_packetsize=188|id=0x31|r_frame_rate=6/1001|avg_frame_rate=6/1001|time_base=1/9|start_pts=3912669846|start_time=43474.109400|duration_ts=19519|duration=0.216878|bit_rate=1500|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=15|extradata_size=150|extradata_hash=CRC32:53134fa8|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposit ion:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|side_datum/cpb_properties:side_data_type=CPB properties|side_datum/cpb_properties:max_bitrate=1500|side_datum/cpb_properties:min_bitrate=0|side_datum/cpb_properties:avg_bitrate=0|side_datum/cpb_properties:buffer_size=9781248|side_datum/cpb_properti
[FFmpeg-cvslog] {avcodec,tests}: rename the bundled Mesa AV1 vulkan video headers
ffmpeg | branch: release/6.1 | Jan Ekström | Wed Feb 14 22:40:54 2024 +0200| [fef22c87ada4517441701e6e61e062c9f4399c8e] | committer: Jan Ekström {avcodec,tests}: rename the bundled Mesa AV1 vulkan video headers This together with adjusting the inclusion define allows for the build to not fail with latest Vulkan-Headers that contain the stabilized Vulkan AV1 decoding definitions. Compilation fails currently as the AV1 header is getting included via hwcontext_vulkan.h -> -> vulkan_core.h, which finally includes vk_video/vulkan_video_codec_av1std.h and the decode header, leading to the bundled header to never defining anything due to the inclusion define being the same. This fix is imperfect, as it leads to additional re-definition warnings for things such as VK_STD_VULKAN_VIDEO_CODEC_AV1_DECODE_SPEC_VERSION. , but it is not clear how to otherwise have the bundled version trump the actually standardized one for a short-term compilation fix. (cherry picked from commit e06ce6d2b45edac4a2df04f304e18d4727417d24) > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fef22c87ada4517441701e6e61e062c9f4399c8e --- libavcodec/Makefile | 4 ++-- libavcodec/vulkan_video.h | 4 ++-- ..._codec_av1std_decode.h => vulkan_video_codec_av1std_decode_mesa.h} | 4 ++-- .../{vulkan_video_codec_av1std.h => vulkan_video_codec_av1std_mesa.h} | 4 ++-- tests/ref/fate/source | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index ec57e53e30..eb25707ef5 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -1284,7 +1284,7 @@ SKIPHEADERS+= %_tablegen.h \ aacenc_quantization.h \ aacenc_quantization_misc.h\ bitstream_template.h \ - vulkan_video_codec_av1std.h \ + vulkan_video_codec_av1std_mesa.h \ $(ARCH)/vpx_arith.h \ SKIPHEADERS-$(CONFIG_AMF) += amfenc.h @@ -1306,7 +1306,7 @@ SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h SKIPHEADERS-$(CONFIG_VAAPI)+= vaapi_decode.h vaapi_hevc.h vaapi_encode.h SKIPHEADERS-$(CONFIG_VDPAU)+= vdpau.h vdpau_internal.h SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.h vt_internal.h -SKIPHEADERS-$(CONFIG_VULKAN) += vulkan.h vulkan_video.h vulkan_decode.h vulkan_video_codec_av1std_decode.h +SKIPHEADERS-$(CONFIG_VULKAN) += vulkan.h vulkan_video.h vulkan_decode.h vulkan_video_codec_av1std_decode_mesa.h SKIPHEADERS-$(CONFIG_V4L2_M2M) += v4l2_buffers.h v4l2_context.h v4l2_m2m.h SKIPHEADERS-$(CONFIG_ZLIB) += zlib_wrapper.h diff --git a/libavcodec/vulkan_video.h b/libavcodec/vulkan_video.h index b28e3fe0bd..51f44dd543 100644 --- a/libavcodec/vulkan_video.h +++ b/libavcodec/vulkan_video.h @@ -23,8 +23,8 @@ #include "vulkan.h" #include -#include "vulkan_video_codec_av1std.h" -#include "vulkan_video_codec_av1std_decode.h" +#include "vulkan_video_codec_av1std_mesa.h" +#include "vulkan_video_codec_av1std_decode_mesa.h" #define CODEC_VER_MAJ(ver) (ver >> 22) #define CODEC_VER_MIN(ver) ((ver >> 12) & ((1 << 10) - 1)) diff --git a/libavcodec/vulkan_video_codec_av1std_decode.h b/libavcodec/vulkan_video_codec_av1std_decode_mesa.h similarity index 89% rename from libavcodec/vulkan_video_codec_av1std_decode.h rename to libavcodec/vulkan_video_codec_av1std_decode_mesa.h index a697c00593..e2f37b4e6e 100644 --- a/libavcodec/vulkan_video_codec_av1std_decode.h +++ b/libavcodec/vulkan_video_codec_av1std_decode_mesa.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ -#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1 +#ifndef VULKAN_VIDEO_CODEC_AV1STD_DECODE_MESA_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_DECODE_MESA_H_ 1 /* ** This header is NOT YET generated from the Khronos Vulkan XML API Registry. diff --git a/libavcodec/vulkan_video_codec_av1std.h b/libavcodec/vulkan_video_codec_av1std_mesa.h similarity index 99% rename from libavcodec/vulkan_video_codec_av1std.h rename to libavcodec/vulkan_video_codec_av1std_mesa.h index c46236c457..c91589eee2 100644 --- a/libavcodec/vulkan_video_codec_av1std.h +++ b/libavcodec/vulkan_video_codec_av1std_mesa.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef VULKAN_VIDEO_CODEC_AV1STD_H_ -#define VULKAN_VIDEO_CODEC_AV1STD_H_ 1 +#ifndef VULKAN_VIDEO_CODEC_AV1STD_MESA_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_MESA_H_ 1 /* ** This header is NOT YET generated from the Khronos Vulkan XML API Registry. diff --git a/tests/ref/fate/source b/tests/ref/fate/source index c57
[FFmpeg-cvslog] fate: use an even more exotic channel layout mov-mp4-pcm-float test
ffmpeg | branch: master | Marton Balint | Sun Feb 18 11:37:56 2024 +0100| [86410e55adaf3cd9016863d83aaa4b5c43fb0d30] | committer: Marton Balint fate: use an even more exotic channel layout mov-mp4-pcm-float test The old layout happened to be a native layout and therefore missed some recently fixed layout parsing bugs. Signed-off-by: Marton Balint > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=86410e55adaf3cd9016863d83aaa4b5c43fb0d30 --- tests/fate/mov.mak | 2 +- tests/ref/fate/mov-mp4-pcm-float | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index 4850c8aa94..8d154c8b5b 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -187,7 +187,7 @@ fate-mov-mp4-pcm: CMD = transcode wav $(TARGET_PATH)/tests/data/asynth-44100-1.w FATE_MOV_FFMPEG-$(call TRANSCODE, PCM_S16LE, MOV, WAV_DEMUXER PAN_FILTER) \ += fate-mov-mp4-pcm-float fate-mov-mp4-pcm-float: tests/data/asynth-44100-1.wav -fate-mov-mp4-pcm-float: CMD = transcode wav $(TARGET_PATH)/tests/data/asynth-44100-1.wav mp4 "-af aresample,pan=FL+LFE+BR|c0=c0|c1=c0|c2=c0 -c:a pcm_f32le" "-map 0 -c copy -frames:a 0" +fate-mov-mp4-pcm-float: CMD = transcode wav $(TARGET_PATH)/tests/data/asynth-44100-1.wav mp4 "-af aresample,pan=FR+FL+FR|c0=c0|c1=c0|c2=c0 -c:a pcm_f32le" "-map 0 -c copy -frames:a 0" fate-mov-pcm-remux: tests/data/asynth-44100-1.wav fate-mov-pcm-remux: CMD = md5 -i $(TARGET_PATH)/tests/data/asynth-44100-1.wav -map 0 -c copy -fflags +bitexact -f mp4 diff --git a/tests/ref/fate/mov-mp4-pcm-float b/tests/ref/fate/mov-mp4-pcm-float index 851b79090c..7da8fd2aba 100644 --- a/tests/ref/fate/mov-mp4-pcm-float +++ b/tests/ref/fate/mov-mp4-pcm-float @@ -1,7 +1,7 @@ -691a76a847e0f3720c09cca341971f19 *tests/data/fate/mov-mp4-pcm-float.mp4 +7b998e652d5b7154e646a98bd2bf28a1 *tests/data/fate/mov-mp4-pcm-float.mp4 3175929 tests/data/fate/mov-mp4-pcm-float.mp4 #tb 0: 1/44100 #media_type 0: audio #codec_id 0: pcm_f32le #sample_rate 0: 44100 -#channel_layout_name 0: 3 channels (FL+LFE+BR) +#channel_layout_name 0: 3 channels (FR+FL+FR) ___ 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/iamf_writer: Remove nonsense check
ffmpeg | branch: master | Andreas Rheinhardt | Mon Feb 19 19:13:11 2024 +0100| [840f192540ccf261561cf3ccedf8a8b91421f66b] | committer: Andreas Rheinhardt avformat/iamf_writer: Remove nonsense check Checking whether a pointer to an element of an array is NULL makes no sense, as the pointer addition involved in getting the address would be undefined behaviour already if the array were NULL. In this case the array allocation has already been checked a few lines before. Fixes Coverity issue #1559548. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=840f192540ccf261561cf3ccedf8a8b91421f66b --- libavformat/iamf_writer.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 897b06310f..e0c47b5e9d 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -251,8 +251,6 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void int nb_channels = iamf_audio_element->layers[i]->ch_layout.nb_channels; IAMFLayer *layer = &audio_element->layers[i]; -if (!layer) -return AVERROR(ENOMEM); memset(layer, 0, sizeof(*layer)); if (i) ___ 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/iamf_writer: Don't leak on error when adding ParamDefinition
ffmpeg | branch: master | Andreas Rheinhardt | Mon Feb 19 19:10:09 2024 +0100| [94fadd335bd1405b6fad7c8d0a249c78bd475ff9] | committer: Andreas Rheinhardt avformat/iamf_writer: Don't leak on error when adding ParamDefinition Fix this by postponing the allocation. Fixes Coverity issue #1559545. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=94fadd335bd1405b6fad7c8d0a249c78bd475ff9 --- libavformat/iamf_writer.c | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 1a360dee2f..897b06310f 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -138,10 +138,6 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD iamf->param_definitions = tmp; -param_definition = av_mallocz(sizeof(*param_definition)); -if (!param_definition) -return NULL; - if (audio_element) codec_config = iamf->codec_configs[audio_element->codec_config_id]; @@ -160,6 +156,10 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD param->constant_subblock_duration = codec_config->nb_samples; } +param_definition = av_mallocz(sizeof(*param_definition)); +if (!param_definition) +return NULL; + param_definition->mode = !!param->duration; param_definition->param = param; param_definition->audio_element = audio_element; ___ 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/iamf_writer: Don't memset twice
ffmpeg | branch: master | Andreas Rheinhardt | Mon Feb 19 19:21:05 2024 +0100| [e7c33c92d1eb04669553a89f8e69c64d4d77d9f4] | committer: Andreas Rheinhardt avformat/iamf_writer: Don't memset twice This has been allocated via av_calloc() a few lines above. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e7c33c92d1eb04669553a89f8e69c64d4d77d9f4 --- libavformat/iamf_writer.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index e0c47b5e9d..9a665dc002 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -251,7 +251,6 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void int nb_channels = iamf_audio_element->layers[i]->ch_layout.nb_channels; IAMFLayer *layer = &audio_element->layers[i]; -memset(layer, 0, sizeof(*layer)); if (i) nb_channels -= iamf_audio_element->layers[i - 1]->ch_layout.nb_channels; ___ 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/iamf_writer: Return proper error codes
ffmpeg | branch: master | Andreas Rheinhardt | Mon Feb 19 23:08:05 2024 +0100| [c5845afd095393a48967df97adf192cf155acc82] | committer: Andreas Rheinhardt avformat/iamf_writer: Return proper error codes Surprisingly the return value of add_param_definition() (a pointer) has only been used to check for success and not to actually access the pointee; nonsuccess was equated with ENOMEM, although there is a non-enomem error path in this function. Change this by returning an int. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c5845afd095393a48967df97adf192cf155acc82 --- libavformat/iamf_writer.c | 37 +++-- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index e8a88b44c3..b12c7e77f9 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -125,8 +125,8 @@ fail: return ret; } -static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param, - const IAMFAudioElement *audio_element, void *log_ctx) +static int add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param, +const IAMFAudioElement *audio_element, void *log_ctx) { IAMFParamDefinition **tmp, *param_definition; IAMFCodecConfig *codec_config = NULL; @@ -134,7 +134,7 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD tmp = av_realloc_array(iamf->param_definitions, iamf->nb_param_definitions + 1, sizeof(*iamf->param_definitions)); if (!tmp) -return NULL; +return AVERROR(ENOMEM); iamf->param_definitions = tmp; @@ -145,7 +145,7 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD if (!codec_config) { av_log(log_ctx, AV_LOG_ERROR, "parameter_rate needed but not set for parameter_id %u\n", param->parameter_id); -return NULL; +return AVERROR(EINVAL); } param->parameter_rate = codec_config->sample_rate; } @@ -158,14 +158,14 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD param_definition = av_mallocz(sizeof(*param_definition)); if (!param_definition) -return NULL; +return AVERROR(ENOMEM); param_definition->mode = !!param->duration; param_definition->param = param; param_definition->audio_element = audio_element; iamf->param_definitions[iamf->nb_param_definitions++] = param_definition; -return param_definition; +return 0; } int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx) @@ -280,9 +280,9 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void } if (!param_definition) { -param_definition = add_param_definition(iamf, param, audio_element, log_ctx); -if (!param_definition) -return AVERROR(ENOMEM); +ret = add_param_definition(iamf, param, audio_element, log_ctx); +if (ret < 0) +return ret; } } if (iamf_audio_element->recon_gain_info) { @@ -295,9 +295,9 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void } if (!param_definition) { -param_definition = add_param_definition(iamf, param, audio_element, log_ctx); -if (!param_definition) -return AVERROR(ENOMEM); +ret = add_param_definition(iamf, param, audio_element, log_ctx); +if (ret < 0) +return ret; } } @@ -314,6 +314,7 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx) { IAMFMixPresentation **tmp, *mix_presentation; +int ret; if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION) return AVERROR(EINVAL); @@ -345,9 +346,9 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); if (!param_definition) { -param_definition = add_param_definition(iamf, param, NULL, log_ctx); -if (!param_definition) -return AVERROR(ENOMEM); +ret = add_param_definition(iamf, param, NULL, log_ctx); +if (ret < 0) +return ret; } for (int j = 0; j < submix->nb_elements; j++) { @@ -361,9 +362,9 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo } param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id);
[FFmpeg-cvslog] avformat/iamf_writer: Fix leaks on error
ffmpeg | branch: master | Andreas Rheinhardt | Mon Feb 19 22:40:46 2024 +0100| [1f7cd5d4348a8f96afe136405e47f3a2004fb169] | committer: Andreas Rheinhardt avformat/iamf_writer: Fix leaks on error Fixes Coverity issues #1559544 and #1559547. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1f7cd5d4348a8f96afe136405e47f3a2004fb169 --- libavformat/iamf_writer.c | 53 --- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index b12c7e77f9..a807fed786 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -239,13 +239,17 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void audio_element->codec_config_id = ret; audio_element->substreams = av_calloc(stg->nb_streams, sizeof(*audio_element->substreams)); -if (!audio_element->substreams) -return AVERROR(ENOMEM); +if (!audio_element->substreams) { +ret = AVERROR(ENOMEM); +goto fail; +} audio_element->nb_substreams = stg->nb_streams; audio_element->layers = av_calloc(iamf_audio_element->nb_layers, sizeof(*audio_element->layers)); -if (!audio_element->layers) -return AVERROR(ENOMEM); +if (!audio_element->layers) { +ret = AVERROR(ENOMEM); +goto fail; +} for (int i = 0, j = 0; i < iamf_audio_element->nb_layers; i++) { int nb_channels = iamf_audio_element->layers[i]->ch_layout.nb_channels; @@ -266,7 +270,8 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void if (nb_channels) { av_log(log_ctx, AV_LOG_ERROR, "Invalid channel count across substreams in layer %u from stream group %u\n", i, stg->index); -return AVERROR(EINVAL); +ret = AVERROR(EINVAL); +goto fail; } } @@ -276,13 +281,14 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void if (param->nb_subblocks != 1) { av_log(log_ctx, AV_LOG_ERROR, "nb_subblocks in demixing_info for stream group %u is not 1\n", stg->index); -return AVERROR(EINVAL); +ret = AVERROR(EINVAL); +goto fail; } if (!param_definition) { ret = add_param_definition(iamf, param, audio_element, log_ctx); if (ret < 0) -return ret; +goto fail; } } if (iamf_audio_element->recon_gain_info) { @@ -291,24 +297,30 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void if (param->nb_subblocks != 1) { av_log(log_ctx, AV_LOG_ERROR, "nb_subblocks in recon_gain_info for stream group %u is not 1\n", stg->index); -return AVERROR(EINVAL); +ret = AVERROR(EINVAL); +goto fail; } if (!param_definition) { ret = add_param_definition(iamf, param, audio_element, log_ctx); if (ret < 0) -return ret; +goto fail; } } tmp = av_realloc_array(iamf->audio_elements, iamf->nb_audio_elements + 1, sizeof(*iamf->audio_elements)); -if (!tmp) -return AVERROR(ENOMEM); +if (!tmp) { +ret = AVERROR(ENOMEM); +goto fail; +} iamf->audio_elements = tmp; iamf->audio_elements[iamf->nb_audio_elements++] = audio_element; return 0; +fail: +ff_iamf_free_audio_element(&audio_element); +return ret; } int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx) @@ -341,14 +353,15 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo if (!param) { av_log(log_ctx, AV_LOG_ERROR, "output_mix_config is not present in submix %u from " "Mix Presentation ID %"PRId64"\n", i, stg->id); -return AVERROR(EINVAL); +ret = AVERROR(EINVAL); +goto fail; } param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); if (!param_definition) { ret = add_param_definition(iamf, param, NULL, log_ctx); if (ret < 0) -return ret; +goto fail; } for (int j = 0; j < submix->nb_elements; j++) { @@ -358,25 +371,31 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo if (!param) { av_log(log_ctx, AV_LOG_ERROR, "element_mix_config is not present for element %u in submix %u from " "Mix Presentation ID %"PRId64"\n", j, i, stg->id); -return AVERROR(EINVAL); +ret = AVERROR(EINVAL); +goto fail;
[FFmpeg-cvslog] avformat/iamf: Don't mix ownership and non-ownership pointers
ffmpeg | branch: master | Andreas Rheinhardt | Mon Feb 19 20:22:22 2024 +0100| [18af922c536ad7c89e74a3326c58b6c93254a50f] | committer: Andreas Rheinhardt avformat/iamf: Don't mix ownership and non-ownership pointers IAMFAudioElement and IAMFMixPresentation currently contain pointers to independently allocated objects that are sometimes owned by said structures and sometimes not. More precisely, upon success the demuxer transfers ownership of these other objects newly created AVStreamGroups, but it keeps its pointers. iamf_read_close() therefore always resets these pointers (because the cleanup code always treats them as ownership pointers). This leads to memory leaks in case iamf_read_header() without having attached all of these objects to stream groups. The muxer has a similar issue: It also clears these pointers (pointing to objects owned by stream groups created by the user) in its deinit function. This commit fixes this memleak by explicitly adding non-ownership pointers; this also allows to remove the code to reset the ownership pointers. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=18af922c536ad7c89e74a3326c58b6c93254a50f --- libavformat/iamf.h| 10 ++ libavformat/iamf_parse.c | 2 ++ libavformat/iamf_writer.c | 16 libavformat/iamfdec.c | 22 -- libavformat/iamfenc.c | 12 +--- 5 files changed, 29 insertions(+), 33 deletions(-) diff --git a/libavformat/iamf.h b/libavformat/iamf.h index d88a24c435..0cb0902e86 100644 --- a/libavformat/iamf.h +++ b/libavformat/iamf.h @@ -86,6 +86,11 @@ typedef struct IAMFSubStream { } IAMFSubStream; typedef struct IAMFAudioElement { +const AVIAMFAudioElement *celement; +/** + * element backs celement iff the AVIAMFAudioElement + * is owned by this structure. + */ AVIAMFAudioElement *element; unsigned int audio_element_id; @@ -100,6 +105,11 @@ typedef struct IAMFAudioElement { } IAMFAudioElement; typedef struct IAMFMixPresentation { +const AVIAMFMixPresentation *cmix; +/** + * mix backs cmix iff the AVIAMFMixPresentation + * is owned by this structure. + */ AVIAMFMixPresentation *mix; unsigned int mix_presentation_id; diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index a6443f4f3d..50dfd1a6c2 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -651,6 +651,7 @@ static int audio_element_obu(void *s, IAMFContext *c, AVIOContext *pb, int len) ret = AVERROR(ENOMEM); goto fail; } +audio_element->celement = element; element->audio_element_type = audio_element_type; @@ -809,6 +810,7 @@ static int mix_presentation_obu(void *s, IAMFContext *c, AVIOContext *pb, int le ret = AVERROR(ENOMEM); goto fail; } +mix_presentation->cmix = mix; mix_presentation->count_label = ffio_read_leb(pbc); mix_presentation->language_label = av_calloc(mix_presentation->count_label, diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 9a665dc002..e8a88b44c3 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -234,7 +234,7 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void if (!audio_element) return AVERROR(ENOMEM); -audio_element->element = stg->params.iamf_audio_element; +audio_element->celement = stg->params.iamf_audio_element; audio_element->audio_element_id = stg->id; audio_element->codec_config_id = ret; @@ -329,11 +329,11 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo if (!mix_presentation) return AVERROR(ENOMEM); -mix_presentation->mix = stg->params.iamf_mix_presentation; +mix_presentation->cmix = stg->params.iamf_mix_presentation; mix_presentation->mix_presentation_id = stg->id; -for (int i = 0; i < mix_presentation->mix->nb_submixes; i++) { -const AVIAMFSubmix *submix = mix_presentation->mix->submixes[i]; +for (int i = 0; i < mix_presentation->cmix->nb_submixes; i++) { +const AVIAMFSubmix *submix = mix_presentation->cmix->submixes[i]; AVIAMFParamDefinition *param = submix->output_mix_config; IAMFParamDefinition *param_definition; @@ -465,7 +465,7 @@ static inline int rescale_rational(AVRational q, int b) static int scalable_channel_layout_config(const IAMFAudioElement *audio_element, AVIOContext *dyn_bc) { -const AVIAMFAudioElement *element = audio_element->element; +const AVIAMFAudioElement *element = audio_element->celement; uint8_t header[MAX_IAMF_OBU_HEADER_SIZE]; PutBitContext pb; @@ -503,7 +503,7 @@ static int scalable_channel_layout_config(const IAMFAudioElement *audio_element, static int ambisonics_config(const IAMFAudioElement *audio_element,
[FFmpeg-cvslog] avformat/mxfdec: move resolving Descriptors to the multi descriptor resolve function
ffmpeg | branch: master | Marton Balint | Fri Feb 16 20:13:43 2024 +0100| [41672f558673151e77798f8a184fc1d3e60b16b9] | committer: Marton Balint avformat/mxfdec: move resolving Descriptors to the multi descriptor resolve function Also remove unused descriptor member from MXFPackage. Signed-off-by: Marton Balint > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=41672f558673151e77798f8a184fc1d3e60b16b9 --- libavformat/mxfdec.c | 9 - 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index e42975e7fd..4e4e3e7a84 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -266,7 +266,6 @@ typedef struct MXFPackage { UID package_ul; UID *tracks_refs; int tracks_count; -MXFDescriptor *descriptor; /* only one */ UID descriptor_ref; char *name; UID *comment_refs; @@ -2257,11 +2256,12 @@ static MXFPackage* mxf_resolve_source_package(MXFContext *mxf, UID package_ul, U return NULL; } -static MXFDescriptor* mxf_resolve_multidescriptor(MXFContext *mxf, MXFDescriptor *descriptor, int track_id) +static MXFDescriptor* mxf_resolve_descriptor(MXFContext *mxf, UID *strong_ref, int track_id) { -MXFDescriptor *file_descriptor = NULL; +MXFDescriptor *descriptor, *file_descriptor = NULL; int i; +descriptor = mxf_resolve_strong_ref(mxf, strong_ref, AnyType); if (!descriptor) return NULL; @@ -2782,8 +2782,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) st->id = material_track->track_id; st->priv_data = source_track; -source_package->descriptor = mxf_resolve_strong_ref(mxf, &source_package->descriptor_ref, AnyType); -descriptor = mxf_resolve_multidescriptor(mxf, source_package->descriptor, source_track->track_id); +descriptor = mxf_resolve_descriptor(mxf, &source_package->descriptor_ref, source_track->track_id); /* A SourceClip from a EssenceGroup may only be a single frame of essence data. The clips duration is then how many * frames its suppose to repeat for. Descriptor->duration, if present, contains the real duration of the essence data */ ___ 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/mxfdec: do not use AnyType when resolving Descriptors and MultipleDescriptors
ffmpeg | branch: master | Marton Balint | Fri Feb 16 21:53:16 2024 +0100| [68f2b32ef2b29aa95488531b007adde92ca82165] | committer: Marton Balint avformat/mxfdec: do not use AnyType when resolving Descriptors and MultipleDescriptors By using AnyType for resolving a strong reference we searched among all types, not just the ones which can be the target of the reference, which in some cases caused to find the wrong type, if the metadata set UUIDs were not unique. UUIDs do not have to be unique if their type sets them apart, SMPTE 377M says: > StrongRef: 'One to One’ relationship between sets and implemented in MXF > with UUIDs. Strong References are typed which means that the definition > identifies the kind of set which is the target of the reference. Fixes ticket #10865. Signed-off-by: Marton Balint > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=68f2b32ef2b29aa95488531b007adde92ca82165 --- libavformat/mxfdec.c | 19 --- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 4e4e3e7a84..446bcf3276 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2258,16 +2258,14 @@ static MXFPackage* mxf_resolve_source_package(MXFContext *mxf, UID package_ul, U static MXFDescriptor* mxf_resolve_descriptor(MXFContext *mxf, UID *strong_ref, int track_id) { -MXFDescriptor *descriptor, *file_descriptor = NULL; -int i; - -descriptor = mxf_resolve_strong_ref(mxf, strong_ref, AnyType); -if (!descriptor) -return NULL; +MXFDescriptor *descriptor = mxf_resolve_strong_ref(mxf, strong_ref, Descriptor); +if (descriptor) +return descriptor; -if (descriptor->meta.type == MultipleDescriptor) { -for (i = 0; i < descriptor->file_descriptors_count; i++) { -file_descriptor = mxf_resolve_strong_ref(mxf, &descriptor->file_descriptors_refs[i], Descriptor); +descriptor = mxf_resolve_strong_ref(mxf, strong_ref, MultipleDescriptor); +if (descriptor) { +for (int i = 0; i < descriptor->file_descriptors_count; i++) { +MXFDescriptor *file_descriptor = mxf_resolve_strong_ref(mxf, &descriptor->file_descriptors_refs[i], Descriptor); if (!file_descriptor) { av_log(mxf->fc, AV_LOG_ERROR, "could not resolve file descriptor strong ref\n"); @@ -2277,8 +2275,7 @@ static MXFDescriptor* mxf_resolve_descriptor(MXFContext *mxf, UID *strong_ref, i return file_descriptor; } } -} else if (descriptor->meta.type == Descriptor) -return descriptor; +} return NULL; } ___ 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/x86/fpel: Remove declarations of inexistent functions
ffmpeg | branch: master | Andreas Rheinhardt | Fri Feb 16 18:56:46 2024 +0100| [8a349bb02f49864708f30f48b3f779889ffea425] | committer: Andreas Rheinhardt avcodec/x86/fpel: Remove declarations of inexistent functions Forgotten in 50a8cbb23e9a982292bf7737004c97eba776c00e and a51279bbdea0d6db920d71980262bccd0ce78226. Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8a349bb02f49864708f30f48b3f779889ffea425 --- libavcodec/x86/fpel.h | 4 1 file changed, 4 deletions(-) diff --git a/libavcodec/x86/fpel.h b/libavcodec/x86/fpel.h index 4e83cf71c3..90f7051a48 100644 --- a/libavcodec/x86/fpel.h +++ b/libavcodec/x86/fpel.h @@ -22,12 +22,8 @@ #include #include -void ff_avg_pixels4_mmx(uint8_t *block, const uint8_t *pixels, -ptrdiff_t line_size, int h); void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -void ff_avg_pixels8_mmx(uint8_t *block, const uint8_t *pixels, -ptrdiff_t line_size, int h); void ff_avg_pixels8_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_avg_pixels16_mmx(uint8_t *block, const uint8_t *pixels, ___ 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/h264qpel_template: Mark pointers as non-aliasing
ffmpeg | branch: master | Andreas Rheinhardt | Fri Feb 16 23:47:33 2024 +0100| [4d45093f9e4f6ecc64750627b23da32c9cd61320] | committer: Andreas Rheinhardt avcodec/h264qpel_template: Mark pointers as non-aliasing It allows the compiler to combine two reads and writes of adjacent 32bit memory locations into 64bit read-writes. Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4d45093f9e4f6ecc64750627b23da32c9cd61320 --- libavcodec/h264qpel_template.c | 93 +++--- 1 file changed, 52 insertions(+), 41 deletions(-) diff --git a/libavcodec/h264qpel_template.c b/libavcodec/h264qpel_template.c index 27c5b8f17f..61fa55c689 100644 --- a/libavcodec/h264qpel_template.c +++ b/libavcodec/h264qpel_template.c @@ -26,7 +26,7 @@ #include "hpel_template.c" #include "pel_template.c" -static inline void FUNC(copy_block2)(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h) +static inline void FUNC(copy_block2)(uint8_t *dst, const uint8_t *av_restrict src, int dstStride, int srcStride, int h) { int i; for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ src -= 2*srcStride;\ @@ -150,12 +153,13 @@ static av_unused void FUNC(OPNAME ## h264_qpel2_hv_lowpass)(uint8_t *_dst, pixel tmp++;\ }\ }\ -static void FUNC(OPNAME ## h264_qpel4_h_lowpass)(uint8_t *_dst, const uint8_t *_src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel4_h_lowpass)(uint8_t *_dst, const uint8_t *av_restrict _src, int dstStride, int srcStride)\ +{\ const int h=4;\ INIT_CLIP\ int i;\ pixel *dst = (pixel*)_dst;\ -const pixel *src = (const pixel*)_src;\ +const pixel *av_restrict src = (const pixel*)_src;\ dstStride >>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ src -= 2*srcStride;\ @@ -238,12 +244,13 @@ static void FUNC(OPNAME ## h264_qpel4_hv_lowpass)(uint8_t *_dst, pixeltmp *tmp, }\ }\ \ -static void FUNC(OPNAME ## h264_qpel8_h_lowpass)(uint8_t *_dst, const uint8_t *_src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel8_h_lowpass)(uint8_t *_dst, const uint8_t *av_restrict _src, int dstStride, int srcStride)\ +{\ const int h=8;\ INIT_CLIP\ int i;\ pixel *dst = (pixel*)_dst;\ -const pixel *src = (const pixel*)_src;\ +const pixel *av_restrict src = (const pixel*)_src;\ dstStride >>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ src -= 2*srcStride;\ @@ -350,7 +359,8 @@ static void FUNC(OPNAME ## h264_qpel8_hv_lowpass)(uint8_t *_dst, pixeltmp *tmp, }\ }\ \ -static void FUNC(OPNAME ## h264_qpel16_v_lowpass)(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel16_v_lowpass)(uint8_t *dst, const uint8_t *av_restrict src, int dstStride, int srcStride)\ +{\ FUNC(OPNAME ## h264_qpel8_v_lowpass)(dst, src , dstStride, srcStride);\ FUNC(OPNAME ## h264_qpel8_v_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ src += 8*srcStride;\ @@ -359,7 +369,8 @@ static void FUNC(OPNAME ## h264_qpel16_v_lowpass)(uint8_t *dst, const uint8_t *s FUNC(OPNAME ## h264_qpel8_v_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ }\ \ -static void FUNC(OPNAME ## h264_qpel16_h_lowpass)(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel16_h_lowpass)(uint8_t *dst, const uint8_t *av_restrict src, int dstStride, int srcStride)\ +{\ FUNC(OPNAME ## h264_qpel8_h_lowpass)(dst, src , dstStride, srcStride);\ FUNC(OPNAME ## h264_qpel8_h_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ src += 8*srcStride;\ @@ -368,7 +379,7 @@ static void FUNC(OPNAME ## h264_qpel16_h_lowpass)(uint8_t *dst, const uint8_t *s FUNC(OPNAME ## h264_qpel8_h_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ }\ \ -static void FUNC(OPNAME ## h264_qpel16_hv_lowpass)(uint8_t *dst, pixeltmp *tmp, const uint8_t *src, int dstStride, int tmpStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel16_hv_lowpass)(uint8_t *dst, pixeltmp *tmp, const uint8_t *av_restrict src, int dstStride, int tmpStride, int srcStride){\ FUNC(OPNAME ## h264_qpel8_hv_lowpass)(dst, tmp , src , dstStride, tmpStride, srcStride);\ FUNC(OPNAME ## h264_qpel8_hv_lowpas
[FFmpeg-cvslog] avcodec/x86/hpeldsp_init: Avoid using ff_avg_pixels16_mmx
ffmpeg | branch: master | Andreas Rheinhardt | Fri Feb 16 20:36:24 2024 +0100| [7cad4dba505f9ad0adf013dd5bdf02a57249eecc] | committer: Andreas Rheinhardt avcodec/x86/hpeldsp_init: Avoid using ff_avg_pixels16_mmx Use ff_avg_pixels16_mmxext or ff_avg_pixels16_sse2 (for users with SSE2_FAST) instead. This also allows to remove ff_avg_pixels16_mmx, as this was its last remaining user. Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7cad4dba505f9ad0adf013dd5bdf02a57249eecc --- libavcodec/x86/fpel.asm | 1 - libavcodec/x86/fpel.h | 2 -- libavcodec/x86/hpeldsp_init.c | 15 +++ 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/libavcodec/x86/fpel.asm b/libavcodec/x86/fpel.asm index ebe8e43750..ecaca3c080 100644 --- a/libavcodec/x86/fpel.asm +++ b/libavcodec/x86/fpel.asm @@ -92,7 +92,6 @@ INIT_MMX mmx OP_PIXELS put, 4 OP_PIXELS put, 8 OP_PIXELS put, 16 -OP_PIXELS avg, 16 INIT_MMX mmxext OP_PIXELS avg, 4 diff --git a/libavcodec/x86/fpel.h b/libavcodec/x86/fpel.h index 90f7051a48..c533ca40b2 100644 --- a/libavcodec/x86/fpel.h +++ b/libavcodec/x86/fpel.h @@ -26,8 +26,6 @@ void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_avg_pixels8_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -void ff_avg_pixels16_mmx(uint8_t *block, const uint8_t *pixels, - ptrdiff_t line_size, int h); void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels, diff --git a/libavcodec/x86/hpeldsp_init.c b/libavcodec/x86/hpeldsp_init.c index f08c66f5c8..4a0513d06d 100644 --- a/libavcodec/x86/hpeldsp_init.c +++ b/libavcodec/x86/hpeldsp_init.c @@ -62,11 +62,9 @@ void ff_avg_pixels8_y2_mmxext(uint8_t *block, const uint8_t *pixels, void ff_avg_approx_pixels8_xy2_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -#define avg_pixels16_mmxff_avg_pixels16_mmx #define put_pixels8_mmx ff_put_pixels8_mmx #define put_pixels16_mmxff_put_pixels16_mmx #define put_pixels8_xy2_mmx ff_put_pixels8_xy2_mmx -#define avg_no_rnd_pixels16_mmx ff_avg_pixels16_mmx #define put_no_rnd_pixels8_mmx ff_put_pixels8_mmx #define put_no_rnd_pixels16_mmx ff_put_pixels16_mmx @@ -138,7 +136,6 @@ HPELDSP_AVG_PIXELS16(_mmxext) if (HAVE_MMX_EXTERNAL) \ c->PFX ## _pixels_tab IDX [0] = PFX ## _pixels ## SIZE ## _ ## CPU -#if HAVE_MMX_INLINE #define SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU) \ do { \ SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU); \ @@ -149,10 +146,6 @@ HPELDSP_AVG_PIXELS16(_mmxext) c->PFX ## _pixels_tab IDX [1] = PFX ## _pixels ## SIZE ## _x2_ ## CPU; \ c->PFX ## _pixels_tab IDX [2] = PFX ## _pixels ## SIZE ## _y2_ ## CPU; \ } while (0) -#else -#define SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU) SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU) -#define SET_HPEL_FUNCS12(PFX, IDX, SIZE, CPU) ((void)0) -#endif #define SET_HPEL_FUNCS(PFX, IDX, SIZE, CPU) \ do { \ SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU); \ @@ -161,11 +154,14 @@ HPELDSP_AVG_PIXELS16(_mmxext) static void hpeldsp_init_mmx(HpelDSPContext *c, int flags) { +#if HAVE_MMX_INLINE SET_HPEL_FUNCS03(put, [0], 16, mmx); SET_HPEL_FUNCS(put_no_rnd, [0], 16, mmx); -SET_HPEL_FUNCS(avg_no_rnd,, 16, mmx); +SET_HPEL_FUNCS12(avg_no_rnd, , 16, mmx); +c->avg_no_rnd_pixels_tab[3] = avg_no_rnd_pixels16_xy2_mmx; SET_HPEL_FUNCS03(put, [1], 8, mmx); SET_HPEL_FUNCS(put_no_rnd, [1], 8, mmx); +#endif } static void hpeldsp_init_mmxext(HpelDSPContext *c, int flags) @@ -190,6 +186,8 @@ static void hpeldsp_init_mmxext(HpelDSPContext *c, int flags) c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_exact_mmxext; c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_exact_mmxext; +c->avg_no_rnd_pixels_tab[0] = ff_avg_pixels16_mmxext; + if (!(flags & AV_CODEC_FLAG_BITEXACT)) { c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmxext; c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmxext; @@ -214,6 +212,7 @@ static void hpeldsp_init_sse2_fast(HpelDSPContext *c, int flags) c->avg_pixels_tab[0][1]= ff_avg_pixels16_x2_sse2; c->avg_pixels_tab[0][2]= ff_avg_pixels16_y2_sse2; c->avg_pixels_tab[0][3]= ff_avg_pixels16_xy2_sse2; +c
[FFmpeg-cvslog] avcodec/jpeg2000dec: Avoid using GetByteContext.buffer directly
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 19:07:33 2024 +0100| [271d6709cf123b6fed53138d02ffdbab8bf50833] | committer: Andreas Rheinhardt avcodec/jpeg2000dec: Avoid using GetByteContext.buffer directly Reviewed-by: Tomas Härdin Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=271d6709cf123b6fed53138d02ffdbab8bf50833 --- libavcodec/jpeg2000dec.c | 8 +++- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 3d18d48e7c..1afc6b1e2d 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -886,8 +886,8 @@ static int get_ppm(Jpeg2000DecoderContext *s, int n) return AVERROR(ENOMEM); s->has_ppm = 1; memset(&s->packed_headers_stream, 0, sizeof(s->packed_headers_stream)); -bytestream_get_buffer(&s->g.buffer, s->packed_headers + s->packed_headers_size, - n - 3); +bytestream2_get_bufferu(&s->g, s->packed_headers + s->packed_headers_size, +n - 3); s->packed_headers_size += n - 3; return 0; @@ -921,10 +921,8 @@ static int get_ppt(Jpeg2000DecoderContext *s, int n) } else return AVERROR(ENOMEM); memset(&tile->packed_headers_stream, 0, sizeof(tile->packed_headers_stream)); -memcpy(tile->packed_headers + tile->packed_headers_size, - s->g.buffer, n - 3); +bytestream2_get_bufferu(&s->g, tile->packed_headers + tile->packed_headers_size, n - 3); tile->packed_headers_size += n - 3; -bytestream2_skip(&s->g, n - 3); 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/x86/h264_qpel: Remove put_h264_qpel[48]_mmxext
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 01:06:49 2024 +0100| [32178c2f28f6d33907b979fd448802f6d0eda3f4] | committer: Andreas Rheinhardt avcodec/x86/h264_qpel: Remove put_h264_qpel[48]_mmxext These functions are not faster than the C versions. Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=32178c2f28f6d33907b979fd448802f6d0eda3f4 --- libavcodec/x86/fpel.asm| 1 - libavcodec/x86/fpel.h | 2 -- libavcodec/x86/h264_qpel.c | 32 +--- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/libavcodec/x86/fpel.asm b/libavcodec/x86/fpel.asm index ecaca3c080..278d1410fc 100644 --- a/libavcodec/x86/fpel.asm +++ b/libavcodec/x86/fpel.asm @@ -89,7 +89,6 @@ cglobal %1_pixels%2, 4,5,4 %endmacro INIT_MMX mmx -OP_PIXELS put, 4 OP_PIXELS put, 8 OP_PIXELS put, 16 diff --git a/libavcodec/x86/fpel.h b/libavcodec/x86/fpel.h index c533ca40b2..47ffc8eec7 100644 --- a/libavcodec/x86/fpel.h +++ b/libavcodec/x86/fpel.h @@ -30,8 +30,6 @@ void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -void ff_put_pixels4_mmx(uint8_t *block, const uint8_t *pixels, -ptrdiff_t line_size, int h); void ff_put_pixels8_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_put_pixels16_mmx(uint8_t *block, const uint8_t *pixels, diff --git a/libavcodec/x86/h264_qpel.c b/libavcodec/x86/h264_qpel.c index 2df4c11f82..d69ccda89c 100644 --- a/libavcodec/x86/h264_qpel.c +++ b/libavcodec/x86/h264_qpel.c @@ -47,8 +47,8 @@ void ff_avg_pixels16_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t #define ff_put_pixels16_l2_sse2 ff_put_pixels16_l2_mmxext #define ff_avg_pixels16_l2_sse2 ff_avg_pixels16_l2_mmxext #define ff_put_pixels16_mmxext ff_put_pixels16_mmx -#define ff_put_pixels8_mmxext ff_put_pixels8_mmx -#define ff_put_pixels4_mmxext ff_put_pixels4_mmx +#define ff_put_pixels8_mmxext(...) +#define ff_put_pixels4_mmxext(...) #define DEF_QPEL(OPNAME)\ void ff_ ## OPNAME ## _h264_qpel4_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride);\ @@ -217,11 +217,10 @@ static void avg_h264_qpel16_mc00_sse2 (uint8_t *dst, const uint8_t *src, { ff_avg_pixels16_sse2(dst, src, stride, 16); } -#define put_h264_qpel8_mc00_sse2 put_h264_qpel8_mc00_mmxext #define avg_h264_qpel8_mc00_sse2 avg_h264_qpel8_mc00_mmxext #define H264_MC_C(OPNAME, SIZE, MMX, ALIGN) \ -static void OPNAME ## h264_qpel ## SIZE ## _mc00_ ## MMX (uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void av_unused OPNAME ## h264_qpel ## SIZE ## _mc00_ ## MMX (uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ {\ ff_ ## OPNAME ## pixels ## SIZE ## _ ## MMX(dst, src, stride, SIZE);\ }\ @@ -424,16 +423,20 @@ LUMA_MC_816(10, mc33, sse2) #endif /* HAVE_X86ASM */ -#define SET_QPEL_FUNCS0123(PFX, IDX, SIZE, CPU, PREFIX) \ +#define SET_QPEL_FUNCS123(PFX, IDX, SIZE, CPU, PREFIX) \ do { \ -c->PFX ## _pixels_tab[IDX][ 0] = PREFIX ## PFX ## SIZE ## _mc00_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 1] = PREFIX ## PFX ## SIZE ## _mc10_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 2] = PREFIX ## PFX ## SIZE ## _mc20_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 3] = PREFIX ## PFX ## SIZE ## _mc30_ ## CPU; \ } while (0) -#define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \ +#define SET_QPEL_FUNCS0123(PFX, IDX, SIZE, CPU, PREFIX) \ do { \ -SET_QPEL_FUNCS0123(PFX, IDX, SIZE, CPU, PREFIX); \ +c->PFX ## _pixels_tab[IDX][ 0] = PREFIX ## PFX ## SIZE ## _mc00_ ## CPU; \ +SET_QPEL_FUNCS123(PFX, IDX, SIZE, CPU, PREFIX); \ +} while (0) +#define SET_QPEL_FUNCS_1PP(PFX, IDX, SIZE, CPU, PREFIX) \ +do { \ +SET_QPEL_FUNCS123(PFX, IDX, SIZE, CPU, PREFIX); \ c->PFX ## _pixels_tab[IDX][ 4] = PREFIX ## PFX ## SIZE ## _mc01_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 5] = PREFIX ## PFX ## SIZE ## _mc11_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 6] = PREFIX ## PFX ## SIZE ## _mc21_ ## CPU; \ @@ -447,6 +450,11 @@ LUMA_MC_816(10, mc33, sse2) c->PFX ## _pixels_tab[IDX][14] = PREFIX ## PFX ## SIZE ## _mc23_ ## CPU; \ c->PFX ## _pixels_tab[IDX][15] = PREFIX ## PFX ## SIZE ## _mc33_ ## CPU; \ } while (0) +#define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \ +do {
[FFmpeg-cvslog] avcodec/jpeg2000: Simplify exp2fi for numbers used here
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 19:49:29 2024 +0100| [42f6dfc42e81725f466001b64f0536622a6682ed] | committer: Andreas Rheinhardt avcodec/jpeg2000: Simplify exp2fi for numbers used here The call to ff_exp2fi() here always uses arguments in the normal range, so that the branches in ff_exp2fi() are unnecessary. This is so because JPEG2000 itself only supports up to 128 bits per component per pixel (we only support far less); furthermore, expn is always 0..31 for the decoder and also sane for the encoder, so that the difference between these two values is always in the normal range of -126..128. Reviewed-by: Tomas Härdin Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=42f6dfc42e81725f466001b64f0536622a6682ed --- libavcodec/jpeg2000.c | 18 ++ 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/libavcodec/jpeg2000.c b/libavcodec/jpeg2000.c index 0aa984bc53..d6ffb02319 100644 --- a/libavcodec/jpeg2000.c +++ b/libavcodec/jpeg2000.c @@ -32,7 +32,6 @@ #include "libavutil/mem.h" #include "libavutil/thread.h" #include "avcodec.h" -#include "internal.h" #include "jpeg2000.h" #define SHL(a, n) ((n) >= 0 ? (a) << (n) : (a) >> -(n)) @@ -201,6 +200,17 @@ void ff_jpeg2000_set_significance(Jpeg2000T1Context *t1, int x, int y, // static const uint8_t lut_gain[2][4] = { { 0, 0, 0, 0 }, { 0, 1, 1, 2 } }; (unused) +/** + * 2^(x) for integer x in the range -126..128. + * @return correctly rounded float + */ +static av_always_inline float exp2fi(int x) +{ +av_assert2(-126 <= x && x <= 128); +/* Normal range */ +return av_int2float((x+127) << 23); +} + static void init_band_stepsize(AVCodecContext *avctx, Jpeg2000Band *band, Jpeg2000CodingStyle *codsty, @@ -230,7 +240,7 @@ static void init_band_stepsize(AVCodecContext *avctx, * R_b = R_I + log2 (gain_b ) * see ISO/IEC 15444-1:2002 E.1.1 eqn. E-3 and E-4 */ gain= cbps; -band->f_stepsize = ff_exp2fi(gain - qntsty->expn[gbandno]); +band->f_stepsize = exp2fi(gain - qntsty->expn[gbandno]); band->f_stepsize *= qntsty->mant[gbandno] / 2048.0 + 1.0; break; default: @@ -391,7 +401,7 @@ static int init_band(AVCodecContext *avctx, Jpeg2000CodingStyle *codsty, Jpeg2000QuantStyle *qntsty, int bandno, int gbandno, int reslevelno, - int cbps, int dx, int dy) + const int cbps, int dx, int dy) { Jpeg2000Band *band = reslevel->band + bandno; uint8_t log2_band_prec_width, log2_band_prec_height; @@ -466,7 +476,7 @@ static int init_band(AVCodecContext *avctx, int ff_jpeg2000_init_component(Jpeg2000Component *comp, Jpeg2000CodingStyle *codsty, Jpeg2000QuantStyle *qntsty, - int cbps, int dx, int dy, + const int cbps, int dx, int dy, AVCodecContext *avctx) { int reslevelno, bandno, gbandno = 0, ret, i, j; ___ 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/jpeg2000dec, j2kenc: Constify where appropriate
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 19:06:11 2024 +0100| [b48b3250ca00d5dddb0b90298f7a85ac42860674] | committer: Andreas Rheinhardt avcodec/jpeg2000dec, j2kenc: Constify where appropriate Reviewed-by: Tomas Härdin Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b48b3250ca00d5dddb0b90298f7a85ac42860674 --- libavcodec/j2kenc.c | 2 +- libavcodec/jpeg2000dec.c | 14 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c index 789791f529..ebf21f6e7a 100644 --- a/libavcodec/j2kenc.c +++ b/libavcodec/j2kenc.c @@ -781,7 +781,7 @@ static void putnumpasses(Jpeg2000EncoderContext *s, int n) static int encode_packet(Jpeg2000EncoderContext *s, Jpeg2000ResLevel *rlevel, int layno, - int precno, uint8_t *expn, int numgbits, int packetno, + int precno, const uint8_t *expn, int numgbits, int packetno, int nlayers) { int bandno, empty = 1; diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 691cfbd891..3d18d48e7c 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -489,7 +489,7 @@ static int get_cox(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c) /* get coding parameters for a particular tile or whole image*/ static int get_cod(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, - uint8_t *properties) + const uint8_t *properties) { Jpeg2000CodingStyle tmp; int compno, ret; @@ -639,7 +639,7 @@ static int get_qcx(Jpeg2000DecoderContext *s, int n, Jpeg2000QuantStyle *q) /* Get quantization parameters for a particular tile or a whole image. */ static int get_qcd(Jpeg2000DecoderContext *s, int n, Jpeg2000QuantStyle *q, - uint8_t *properties) + const uint8_t *properties) { Jpeg2000QuantStyle tmp; int compno, ret; @@ -1004,7 +1004,7 @@ static int getlblockinc(Jpeg2000DecoderContext *s) return res; } -static inline void select_header(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, +static inline void select_header(Jpeg2000DecoderContext *s, const Jpeg2000Tile *tile, int *tp_index) { s->g = tile->tile_part[*tp_index].header_tpg; @@ -1015,8 +1015,8 @@ static inline void select_header(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, } } -static inline void select_stream(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, - int *tp_index, Jpeg2000CodingStyle *codsty) +static inline void select_stream(Jpeg2000DecoderContext *s, const Jpeg2000Tile *tile, + int *tp_index, const Jpeg2000CodingStyle *codsty) { s->g = tile->tile_part[*tp_index].tpg; if (bytestream2_get_bytes_left(&s->g) == 0 && s->bit_index == 8) { @@ -1033,9 +1033,9 @@ static inline void select_stream(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, } static int jpeg2000_decode_packet(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, int *tp_index, - Jpeg2000CodingStyle *codsty, + const Jpeg2000CodingStyle *codsty, Jpeg2000ResLevel *rlevel, int precno, - int layno, uint8_t *expn, int numgbits) + int layno, const uint8_t *expn, int numgbits) { int bandno, cblkno, ret, nb_code_blocks; int cwsno; ___ 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] configure, libavutil/version: Remove unused HAVE_MMX2
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 21:43:25 2024 +0100| [e8cdce88e9ef944e1240e58eaa1a5bb3850d56d3] | committer: Andreas Rheinhardt configure, libavutil/version: Remove unused HAVE_MMX2 Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e8cdce88e9ef944e1240e58eaa1a5bb3850d56d3 --- configure | 1 - libavutil/version.c | 1 - 2 files changed, 2 deletions(-) diff --git a/configure b/configure index 23066efa32..021d30855d 100755 --- a/configure +++ b/configure @@ -8090,7 +8090,6 @@ cat > $TMPH <= 100); -av_assert0(HAVE_MMX2 == HAVE_MMXEXT); av_assert0(((size_t)-1) > 0); // C guarantees this but if false on a platform we care about revert at least b284e1ffe343d6697fb950d1ee517bafda8a9844 ___ 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/internal: Move ff_exp2fi() to aacsbr.c
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 20:23:29 2024 +0100| [8d17ab607f1b33f68f94a67c546f64a50ee90f9a] | committer: Andreas Rheinhardt avcodec/internal: Move ff_exp2fi() to aacsbr.c Only used there. Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8d17ab607f1b33f68f94a67c546f64a50ee90f9a --- libavcodec/aacsbr.c | 39 +-- libavcodec/internal.h | 22 -- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/libavcodec/aacsbr.c b/libavcodec/aacsbr.c index 683c079b91..da9e160a57 100644 --- a/libavcodec/aacsbr.c +++ b/libavcodec/aacsbr.c @@ -31,10 +31,10 @@ #include "sbr.h" #include "aacsbr.h" #include "aacsbrdata.h" -#include "internal.h" #include "aacps.h" #include "sbrdsp.h" #include "libavutil/internal.h" +#include "libavutil/intfloat.h" #include "libavutil/libm.h" #include "libavutil/avassert.h" #include "libavutil/mem_internal.h" @@ -47,6 +47,25 @@ #include "mips/aacsbr_mips.h" #endif /* ARCH_MIPS */ +/** + * 2^(x) for integer x + * @return correctly rounded float + */ +static av_always_inline float exp2fi(int x) { +/* Normal range */ +if (-126 <= x && x <= 128) +return av_int2float((x+127) << 23); +/* Too large */ +else if (x > 128) +return INFINITY; +/* Subnormal numbers */ +else if (x > -150) +return av_int2float(1 << (x+149)); +/* Negligibly small */ +else +return 0; +} + static void aacsbr_func_ptr_init(AACSBRContext *c); static void make_bands(int16_t* bands, int start, int stop, int num_bands) @@ -79,13 +98,13 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) for (k = 0; k < sbr->n[sbr->data[0].bs_freq_res[e]]; k++) { float temp1, temp2, fac; if (sbr->data[0].bs_amp_res) { -temp1 = ff_exp2fi(sbr->data[0].env_facs_q[e][k] + 7); -temp2 = ff_exp2fi(pan_offset - sbr->data[1].env_facs_q[e][k]); +temp1 = exp2fi(sbr->data[0].env_facs_q[e][k] + 7); +temp2 = exp2fi(pan_offset - sbr->data[1].env_facs_q[e][k]); } else { -temp1 = ff_exp2fi((sbr->data[0].env_facs_q[e][k]>>1) + 7) * +temp1 = exp2fi((sbr->data[0].env_facs_q[e][k]>>1) + 7) * exp2_tab[sbr->data[0].env_facs_q[e][k] & 1]; -temp2 = ff_exp2fi((pan_offset - sbr->data[1].env_facs_q[e][k])>>1) * +temp2 = exp2fi((pan_offset - sbr->data[1].env_facs_q[e][k])>>1) * exp2_tab[(pan_offset - sbr->data[1].env_facs_q[e][k]) & 1]; } if (temp1 > 1E20) { @@ -99,8 +118,8 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) } for (e = 1; e <= sbr->data[0].bs_num_noise; e++) { for (k = 0; k < sbr->n_q; k++) { -float temp1 = ff_exp2fi(NOISE_FLOOR_OFFSET - sbr->data[0].noise_facs_q[e][k] + 1); -float temp2 = ff_exp2fi(12 - sbr->data[1].noise_facs_q[e][k]); +float temp1 = exp2fi(NOISE_FLOOR_OFFSET - sbr->data[0].noise_facs_q[e][k] + 1); +float temp2 = exp2fi(12 - sbr->data[1].noise_facs_q[e][k]); float fac; av_assert0(temp1 <= 1E20); fac = temp1 / (1.0f + temp2); @@ -113,9 +132,9 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) for (e = 1; e <= sbr->data[ch].bs_num_env; e++) for (k = 0; k < sbr->n[sbr->data[ch].bs_freq_res[e]]; k++){ if (sbr->data[ch].bs_amp_res) -sbr->data[ch].env_facs[e][k] = ff_exp2fi(sbr->data[ch].env_facs_q[e][k] + 6); +sbr->data[ch].env_facs[e][k] = exp2fi(sbr->data[ch].env_facs_q[e][k] + 6); else -sbr->data[ch].env_facs[e][k] = ff_exp2fi((sbr->data[ch].env_facs_q[e][k]>>1) + 6) +sbr->data[ch].env_facs[e][k] = exp2fi((sbr->data[ch].env_facs_q[e][k]>>1) + 6) * exp2_tab[sbr->data[ch].env_facs_q[e][k] & 1]; if (sbr->data[ch].env_facs[e][k] > 1E20) { av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n"); @@ -126,7 +145,7 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) for (e = 1; e <= sbr->data[ch].bs_num_noise; e++) for (k = 0; k < sbr->n_q; k++) sbr->data[ch].noise_facs[e][k] = -ff_exp2fi(NOISE_FLOOR_OFFSET - sbr->data[ch].noise_facs_q[e][k]); +exp2fi(NOISE_FLOOR_OFFSET - sbr->data[ch].noise_facs_q[e][k]); } } } diff --git a/libavcodec/internal.h b/libavcodec/internal.h index e
[FFmpeg-cvslog] avutil/intreadwrite: Remove obsolete warning
ffmpeg | branch: master | Andreas Rheinhardt | Sat Feb 17 20:41:34 2024 +0100| [b96b3e291ca5e1450e8bb8edc0c6221a9011e911] | committer: Andreas Rheinhardt avutil/intreadwrite: Remove obsolete warning Obsolete since 7ec2354c38978b918dc079b611393becb6c80bf7. Reviewed-by: Martin Storsjö Signed-off-by: Andreas Rheinhardt > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b96b3e291ca5e1450e8bb8edc0c6221a9011e911 --- libavutil/intreadwrite.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libavutil/intreadwrite.h b/libavutil/intreadwrite.h index 21df7887f3..d0a5773b54 100644 --- a/libavutil/intreadwrite.h +++ b/libavutil/intreadwrite.h @@ -583,9 +583,7 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; #endif /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. + * naturally aligned. */ #define AV_COPY(n, d, s) \ ___ 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/iamfdec: further split into shareable modules
ffmpeg | branch: master | James Almer | Thu Feb 15 19:12:40 2024 -0300| [c7266ad60f3dc43e8f2fc22620f20ae9764586db] | committer: James Almer avformat/iamfdec: further split into shareable modules Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c7266ad60f3dc43e8f2fc22620f20ae9764586db --- configure | 2 + libavformat/Makefile | 3 +- libavformat/iamf_reader.c | 356 ++ libavformat/iamf_reader.h | 49 +++ libavformat/iamfdec.c | 339 ++- 5 files changed, 423 insertions(+), 326 deletions(-) diff --git a/configure b/configure index 021d30855d..6d1df83d50 100755 --- a/configure +++ b/configure @@ -2516,6 +2516,7 @@ CONFIG_EXTRA=" huffman huffyuvdsp huffyuvencdsp +iamfdec idctdsp iirfilter inflate_wrapper @@ -3534,6 +3535,7 @@ gxf_muxer_select="pcm_rechunk_bsf" hds_muxer_select="flv_muxer" hls_demuxer_select="adts_header ac3_parser mov_demuxer mpegts_demuxer" hls_muxer_select="mov_muxer mpegts_muxer" +iamf_demuxer_select="iamfdec" image2_alias_pix_demuxer_select="image2_demuxer" image2_brender_pix_demuxer_select="image2_demuxer" imf_demuxer_deps="libxml2" diff --git a/libavformat/Makefile b/libavformat/Makefile index 9e8e7c9cb8..3b83f5a685 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -35,6 +35,7 @@ OBJS-$(HAVE_LIBC_MSVCRT) += file_open.o # subsystems OBJS-$(CONFIG_ISO_MEDIA) += isom.o +OBJS-$(CONFIG_IAMFDEC) += iamf_reader.o iamf_parse.o iamf.o OBJS-$(CONFIG_NETWORK) += network.o OBJS-$(CONFIG_RIFFDEC) += riffdec.o OBJS-$(CONFIG_RIFFENC) += riffenc.o @@ -258,7 +259,7 @@ OBJS-$(CONFIG_EVC_MUXER) += rawenc.o OBJS-$(CONFIG_HLS_DEMUXER) += hls.o hls_sample_encryption.o OBJS-$(CONFIG_HLS_MUXER) += hlsenc.o hlsplaylist.o avc.o OBJS-$(CONFIG_HNM_DEMUXER) += hnm.o -OBJS-$(CONFIG_IAMF_DEMUXER) += iamfdec.o iamf_parse.o iamf.o +OBJS-$(CONFIG_IAMF_DEMUXER) += iamfdec.o OBJS-$(CONFIG_IAMF_MUXER)+= iamfenc.o iamf_writer.o iamf.o OBJS-$(CONFIG_ICO_DEMUXER) += icodec.o OBJS-$(CONFIG_ICO_MUXER) += icoenc.o diff --git a/libavformat/iamf_reader.c b/libavformat/iamf_reader.c new file mode 100644 index 00..f63bd94b61 --- /dev/null +++ b/libavformat/iamf_reader.c @@ -0,0 +1,356 @@ +/* + * Immersive Audio Model and Formats demuxing utils + * Copyright (c) 2024 James Almer + * + * 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/avassert.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/log.h" +#include "libavcodec/mathops.h" +#include "libavcodec/packet.h" +#include "avformat.h" +#include "avio_internal.h" +#include "iamf.h" +#include "iamf_parse.h" +#include "iamf_reader.h" + +static AVStream *find_stream_by_id(AVFormatContext *s, int id) +{ +for (int i = 0; i < s->nb_streams; i++) +if (s->streams[i]->id == id) +return s->streams[i]; + +av_log(s, AV_LOG_ERROR, "Invalid stream id %d\n", id); +return NULL; +} + +static int audio_frame_obu(AVFormatContext *s, const IAMFDemuxContext *c, + AVIOContext *pb, AVPacket *pkt, + int len, enum IAMF_OBU_Type type, + unsigned skip_samples, unsigned discard_padding, + int id_in_bitstream) +{ +AVStream *st; +int ret, audio_substream_id; + +if (id_in_bitstream) { +unsigned explicit_audio_substream_id; +int64_t pos = avio_tell(pb); +explicit_audio_substream_id = ffio_read_leb(pb); +len -= avio_tell(pb) - pos; +audio_substream_id = explicit_audio_substream_id; +} else +audio_substream_id = type - IAMF_OBU_IA_AUDIO_FRAME_ID0; + +st = find_stream_by_id(s, audio_substream_id); +if (!st) +return AVERROR_INVALIDDATA; + +ret = av_get_packet(pb, pkt, len); +if (ret < 0) +return ret; +if (ret != len) +return AVERROR_INVALIDDATA; + +if (skip_samples ||
[FFmpeg-cvslog] avformat/iamfenc: further split into shareable modules
ffmpeg | branch: master | James Almer | Sat Feb 17 10:26:51 2024 -0300| [c95c8a0158073be84338d84c46529561bcc70a03] | committer: James Almer avformat/iamfenc: further split into shareable modules Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c95c8a0158073be84338d84c46529561bcc70a03 --- configure | 2 + libavformat/Makefile | 3 +- libavformat/iamf_writer.c | 222 ++ libavformat/iamf_writer.h | 6 ++ libavformat/iamfenc.c | 215 ++-- 5 files changed, 238 insertions(+), 210 deletions(-) diff --git a/configure b/configure index 6d1df83d50..2c635043dd 100755 --- a/configure +++ b/configure @@ -2517,6 +2517,7 @@ CONFIG_EXTRA=" huffyuvdsp huffyuvencdsp iamfdec +iamfenc idctdsp iirfilter inflate_wrapper @@ -3536,6 +3537,7 @@ hds_muxer_select="flv_muxer" hls_demuxer_select="adts_header ac3_parser mov_demuxer mpegts_demuxer" hls_muxer_select="mov_muxer mpegts_muxer" iamf_demuxer_select="iamfdec" +iamf_muxer_select="iamfenc" image2_alias_pix_demuxer_select="image2_demuxer" image2_brender_pix_demuxer_select="image2_demuxer" imf_demuxer_deps="libxml2" diff --git a/libavformat/Makefile b/libavformat/Makefile index 3b83f5a685..4a380668bd 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -36,6 +36,7 @@ OBJS-$(HAVE_LIBC_MSVCRT) += file_open.o # subsystems OBJS-$(CONFIG_ISO_MEDIA) += isom.o OBJS-$(CONFIG_IAMFDEC) += iamf_reader.o iamf_parse.o iamf.o +OBJS-$(CONFIG_IAMFENC) += iamf_writer.o iamf.o OBJS-$(CONFIG_NETWORK) += network.o OBJS-$(CONFIG_RIFFDEC) += riffdec.o OBJS-$(CONFIG_RIFFENC) += riffenc.o @@ -260,7 +261,7 @@ OBJS-$(CONFIG_HLS_DEMUXER) += hls.o hls_sample_encryption.o OBJS-$(CONFIG_HLS_MUXER) += hlsenc.o hlsplaylist.o avc.o OBJS-$(CONFIG_HNM_DEMUXER) += hnm.o OBJS-$(CONFIG_IAMF_DEMUXER) += iamfdec.o -OBJS-$(CONFIG_IAMF_MUXER)+= iamfenc.o iamf_writer.o iamf.o +OBJS-$(CONFIG_IAMF_MUXER)+= iamfenc.o OBJS-$(CONFIG_ICO_DEMUXER) += icodec.o OBJS-$(CONFIG_ICO_MUXER) += icoenc.o OBJS-$(CONFIG_IDCIN_DEMUXER) += idcin.o diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index a807fed786..9ed20fc562 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -852,3 +852,225 @@ int ff_iamf_write_descriptors(const IAMFContext *iamf, AVIOContext *pb, void *lo return 0; } + +static int write_parameter_block(const IAMFContext *iamf, AVIOContext *pb, + const AVIAMFParamDefinition *param, void *log_ctx) +{ +uint8_t header[MAX_IAMF_OBU_HEADER_SIZE]; +IAMFParamDefinition *param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); +PutBitContext pbc; +AVIOContext *dyn_bc; +uint8_t *dyn_buf = NULL; +int dyn_size, ret; + +if (param->type > AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN) { +av_log(log_ctx, AV_LOG_DEBUG, "Ignoring side data with unknown type %u\n", + param->type); +return 0; +} + +if (!param_definition) { +av_log(log_ctx, AV_LOG_ERROR, "Non-existent Parameter Definition with ID %u referenced by a packet\n", + param->parameter_id); +return AVERROR(EINVAL); +} + +if (param->type != param_definition->param->type) { +av_log(log_ctx, AV_LOG_ERROR, "Inconsistent values for Parameter Definition " +"with ID %u in a packet\n", + param->parameter_id); +return AVERROR(EINVAL); +} + +ret = avio_open_dyn_buf(&dyn_bc); +if (ret < 0) +return ret; + +// Sequence Header +init_put_bits(&pbc, header, sizeof(header)); +put_bits(&pbc, 5, IAMF_OBU_IA_PARAMETER_BLOCK); +put_bits(&pbc, 3, 0); +flush_put_bits(&pbc); +avio_write(pb, header, put_bytes_count(&pbc, 1)); + +ffio_write_leb(dyn_bc, param->parameter_id); +if (!param_definition->mode) { +ffio_write_leb(dyn_bc, param->duration); +ffio_write_leb(dyn_bc, param->constant_subblock_duration); +if (param->constant_subblock_duration == 0) +ffio_write_leb(dyn_bc, param->nb_subblocks); +} + +for (int i = 0; i < param->nb_subblocks; i++) { +const void *subblock = av_iamf_param_definition_get_subblock(param, i); + +switch (param->type) { +case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN: { +const AVIAMFMixGain *mix = subblock; +if (!param_definition->mode && param->constant_subblock_duration == 0) +ffio_write_leb(dyn_bc, mix->subblock_duration); + +ffio_write_leb(dyn_bc, mix->animation_type); + +avi
[FFmpeg-cvslog] avformat/iamfdec: set disposition flags to output streams
ffmpeg | branch: master | James Almer | Sun Feb 18 18:04:14 2024 -0300| [80131321c48362e743a84aafd845871330bc4023] | committer: James Almer avformat/iamfdec: set disposition flags to output streams if there's an audio layer with a single stream that can be rendered alone, mark it as default. Otherwise, mark every stream as dependent. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=80131321c48362e743a84aafd845871330bc4023 --- libavformat/iamf.h | 1 - libavformat/iamf_parse.c | 16 libavformat/iamfdec.c| 4 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libavformat/iamf.h b/libavformat/iamf.h index 0cb0902e86..ae1e46a99e 100644 --- a/libavformat/iamf.h +++ b/libavformat/iamf.h @@ -99,7 +99,6 @@ typedef struct IAMFAudioElement { unsigned int codec_config_id; -// mux IAMFLayer *layers; unsigned int nb_layers; } IAMFAudioElement; diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index 50dfd1a6c2..50b53aa5e9 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -333,6 +333,11 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb, if (nb_layers > 6) return AVERROR_INVALIDDATA; +audio_element->layers = av_calloc(nb_layers, sizeof(*audio_element->layers)); +if (!audio_element->layers) +return AVERROR(ENOMEM); + +audio_element->nb_layers = nb_layers; for (int i = 0; i < nb_layers; i++) { AVIAMFLayer *layer; int loudspeaker_layout, output_gain_is_present_flag; @@ -350,6 +355,8 @@ static int scalable_channel_layout_config(void *s, AVIOContext *pb, substream_count = avio_r8(pb); coupled_substream_count = avio_r8(pb); +audio_element->layers[i].substream_count = substream_count; +audio_element->layers[i].coupled_substream_count = coupled_substream_count; if (output_gain_is_present_flag) { layer->output_gain_flags = avio_r8(pb) >> 2; // get_bits(&gb, 6); layer->output_gain = av_make_q(sign_extend(avio_rb16(pb), 16), 1 << 8); @@ -401,6 +408,13 @@ static int ambisonics_config(void *s, AVIOContext *pb, if ((order + 1) * (order + 1) != output_channel_count) return AVERROR_INVALIDDATA; +audio_element->layers = av_mallocz(sizeof(*audio_element->layers)); +if (!audio_element->layers) +return AVERROR(ENOMEM); + +audio_element->nb_layers = 1; +audio_element->layers->substream_count = substream_count; + layer = av_iamf_audio_element_add_layer(audio_element->element); if (!layer) return AVERROR(ENOMEM); @@ -430,6 +444,8 @@ static int ambisonics_config(void *s, AVIOContext *pb, int nb_demixing_matrix = substream_count + coupled_substream_count; int demixing_matrix_size = nb_demixing_matrix * output_channel_count; +audio_element->layers->coupled_substream_count = coupled_substream_count; + layer->ch_layout = (AVChannelLayout){ .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = output_channel_count }; layer->demixing_matrix = av_malloc_array(demixing_matrix_size, sizeof(*layer->demixing_matrix)); if (!layer->demixing_matrix) diff --git a/libavformat/iamfdec.c b/libavformat/iamfdec.c index de4d502f5a..d286a824ce 100644 --- a/libavformat/iamfdec.c +++ b/libavformat/iamfdec.c @@ -106,6 +106,10 @@ static int iamf_read_header(AVFormatContext *s) if (ret < 0) return ret; +if (!i && !j && audio_element->layers[0].substream_count == 1) +st->disposition |= AV_DISPOSITION_DEFAULT; +else +st->disposition |= AV_DISPOSITION_DEPENDENT; st->id = substream->audio_substream_id; avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); } ___ 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/lead: support unaligned blocks
ffmpeg | branch: master | Peter Ross | Sun Nov 12 11:02:47 2023 +1100| [db975ff00d2111de8052abfd65bd250a737bec6d] | committer: Peter Ross avcodec/lead: support unaligned blocks Fixed ticket #10656. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=db975ff00d2111de8052abfd65bd250a737bec6d --- libavcodec/leaddec.c | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/leaddec.c b/libavcodec/leaddec.c index 489fe501b6..07b226941f 100644 --- a/libavcodec/leaddec.c +++ b/libavcodec/leaddec.c @@ -195,8 +195,8 @@ static int lead_decode_frame(AVCodecContext *avctx, AVFrame * frame, init_get_bits8(&gb, s->bitstream_buf, size); if (avctx->pix_fmt == AV_PIX_FMT_YUV420P) { -for (int mb_y = 0; mb_y < avctx->height / 16; mb_y++) -for (int mb_x = 0; mb_x < avctx->width / 16; mb_x++) +for (int mb_y = 0; mb_y < (avctx->height + 15) / 16; mb_y++) +for (int mb_x = 0; mb_x < (avctx->width + 15) / 16; mb_x++) for (int b = 0; b < (yuv20p_half ? 4 : 6); b++) { int luma_block = yuv20p_half ? 2 : 4; const VLCElem * dc_vlc = b < luma_block ? luma_dc_vlc : chroma_dc_vlc; @@ -228,8 +228,8 @@ static int lead_decode_frame(AVCodecContext *avctx, AVFrame * frame, } } else { for (int f = 0; f < fields; f++) -for (int j = 0; j < avctx->height / fields / 8; j++) -for (int i = 0; i < avctx->width / 8; i++) +for (int j = 0; j < (avctx->height + 7) / fields / 8; j++) +for (int i = 0; i < (avctx->width + 7) / 8; i++) for (int plane = 0; plane < 3; plane++) { const VLCElem * dc_vlc = !plane ? luma_dc_vlc : chroma_dc_vlc; int dc_bits= !plane ? LUMA_DC_BITS : CHROMA_DC_BITS; ___ 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/lead: support format 0x0
ffmpeg | branch: master | Peter Ross | Sun Nov 12 10:55:24 2023 +1100| [37702e20663dc8111534229af551763c2a954e73] | committer: Peter Ross avcodec/lead: support format 0x0 Fixes ticket #10660. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=37702e20663dc8111534229af551763c2a954e73 --- libavcodec/leaddec.c | 45 +++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/libavcodec/leaddec.c b/libavcodec/leaddec.c index 07b226941f..f7d31681b8 100644 --- a/libavcodec/leaddec.c +++ b/libavcodec/leaddec.c @@ -142,7 +142,7 @@ static int lead_decode_frame(AVCodecContext *avctx, AVFrame * frame, { LeadContext *s = avctx->priv_data; const uint8_t * buf = avpkt->data; -int ret, format, yuv20p_half = 0, fields = 1, q, size; +int ret, format, zero = 0, yuv20p_half = 0, fields = 1, q, size; GetBitContext gb; int16_t dc_pred[3] = {0, 0, 0}; uint16_t dequant[2][64]; @@ -152,6 +152,10 @@ static int lead_decode_frame(AVCodecContext *avctx, AVFrame * frame, format = AV_RL16(buf + 4); switch(format) { +case 0x0: +zero = 1; +avctx->pix_fmt = AV_PIX_FMT_YUV420P; +break; case 0x8000: yuv20p_half = 1; // fall-through @@ -194,7 +198,44 @@ static int lead_decode_frame(AVCodecContext *avctx, AVFrame * frame, init_get_bits8(&gb, s->bitstream_buf, size); -if (avctx->pix_fmt == AV_PIX_FMT_YUV420P) { +if (avctx->pix_fmt == AV_PIX_FMT_YUV420P && zero) { +for (int mb_y = 0; mb_y < avctx->height / 8; mb_y++) +for (int mb_x = 0; mb_x < avctx->width / 16; mb_x++) +for (int b = 0; b < 4; b++) { +int luma_block = 2; +const VLCElem * dc_vlc = b < luma_block ? luma_dc_vlc : chroma_dc_vlc; +int dc_bits= b < luma_block ? LUMA_DC_BITS : CHROMA_DC_BITS; +const VLCElem * ac_vlc = b < luma_block ? luma_ac_vlc : chroma_ac_vlc; +int ac_bits= b < luma_block ? LUMA_AC_BITS : CHROMA_AC_BITS; +int plane = b < luma_block ? 0 : b - 1; +int x, y, yclip; + +if (b < luma_block) { +y = 8*mb_y + 8*(b >> 1); +x = 16*mb_x + 8*(b & 1); +yclip = 0; +} else { +y = 4*mb_y; +x = 8*mb_x; +yclip = y + 8 >= avctx->height / 2; +} + +if (yclip) { +uint8_t tmp[64]; +ret = decode_block(s, &gb, dc_vlc, dc_bits, ac_vlc, ac_bits, +dc_pred + plane, dequant[!(b < 4)], tmp, 8); +for (int yy = 0; yy < 8 && y + yy < avctx->height / 2; yy++) +memcpy(frame->data[plane] + (y+yy)*frame->linesize[plane] + x, tmp + yy, 8); +} else { +ret = decode_block(s, &gb, dc_vlc, dc_bits, ac_vlc, ac_bits, +dc_pred + plane, dequant[!(b < 4)], +frame->data[plane] + y*frame->linesize[plane] + x, +frame->linesize[plane]); +} +if (ret < 0) +return ret; +} +} else if (avctx->pix_fmt == AV_PIX_FMT_YUV420P) { for (int mb_y = 0; mb_y < (avctx->height + 15) / 16; mb_y++) for (int mb_x = 0; mb_x < (avctx->width + 15) / 16; mb_x++) for (int b = 0; b < (yuv20p_half ? 4 : 6); b++) { ___ 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".