* [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