|
|
@@ -102,6 +102,22 @@ int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time) |
|
|
|
{ |
|
|
|
MediaCodecDecContext *ctx = buffer->ctx; |
|
|
|
int released = atomic_fetch_add(&buffer->released, 1); |
|
|
|
|
|
|
|
if (!released && (ctx->delay_flush || buffer->serial == atomic_load(&ctx->serial))) { |
|
|
|
atomic_fetch_sub(&ctx->hw_buffer_count, 1); |
|
|
|
av_log(ctx->avctx, AV_LOG_DEBUG, |
|
|
|
"Rendering output buffer %zd (%p) ts=%"PRId64" with time=%"PRId64" [%d pending]\n", |
|
|
|
buffer->index, buffer, buffer->pts, time, atomic_load(&ctx->hw_buffer_count)); |
|
|
|
return ff_AMediaCodec_releaseOutputBufferAtTime(ctx->codec, buffer->index, time); |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
#include <stdlib.h> |
|
|
@@ -125,4 +141,9 @@ int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render) |
|
|
|
return AVERROR(ENOSYS); |
|
|
|
} |
|
|
|
|
|
|
|
int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time) |
|
|
|
{ |
|
|
|
return AVERROR(ENOSYS); |
|
|
|
} |
|
|
|
|
|
|
|
#endif |