diff options
author | Anton Khirnov <anton@khirnov.net> | 2022-01-07 11:41:42 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-02-07 00:31:23 +0100 |
commit | 5fe2c3773496bb79392646dddc1415adb3b6d3d7 (patch) | |
tree | 41f0da3a94b1d5a64897b46271be1f5108d3d465 | |
parent | ea511196a6c85eb433e10cdbecb0b2c722faf20d (diff) | |
download | ffmpeg-5fe2c3773496bb79392646dddc1415adb3b6d3d7.tar.gz |
lavf/swfenc: switch to new FIFO API
-rw-r--r-- | libavformat/swfenc.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/libavformat/swfenc.c b/libavformat/swfenc.c index 1fd2ad81a3..9eb22ee9b3 100644 --- a/libavformat/swfenc.c +++ b/libavformat/swfenc.c @@ -38,7 +38,7 @@ typedef struct SWFEncContext { int swf_frame_number; int video_frame_number; int tag; - AVFifoBuffer *audio_fifo; + AVFifo *audio_fifo; AVCodecParameters *audio_par, *video_par; AVStream *video_st; } SWFEncContext; @@ -211,7 +211,7 @@ static int swf_write_header(AVFormatContext *s) } if (par->codec_id == AV_CODEC_ID_MP3) { swf->audio_par = par; - swf->audio_fifo= av_fifo_alloc(AUDIO_FIFO_SIZE); + swf->audio_fifo = av_fifo_alloc2(AUDIO_FIFO_SIZE, 1, 0); if (!swf->audio_fifo) return AVERROR(ENOMEM); } else { @@ -362,6 +362,12 @@ static int swf_write_header(AVFormatContext *s) return 0; } +static int fifo_avio_wrapper(void *opaque, void *buf, size_t *nb_elems) +{ + avio_write(opaque, buf, *nb_elems); + return 0; +} + static int swf_write_video(AVFormatContext *s, AVCodecParameters *par, const uint8_t *buf, int size, unsigned pkt_flags) { @@ -454,12 +460,12 @@ static int swf_write_video(AVFormatContext *s, swf->swf_frame_number++; /* streaming sound always should be placed just before showframe tags */ - if (swf->audio_par && av_fifo_size(swf->audio_fifo)) { - int frame_size = av_fifo_size(swf->audio_fifo); + if (swf->audio_par && av_fifo_can_read(swf->audio_fifo)) { + size_t frame_size = av_fifo_can_read(swf->audio_fifo); put_swf_tag(s, TAG_STREAMBLOCK | TAG_LONG); avio_wl16(pb, swf->sound_samples); avio_wl16(pb, 0); // seek samples - av_fifo_generic_read(swf->audio_fifo, pb, frame_size, (void*)avio_write); + av_fifo_read_to_cb(swf->audio_fifo, fifo_avio_wrapper, pb, &frame_size); put_swf_end_tag(s); /* update FIFO */ @@ -482,12 +488,12 @@ static int swf_write_audio(AVFormatContext *s, if (swf->swf_frame_number == 16000) av_log(s, AV_LOG_INFO, "warning: Flash Player limit of 16000 frames reached\n"); - if (av_fifo_size(swf->audio_fifo) + size > AUDIO_FIFO_SIZE) { + if (av_fifo_can_write(swf->audio_fifo) < size) { av_log(s, AV_LOG_ERROR, "audio fifo too small to mux audio essence\n"); return -1; } - av_fifo_generic_write(swf->audio_fifo, buf, size, NULL); + av_fifo_write(swf->audio_fifo, buf, size); swf->sound_samples += av_get_audio_frame_duration2(par, size); /* if audio only stream make sure we add swf frames */ @@ -535,7 +541,7 @@ static void swf_deinit(AVFormatContext *s) { SWFEncContext *swf = s->priv_data; - av_fifo_freep(&swf->audio_fifo); + av_fifo_freep2(&swf->audio_fifo); } #if CONFIG_SWF_MUXER |