1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-21 10:55:51 +02:00

hwaccel: Support specific frame allocators

It would reduce the boilerplate code users have to write.
This commit is contained in:
Luca Barbato 2014-05-08 14:43:23 +02:00
parent a871ef0cc9
commit ebc29519d1
2 changed files with 12 additions and 0 deletions

View File

@ -2946,6 +2946,11 @@ typedef struct AVHWAccel {
*/ */
struct AVHWAccel *next; struct AVHWAccel *next;
/**
* Allocate a custom buffer
*/
int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame);
/** /**
* Called at the beginning of each frame or field picture. * Called at the beginning of each frame or field picture.
* *

View File

@ -604,6 +604,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags) int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
{ {
const AVHWAccel *hwaccel = avctx->hwaccel;
int override_dimensions = 1; int override_dimensions = 1;
int ret; int ret;
@ -657,6 +658,11 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
if (ret < 0) if (ret < 0)
return ret; return ret;
if (hwaccel && hwaccel->alloc_frame) {
ret = hwaccel->alloc_frame(avctx, frame);
goto end;
}
#if FF_API_GET_BUFFER #if FF_API_GET_BUFFER
FF_DISABLE_DEPRECATION_WARNINGS FF_DISABLE_DEPRECATION_WARNINGS
/* /*
@ -775,6 +781,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
ret = avctx->get_buffer2(avctx, frame, flags); ret = avctx->get_buffer2(avctx, frame, flags);
end:
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions) { if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions) {
frame->width = avctx->width; frame->width = avctx->width;
frame->height = avctx->height; frame->height = avctx->height;