This is useful for client programs to ask for nv12 surfaces instead of the current default (uyvy), since those are more efficient to decode to. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>tags/n2.7
| @@ -13,6 +13,9 @@ libavutil: 2014-08-09 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2015-xx-xx - xxxxxxx - lavc 56.23.0 | |||||
| Add av_vda_default_init2. | |||||
| 2015-xx-xx - xxxxxxx - lavu 54.12.0 | 2015-xx-xx - xxxxxxx - lavu 54.12.0 | ||||
| Add AV_LOG_TRACE for extremely verbose debugging. | Add AV_LOG_TRACE for extremely verbose debugging. | ||||
| @@ -28,15 +28,22 @@ AVVDAContext *av_vda_alloc_context(void) | |||||
| { | { | ||||
| AVVDAContext *ret = av_mallocz(sizeof(*ret)); | AVVDAContext *ret = av_mallocz(sizeof(*ret)); | ||||
| if (ret) | |||||
| if (ret) { | |||||
| ret->output_callback = ff_vda_output_callback; | ret->output_callback = ff_vda_output_callback; | ||||
| ret->cv_pix_fmt_type = kCVPixelFormatType_422YpCbCr8; | |||||
| } | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| int av_vda_default_init(AVCodecContext *avctx) | int av_vda_default_init(AVCodecContext *avctx) | ||||
| { | { | ||||
| avctx->hwaccel_context = av_vda_alloc_context(); | |||||
| return av_vda_default_init2(avctx, NULL); | |||||
| } | |||||
| int av_vda_default_init2(AVCodecContext *avctx, AVVDAContext *vdactx) | |||||
| { | |||||
| avctx->hwaccel_context = vdactx ?: av_vda_alloc_context(); | |||||
| if (!avctx->hwaccel_context) | if (!avctx->hwaccel_context) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| return ff_vda_default_init(avctx); | return ff_vda_default_init(avctx); | ||||
| @@ -153,6 +153,12 @@ typedef struct AVVDAContext { | |||||
| * Set by av_vda_alloc_context(). | * Set by av_vda_alloc_context(). | ||||
| */ | */ | ||||
| VDADecoderOutputCallback output_callback; | VDADecoderOutputCallback output_callback; | ||||
| /** | |||||
| * CVPixelBuffer Format Type that VDA will use for decoded frames; set by | |||||
| * the caller. | |||||
| */ | |||||
| OSType cv_pix_fmt_type; | |||||
| } AVVDAContext; | } AVVDAContext; | ||||
| /** | /** | ||||
| @@ -180,6 +186,17 @@ AVVDAContext *av_vda_alloc_context(void); | |||||
| */ | */ | ||||
| int av_vda_default_init(AVCodecContext *avctx); | int av_vda_default_init(AVCodecContext *avctx); | ||||
| /** | |||||
| * This is a convenience function that creates and sets up the VDA context using | |||||
| * an internal implementation. | |||||
| * | |||||
| * @param avctx the corresponding codec context | |||||
| * @param vdactx the VDA context to use | |||||
| * | |||||
| * @return >= 0 on success, a negative AVERROR code on failure | |||||
| */ | |||||
| int av_vda_default_init2(AVCodecContext *avctx, AVVDAContext *vdactx); | |||||
| /** | /** | ||||
| * This function must be called to free the VDA context initialized with | * This function must be called to free the VDA context initialized with | ||||
| * av_vda_default_init(). | * av_vda_default_init(). | ||||
| @@ -380,7 +380,7 @@ int ff_vda_default_init(AVCodecContext *avctx) | |||||
| CFMutableDictionaryRef buffer_attributes; | CFMutableDictionaryRef buffer_attributes; | ||||
| CFMutableDictionaryRef io_surface_properties; | CFMutableDictionaryRef io_surface_properties; | ||||
| CFNumberRef cv_pix_fmt; | CFNumberRef cv_pix_fmt; | ||||
| int32_t fmt = 'avc1', pix_fmt = kCVPixelFormatType_422YpCbCr8; | |||||
| int32_t fmt = 'avc1', pix_fmt = vda_ctx->cv_pix_fmt_type; | |||||
| // kCVPixelFormatType_420YpCbCr8Planar; | // kCVPixelFormatType_420YpCbCr8Planar; | ||||
| @@ -29,8 +29,8 @@ | |||||
| #include "libavutil/version.h" | #include "libavutil/version.h" | ||||
| #define LIBAVCODEC_VERSION_MAJOR 56 | #define LIBAVCODEC_VERSION_MAJOR 56 | ||||
| #define LIBAVCODEC_VERSION_MINOR 23 | |||||
| #define LIBAVCODEC_VERSION_MICRO 2 | |||||
| #define LIBAVCODEC_VERSION_MINOR 24 | |||||
| #define LIBAVCODEC_VERSION_MICRO 0 | |||||
| #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
| LIBAVCODEC_VERSION_MINOR, \ | LIBAVCODEC_VERSION_MINOR, \ | ||||