[FFmpeg-devel] [PATCH] avformat/tee: signal EOF if no more output is to be published.
Marton Balint
cus at passwd.hu
Fri Feb 3 00:47:51 EET 2023
On Thu, 2 Feb 2023, Gyan Doshi wrote:
> Prior to 2d924b3a630, ffmpeg.c would exit if any packet write failed. tee's
> write_packet seemingly relied on that to enforce its abort failure policy.
>> From 2d924b3a630, ffmpeg only closes that OutputStream and keeps on
> sending packets of other streams.
Hmm, are you sure? I glanced at the code and it seems to me that any
failure of av_interleaved_write_frame() will cause the muxing thread to
exit. So I don't quite see how other streams can receive packets.
Thanks,
Marton
This breaks the abort behaviour
> with the tee muxer when there are multiple streams, leaving the ffmpeg
> process running beyond the intended point of abortion.
>
> Fixed by signaling EOF in tee's write_packet if an abort is required.
> ---
> libavformat/tee.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/tee.c b/libavformat/tee.c
> index dd408dd096..8362cdc972 100644
> --- a/libavformat/tee.c
> +++ b/libavformat/tee.c
> @@ -54,6 +54,7 @@ typedef struct TeeContext {
> const AVClass *class;
> unsigned nb_slaves;
> unsigned nb_alive;
> + int abort;
> TeeSlave *slaves;
> int use_fifo;
> AVDictionary *fifo_options;
> @@ -438,6 +439,7 @@ static int tee_process_slave_failure(AVFormatContext *avf, unsigned slave_idx, i
> return err_n;
> } else if (tee_slave->on_fail == ON_SLAVE_FAILURE_ABORT) {
> av_log(avf, AV_LOG_ERROR, "Slave muxer #%u failed, aborting.\n", slave_idx);
> + tee->abort = 1;
> return err_n;
> } else {
> av_log(avf, AV_LOG_ERROR, "Slave muxer #%u failed: %s, continuing with %u/%u slaves.\n",
> @@ -599,7 +601,7 @@ static int tee_write_packet(AVFormatContext *avf, AVPacket *pkt)
> ret_all = ret;
> }
> }
> - return ret_all;
> + return (tee->abort || !tee->nb_alive) ? AVERROR_EOF : ret_all;
> }
>
> const AVOutputFormat ff_tee_muxer = {
> --
> 2.39.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
More information about the ffmpeg-devel
mailing list