mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avcodec/mediacodecdec: wait on first frame after input buffers are full
The output_buffer_count==0 special case is no longer required, and can cause spurious EAGAIN to surface to the user when input buffers are filled up. Since the caller now knows if the decoder is accepting new input (via current_input_buffer>=0), let the wait parameter control whether we block or not. Signed-off-by: Aman Gupta <aman@tmm1.net> Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>
This commit is contained in:
parent
f6681feda6
commit
a75bb5496a
@ -443,8 +443,6 @@ static int mediacodec_dec_flush_codec(AVCodecContext *avctx, MediaCodecDecContex
|
||||
FFAMediaCodec *codec = s->codec;
|
||||
int status;
|
||||
|
||||
s->output_buffer_count = 0;
|
||||
|
||||
s->draining = 0;
|
||||
s->flushing = 0;
|
||||
s->eos = 0;
|
||||
@ -672,10 +670,7 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s,
|
||||
/* If the codec is flushing or need to be flushed, block for a fair
|
||||
* amount of time to ensure we got a frame */
|
||||
output_dequeue_timeout_us = OUTPUT_DEQUEUE_BLOCK_TIMEOUT_US;
|
||||
} else if (s->output_buffer_count == 0 || !wait) {
|
||||
/* If the codec hasn't produced any frames, do not block so we
|
||||
* can push data to it as fast as possible, and get the first
|
||||
* frame */
|
||||
} else if (!wait) {
|
||||
output_dequeue_timeout_us = 0;
|
||||
}
|
||||
|
||||
@ -709,7 +704,6 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s,
|
||||
}
|
||||
}
|
||||
|
||||
s->output_buffer_count++;
|
||||
return 0;
|
||||
} else {
|
||||
status = ff_AMediaCodec_releaseOutputBuffer(codec, index, 0);
|
||||
|
@ -64,7 +64,6 @@ typedef struct MediaCodecDecContext {
|
||||
int display_width;
|
||||
int display_height;
|
||||
|
||||
uint64_t output_buffer_count;
|
||||
ssize_t current_input_buffer;
|
||||
|
||||
bool delay_flush;
|
||||
|
Loading…
Reference in New Issue
Block a user