[FFmpeg-cvslog] avformat/mpegts: remove decoding param from ts_packetsize option

2024-02-19 Thread James Almer
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

2024-02-19 Thread James Almer
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

2024-02-19 Thread Jan Ekström
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

2024-02-19 Thread Marton Balint
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Marton Balint
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

2024-02-19 Thread Marton Balint
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread Andreas Rheinhardt
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

2024-02-19 Thread James Almer
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

2024-02-19 Thread James Almer
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

2024-02-19 Thread James Almer
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

2024-02-19 Thread Peter Ross
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

2024-02-19 Thread Peter Ross
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".