mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-14 00:58:38 +02:00
Merge commit '202c2acc40a6de8758b44ab3f5c85ab250079734'
* commit '202c2acc40a6de8758b44ab3f5c85ab250079734': vda: remove async decoder leftovers Conflicts: libavcodec/vda_h264.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
a62fced394
@ -44,45 +44,7 @@ static void vda_decoder_callback (void *vda_hw_ctx,
|
|||||||
if (vda_ctx->cv_pix_fmt_type != CVPixelBufferGetPixelFormatType(image_buffer))
|
if (vda_ctx->cv_pix_fmt_type != CVPixelBufferGetPixelFormatType(image_buffer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (vda_ctx->use_sync_decoding) {
|
|
||||||
vda_ctx->cv_buffer = CVPixelBufferRetain(image_buffer);
|
vda_ctx->cv_buffer = CVPixelBufferRetain(image_buffer);
|
||||||
} else {
|
|
||||||
vda_frame *new_frame;
|
|
||||||
vda_frame *queue_walker;
|
|
||||||
|
|
||||||
if (!(new_frame = av_mallocz(sizeof(*new_frame))))
|
|
||||||
return;
|
|
||||||
|
|
||||||
new_frame->next_frame = NULL;
|
|
||||||
new_frame->cv_buffer = CVPixelBufferRetain(image_buffer);
|
|
||||||
new_frame->pts = vda_pts_from_dictionary(user_info);
|
|
||||||
|
|
||||||
pthread_mutex_lock(&vda_ctx->queue_mutex);
|
|
||||||
|
|
||||||
queue_walker = vda_ctx->queue;
|
|
||||||
|
|
||||||
if (!queue_walker || (new_frame->pts < queue_walker->pts)) {
|
|
||||||
/* we have an empty queue, or this frame earlier than the current queue head */
|
|
||||||
new_frame->next_frame = queue_walker;
|
|
||||||
vda_ctx->queue = new_frame;
|
|
||||||
} else {
|
|
||||||
/* walk the queue and insert this frame where it belongs in display order */
|
|
||||||
vda_frame *next_frame;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
next_frame = queue_walker->next_frame;
|
|
||||||
|
|
||||||
if (!next_frame || (new_frame->pts < next_frame->pts)) {
|
|
||||||
new_frame->next_frame = next_frame;
|
|
||||||
queue_walker->next_frame = new_frame;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
queue_walker = next_frame;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&vda_ctx->queue_mutex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vda_sync_decode(struct vda_context *vda_ctx)
|
static int vda_sync_decode(struct vda_context *vda_ctx)
|
||||||
@ -156,14 +118,8 @@ static int vda_h264_end_frame(AVCodecContext *avctx)
|
|||||||
if (!vda_ctx->decoder || !vda_ctx->priv_bitstream)
|
if (!vda_ctx->decoder || !vda_ctx->priv_bitstream)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (vda_ctx->use_sync_decoding) {
|
|
||||||
status = vda_sync_decode(vda_ctx);
|
status = vda_sync_decode(vda_ctx);
|
||||||
frame->data[3] = (void*)vda_ctx->cv_buffer;
|
frame->data[3] = (void*)vda_ctx->cv_buffer;
|
||||||
} else {
|
|
||||||
status = vda_decoder_decode(vda_ctx, vda_ctx->priv_bitstream,
|
|
||||||
vda_ctx->priv_bitstream_size,
|
|
||||||
frame->reordered_opaque);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status)
|
if (status)
|
||||||
av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status);
|
av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user