Browse Source

hwaccel: Support specific frame allocators

It would reduce the boilerplate code users have to write.
tags/n2.3
Luca Barbato 11 years ago
parent
commit
ebc29519d1
2 changed files with 12 additions and 0 deletions
  1. +5
    -0
      libavcodec/avcodec.h
  2. +7
    -0
      libavcodec/utils.c

+ 5
- 0
libavcodec/avcodec.h View File

@@ -2946,6 +2946,11 @@ typedef struct AVHWAccel {
*/
struct AVHWAccel *next;

/**
* Allocate a custom buffer
*/
int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame);

/**
* Called at the beginning of each frame or field picture.
*


+ 7
- 0
libavcodec/utils.c 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)
{
const AVHWAccel *hwaccel = avctx->hwaccel;
int override_dimensions = 1;
int ret;

@@ -657,6 +658,11 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
if (ret < 0)
return ret;

if (hwaccel && hwaccel->alloc_frame) {
ret = hwaccel->alloc_frame(avctx, frame);
goto end;
}

#if FF_API_GET_BUFFER
FF_DISABLE_DEPRECATION_WARNINGS
/*
@@ -775,6 +781,7 @@ FF_ENABLE_DEPRECATION_WARNINGS

ret = avctx->get_buffer2(avctx, frame, flags);

end:
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions) {
frame->width = avctx->width;
frame->height = avctx->height;


Loading…
Cancel
Save