Merge commit 'ebc29519d1634bfeb386c20a5d8a52837aae2436'
* commit 'ebc29519d1634bfeb386c20a5d8a52837aae2436': hwaccel: Support specific frame allocators Conflicts: libavcodec/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
c4fe50b954
@ -3242,6 +3242,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.
|
||||||
*
|
*
|
||||||
|
@ -850,6 +850,7 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
|
|||||||
|
|
||||||
static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
|
static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
|
||||||
{
|
{
|
||||||
|
const AVHWAccel *hwaccel = avctx->hwaccel;
|
||||||
int override_dimensions = 1;
|
int override_dimensions = 1;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -872,6 +873,11 @@ static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
|
|||||||
if ((ret = ff_init_buffer_info(avctx, frame)) < 0)
|
if ((ret = ff_init_buffer_info(avctx, frame)) < 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
|
||||||
/*
|
/*
|
||||||
@ -898,7 +904,7 @@ FF_DISABLE_DEPRECATION_WARNINGS
|
|||||||
* avcodec_default_get_buffer
|
* avcodec_default_get_buffer
|
||||||
*/
|
*/
|
||||||
if (frame->buf[0])
|
if (frame->buf[0])
|
||||||
goto end;
|
goto end0;
|
||||||
|
|
||||||
priv = av_mallocz(sizeof(*priv));
|
priv = av_mallocz(sizeof(*priv));
|
||||||
if (!priv) {
|
if (!priv) {
|
||||||
@ -974,7 +980,7 @@ do { \
|
|||||||
|
|
||||||
av_buffer_unref(&dummy_buf);
|
av_buffer_unref(&dummy_buf);
|
||||||
|
|
||||||
end:
|
end0:
|
||||||
frame->width = avctx->width;
|
frame->width = avctx->width;
|
||||||
frame->height = avctx->height;
|
frame->height = avctx->height;
|
||||||
|
|
||||||
@ -991,6 +997,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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user