Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer
@ 2024-01-31  9:31 Andreas Rheinhardt
  2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 2/3] avformat/iamf_writer, iamfenc: Avoid allocations when using dyn buffers Andreas Rheinhardt
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2024-01-31  9:31 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/iamf_writer.c | 28 ++++++----------------------
 1 file changed, 6 insertions(+), 22 deletions(-)

diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c
index 99602ae204..f665f45b7a 100644
--- a/libavformat/iamf_writer.c
+++ b/libavformat/iamf_writer.c
@@ -807,31 +807,15 @@ static int iamf_write_mixing_presentation(const IAMFContext *iamf,
 
 int ff_iamf_write_descriptors(const IAMFContext *iamf, AVIOContext *pb, void *log_ctx)
 {
-    uint8_t header[MAX_IAMF_OBU_HEADER_SIZE];
-    PutBitContext pbc;
-    AVIOContext *dyn_bc;
-    uint8_t *dyn_buf = NULL;
-    int dyn_size;
-
-    int ret = avio_open_dyn_buf(&dyn_bc);
-    if (ret < 0)
-        return ret;
+    int ret;
 
     // Sequence Header
-    init_put_bits(&pbc, header, sizeof(header));
-    put_bits(&pbc, 5, IAMF_OBU_IA_SEQUENCE_HEADER);
-    put_bits(&pbc, 3, 0);
-    flush_put_bits(&pbc);
+    avio_w8(pb, IAMF_OBU_IA_SEQUENCE_HEADER << 3);
 
-    avio_write(dyn_bc, header, put_bytes_count(&pbc, 1));
-    ffio_write_leb(dyn_bc, 6);
-    avio_wb32(dyn_bc, MKBETAG('i','a','m','f'));
-    avio_w8(dyn_bc, iamf->nb_audio_elements > 1); // primary_profile
-    avio_w8(dyn_bc, iamf->nb_audio_elements > 1); // additional_profile
-
-    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
-    avio_write(pb, dyn_buf, dyn_size);
-    av_free(dyn_buf);
+    ffio_write_leb(pb, 6);
+    avio_wb32(pb, MKBETAG('i','a','m','f'));
+    avio_w8(pb, iamf->nb_audio_elements > 1); // primary_profile
+    avio_w8(pb, iamf->nb_audio_elements > 1); // additional_profile
 
     for (int i = 0; i < iamf->nb_codec_configs; i++) {
         ret = iamf_write_codec_config(iamf, iamf->codec_configs[i], pb);
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 2/3] avformat/iamf_writer, iamfenc: Avoid allocations when using dyn buffers
  2024-01-31  9:31 [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
@ 2024-01-31  9:32 ` Andreas Rheinhardt
  2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 3/3] avformat/iamf*: Improve included headers Andreas Rheinhardt
  2024-02-02 11:30 ` [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
  2 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2024-01-31  9:32 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Use avio_get_dyn_buf()+ffio_free_dyn_buf() instead of
avio_close_dyn_buf()+av_free(). This saves an allocation
(and memcpy) in case all the data fits in the AVIOContext's
write buffer.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/iamf_writer.c | 12 ++++++------
 libavformat/iamfenc.c     |  8 ++++----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c
index f665f45b7a..5850c53c8e 100644
--- a/libavformat/iamf_writer.c
+++ b/libavformat/iamf_writer.c
@@ -453,11 +453,11 @@ static int iamf_write_codec_config(const IAMFContext *iamf,
     put_bits(&pbc, 3, 0);
     flush_put_bits(&pbc);
 
-    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
+    dyn_size = avio_get_dyn_buf(dyn_bc, &dyn_buf);
     avio_write(pb, header, put_bytes_count(&pbc, 1));
     ffio_write_leb(pb, dyn_size);
     avio_write(pb, dyn_buf, dyn_size);
-    av_free(dyn_buf);
+    ffio_free_dyn_buf(&dyn_bc);
 
     return 0;
 }
@@ -660,11 +660,11 @@ static int iamf_write_audio_element(const IAMFContext *iamf,
     put_bits(&pbc, 3, 0);
     flush_put_bits(&pbc);
 
-    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
+    dyn_size = avio_get_dyn_buf(dyn_bc, &dyn_buf);
     avio_write(pb, header, put_bytes_count(&pbc, 1));
     ffio_write_leb(pb, dyn_size);
     avio_write(pb, dyn_buf, dyn_size);
-    av_free(dyn_buf);
+    ffio_free_dyn_buf(&dyn_bc);
 
     return 0;
 }
@@ -796,11 +796,11 @@ static int iamf_write_mixing_presentation(const IAMFContext *iamf,
     put_bits(&pbc, 3, 0);
     flush_put_bits(&pbc);
 
-    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
+    dyn_size = avio_get_dyn_buf(dyn_bc, &dyn_buf);
     avio_write(pb, header, put_bytes_count(&pbc, 1));
     ffio_write_leb(pb, dyn_size);
     avio_write(pb, dyn_buf, dyn_size);
-    av_free(dyn_buf);
+    ffio_free_dyn_buf(&dyn_bc);
 
     return 0;
 }
diff --git a/libavformat/iamfenc.c b/libavformat/iamfenc.c
index a02f84035a..e1003d5495 100644
--- a/libavformat/iamfenc.c
+++ b/libavformat/iamfenc.c
@@ -257,10 +257,10 @@ static int write_parameter_block(AVFormatContext *s, const AVIAMFParamDefinition
         }
     }
 
-    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
+    dyn_size = avio_get_dyn_buf(dyn_bc, &dyn_buf);
     ffio_write_leb(s->pb, dyn_size);
     avio_write(s->pb, dyn_buf, dyn_size);
-    av_free(dyn_buf);
+    ffio_free_dyn_buf(&dyn_bc);
 
     return 0;
 }
@@ -340,10 +340,10 @@ static int iamf_write_packet(AVFormatContext *s, AVPacket *pkt)
     if (st->id > 17)
         ffio_write_leb(dyn_bc, st->id);
 
-    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
+    dyn_size = avio_get_dyn_buf(dyn_bc, &dyn_buf);
     ffio_write_leb(s->pb, dyn_size + pkt->size);
     avio_write(s->pb, dyn_buf, dyn_size);
-    av_free(dyn_buf);
+    ffio_free_dyn_buf(&dyn_bc);
     avio_write(s->pb, pkt->data, pkt->size);
 
     return 0;
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 3/3] avformat/iamf*: Improve included headers
  2024-01-31  9:31 [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
  2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 2/3] avformat/iamf_writer, iamfenc: Avoid allocations when using dyn buffers Andreas Rheinhardt
@ 2024-01-31  9:32 ` Andreas Rheinhardt
  2024-02-02 11:30 ` [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
  2 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2024-01-31  9:32 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/iamf.h        | 2 +-
 libavformat/iamf_parse.h  | 1 -
 libavformat/iamf_writer.c | 2 --
 libavformat/iamf_writer.h | 3 +--
 libavformat/iamfdec.c     | 3 ---
 libavformat/iamfenc.c     | 1 -
 6 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/libavformat/iamf.h b/libavformat/iamf.h
index ce94cb5bc4..d88a24c435 100644
--- a/libavformat/iamf.h
+++ b/libavformat/iamf.h
@@ -22,13 +22,13 @@
 #ifndef AVFORMAT_IAMF_H
 #define AVFORMAT_IAMF_H
 
+#include <stddef.h>
 #include <stdint.h>
 
 #include "libavutil/channel_layout.h"
 #include "libavutil/iamf.h"
 #include "libavcodec/codec_id.h"
 #include "libavcodec/codec_par.h"
-#include "avformat.h"
 
 #define MAX_IAMF_OBU_HEADER_SIZE (1 + 8 * 3)
 
diff --git a/libavformat/iamf_parse.h b/libavformat/iamf_parse.h
index f4f297ecd4..bb506486d7 100644
--- a/libavformat/iamf_parse.h
+++ b/libavformat/iamf_parse.h
@@ -24,7 +24,6 @@
 
 #include <stdint.h>
 
-#include "libavutil/iamf.h"
 #include "avio.h"
 #include "iamf.h"
 
diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c
index 5850c53c8e..1a360dee2f 100644
--- a/libavformat/iamf_writer.c
+++ b/libavformat/iamf_writer.c
@@ -24,8 +24,6 @@
 #include "libavutil/iamf.h"
 #include "libavutil/mem.h"
 #include "libavcodec/get_bits.h"
-#include "libavcodec/flac.h"
-#include "libavcodec/mpeg4audio.h"
 #include "libavcodec/put_bits.h"
 #include "avformat.h"
 #include "avio_internal.h"
diff --git a/libavformat/iamf_writer.h b/libavformat/iamf_writer.h
index 93354670b8..24f1c14769 100644
--- a/libavformat/iamf_writer.h
+++ b/libavformat/iamf_writer.h
@@ -22,9 +22,8 @@
 #ifndef AVFORMAT_IAMF_WRITER_H
 #define AVFORMAT_IAMF_WRITER_H
 
-#include <stdint.h>
+#include <stddef.h>
 
-#include "libavutil/common.h"
 #include "avformat.h"
 #include "avio.h"
 #include "iamf.h"
diff --git a/libavformat/iamfdec.c b/libavformat/iamfdec.c
index 3b8d2ff358..99622f697b 100644
--- a/libavformat/iamfdec.c
+++ b/libavformat/iamfdec.c
@@ -19,8 +19,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "config_components.h"
-
 #include "libavutil/avassert.h"
 #include "libavutil/iamf.h"
 #include "libavutil/intreadwrite.h"
@@ -28,7 +26,6 @@
 #include "libavcodec/mathops.h"
 #include "avformat.h"
 #include "avio_internal.h"
-#include "demux.h"
 #include "iamf.h"
 #include "iamf_parse.h"
 #include "internal.h"
diff --git a/libavformat/iamfenc.c b/libavformat/iamfenc.c
index e1003d5495..b588a507bb 100644
--- a/libavformat/iamfenc.c
+++ b/libavformat/iamfenc.c
@@ -24,7 +24,6 @@
 #include "libavutil/avassert.h"
 #include "libavutil/common.h"
 #include "libavutil/iamf.h"
-#include "libavcodec/get_bits.h"
 #include "libavcodec/put_bits.h"
 #include "avformat.h"
 #include "avio_internal.h"
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer
  2024-01-31  9:31 [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
  2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 2/3] avformat/iamf_writer, iamfenc: Avoid allocations when using dyn buffers Andreas Rheinhardt
  2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 3/3] avformat/iamf*: Improve included headers Andreas Rheinhardt
@ 2024-02-02 11:30 ` Andreas Rheinhardt
  2024-02-02 12:32   ` James Almer
  2 siblings, 1 reply; 5+ messages in thread
From: Andreas Rheinhardt @ 2024-02-02 11:30 UTC (permalink / raw)
  To: ffmpeg-devel

Andreas Rheinhardt:
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
>  libavformat/iamf_writer.c | 28 ++++++----------------------
>  1 file changed, 6 insertions(+), 22 deletions(-)
> 
> diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c
> index 99602ae204..f665f45b7a 100644
> --- a/libavformat/iamf_writer.c
> +++ b/libavformat/iamf_writer.c
> @@ -807,31 +807,15 @@ static int iamf_write_mixing_presentation(const IAMFContext *iamf,
>  
>  int ff_iamf_write_descriptors(const IAMFContext *iamf, AVIOContext *pb, void *log_ctx)
>  {
> -    uint8_t header[MAX_IAMF_OBU_HEADER_SIZE];
> -    PutBitContext pbc;
> -    AVIOContext *dyn_bc;
> -    uint8_t *dyn_buf = NULL;
> -    int dyn_size;
> -
> -    int ret = avio_open_dyn_buf(&dyn_bc);
> -    if (ret < 0)
> -        return ret;
> +    int ret;
>  
>      // Sequence Header
> -    init_put_bits(&pbc, header, sizeof(header));
> -    put_bits(&pbc, 5, IAMF_OBU_IA_SEQUENCE_HEADER);
> -    put_bits(&pbc, 3, 0);
> -    flush_put_bits(&pbc);
> +    avio_w8(pb, IAMF_OBU_IA_SEQUENCE_HEADER << 3);
>  
> -    avio_write(dyn_bc, header, put_bytes_count(&pbc, 1));
> -    ffio_write_leb(dyn_bc, 6);
> -    avio_wb32(dyn_bc, MKBETAG('i','a','m','f'));
> -    avio_w8(dyn_bc, iamf->nb_audio_elements > 1); // primary_profile
> -    avio_w8(dyn_bc, iamf->nb_audio_elements > 1); // additional_profile
> -
> -    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
> -    avio_write(pb, dyn_buf, dyn_size);
> -    av_free(dyn_buf);
> +    ffio_write_leb(pb, 6);
> +    avio_wb32(pb, MKBETAG('i','a','m','f'));
> +    avio_w8(pb, iamf->nb_audio_elements > 1); // primary_profile
> +    avio_w8(pb, iamf->nb_audio_elements > 1); // additional_profile
>  
>      for (int i = 0; i < iamf->nb_codec_configs; i++) {
>          ret = iamf_write_codec_config(iamf, iamf->codec_configs[i], pb);

Will apply this patchset tomorrow unless there are objections.

- Andreas

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer
  2024-02-02 11:30 ` [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
@ 2024-02-02 12:32   ` James Almer
  0 siblings, 0 replies; 5+ messages in thread
From: James Almer @ 2024-02-02 12:32 UTC (permalink / raw)
  To: ffmpeg-devel

On 2/2/2024 8:30 AM, Andreas Rheinhardt wrote:
> Andreas Rheinhardt:
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
>> ---
>>   libavformat/iamf_writer.c | 28 ++++++----------------------
>>   1 file changed, 6 insertions(+), 22 deletions(-)
>>
>> diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c
>> index 99602ae204..f665f45b7a 100644
>> --- a/libavformat/iamf_writer.c
>> +++ b/libavformat/iamf_writer.c
>> @@ -807,31 +807,15 @@ static int iamf_write_mixing_presentation(const IAMFContext *iamf,
>>   
>>   int ff_iamf_write_descriptors(const IAMFContext *iamf, AVIOContext *pb, void *log_ctx)
>>   {
>> -    uint8_t header[MAX_IAMF_OBU_HEADER_SIZE];
>> -    PutBitContext pbc;
>> -    AVIOContext *dyn_bc;
>> -    uint8_t *dyn_buf = NULL;
>> -    int dyn_size;
>> -
>> -    int ret = avio_open_dyn_buf(&dyn_bc);
>> -    if (ret < 0)
>> -        return ret;
>> +    int ret;
>>   
>>       // Sequence Header
>> -    init_put_bits(&pbc, header, sizeof(header));
>> -    put_bits(&pbc, 5, IAMF_OBU_IA_SEQUENCE_HEADER);
>> -    put_bits(&pbc, 3, 0);
>> -    flush_put_bits(&pbc);
>> +    avio_w8(pb, IAMF_OBU_IA_SEQUENCE_HEADER << 3);
>>   
>> -    avio_write(dyn_bc, header, put_bytes_count(&pbc, 1));
>> -    ffio_write_leb(dyn_bc, 6);
>> -    avio_wb32(dyn_bc, MKBETAG('i','a','m','f'));
>> -    avio_w8(dyn_bc, iamf->nb_audio_elements > 1); // primary_profile
>> -    avio_w8(dyn_bc, iamf->nb_audio_elements > 1); // additional_profile
>> -
>> -    dyn_size = avio_close_dyn_buf(dyn_bc, &dyn_buf);
>> -    avio_write(pb, dyn_buf, dyn_size);
>> -    av_free(dyn_buf);
>> +    ffio_write_leb(pb, 6);
>> +    avio_wb32(pb, MKBETAG('i','a','m','f'));
>> +    avio_w8(pb, iamf->nb_audio_elements > 1); // primary_profile
>> +    avio_w8(pb, iamf->nb_audio_elements > 1); // additional_profile
>>   
>>       for (int i = 0; i < iamf->nb_codec_configs; i++) {
>>           ret = iamf_write_codec_config(iamf, iamf->codec_configs[i], pb);
> 
> Will apply this patchset tomorrow unless there are objections.
> 
> - Andreas

Set LGTM, thanks.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-02-02 12:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-31  9:31 [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 2/3] avformat/iamf_writer, iamfenc: Avoid allocations when using dyn buffers Andreas Rheinhardt
2024-01-31  9:32 ` [FFmpeg-devel] [PATCH 3/3] avformat/iamf*: Improve included headers Andreas Rheinhardt
2024-02-02 11:30 ` [FFmpeg-devel] [PATCH 1/3] avformat/iamf_writer: Avoid using dynamic buffer Andreas Rheinhardt
2024-02-02 12:32   ` James Almer

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git