On Sun, 25 Feb 2024, Mark Thompson wrote:

On 25/02/2024 15:01, Marton Balint wrote:
 On Sun, 25 Feb 2024, Mark Thompson wrote:

 Since e0da916b8f5b079a4865eef7f64863f50785463d the ffmpeg utility has
 held multiple frames output by the decoder in internal queues without
 telling the decoder that it is going to do so.  When the decoder has a
 fixed-size pool of frames (common in some hardware APIs where the output
 frames must be stored as an array texture) this could lead to the pool
 being exhausted and the decoder getting stuck.  Fix this by telling the
 decoder to allocate additional frames according to the queue size.

 [...]

 diff --git a/fftools/ffmpeg_sched.h b/fftools/ffmpeg_sched.h
 index 95f9c1d4db..315053ae42 100644
 --- a/fftools/ffmpeg_sched.h
 +++ b/fftools/ffmpeg_sched.h
 @@ -233,6 +233,13 @@ int sch_add_filtergraph(Scheduler *sch, unsigned
 nb_inputs, unsigned nb_outputs,
  */
  int sch_add_mux(Scheduler *sch, SchThreadFunc func, int (*init)(void *),
                 void *ctx, int sdp_auto, unsigned thread_queue_size);
 +
 +/**
 + * Default size of a thread queue, used if thread_queue_size is not set
 on a
 + * call to sch_add_mux().

 Not precisely, as this thread queue size is used for both frame queues and
 packet queues.

Yes, it applies to both - hence the description I added not mentioning frames or packets.

For some reason I assumed the description implies it is only used in sched_add_mux().


 Historically the thread_queue_size option was introduced for packet queues
 for demuxed packets, and recently on the output for muxing packets.

 If we want to make the frame queue size adjustable as well, I think it
 should be a separate option and maybe a separate constant should be added
 for its default value.

This part is not changing anything about the queue sizes, it is just moving the existing magic number hidden in queue_alloc() to a named constant.

I don't have any motivation to make the frame queue size adjustable; I added the assert so that if someone wants to do that in future they know that they need to take additional action to avoid breaking some decoders again.

 + */
 +#define DEFAULT_THREAD_QUEUE_SIZE 8

Would you prefer that I make distinct DEFAULT_FRAME_THREAD_QUEUE_SIZE and DEFAULT_PACKET_THREAD_QUEUE_SIZE (both 8?) and replace the magic number in queue_alloc() with a selection between them based on the type? I have no strong opinion on that, so I don't mind doing it if you would prefer it.

I think its worth doing.

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

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

Reply via email to