mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge commit 'c220a60f92dde9c7c118fc4deddff5c1f617cda9'
* commit 'c220a60f92dde9c7c118fc4deddff5c1f617cda9': vdpau: add helper for surface chroma type and size Conflicts: libavcodec/vdpau.c libavcodec/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
d7aaeea540
@ -15,6 +15,9 @@ libavutil: 2014-08-09
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
201x-xx-xx - xxxxxxx - lavc 56.10.0 - vdpau.h
|
||||||
|
Add av_vdpau_get_surface_parameters().
|
||||||
|
|
||||||
201x-xx-xx - xxxxxxx - lavc 56.9.0 - avcodec.h
|
201x-xx-xx - xxxxxxx - lavc 56.9.0 - avcodec.h
|
||||||
Add AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH flag to av_vdpau_bind_context().
|
Add AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH flag to av_vdpau_bind_context().
|
||||||
|
|
||||||
|
@ -71,6 +71,46 @@ AVVDPAUContext *av_alloc_vdpaucontext(void)
|
|||||||
|
|
||||||
MAKE_ACCESSORS(AVVDPAUContext, vdpau_hwaccel, AVVDPAU_Render2, render2)
|
MAKE_ACCESSORS(AVVDPAUContext, vdpau_hwaccel, AVVDPAU_Render2, render2)
|
||||||
|
|
||||||
|
int av_vdpau_get_surface_parameters(AVCodecContext *avctx,
|
||||||
|
VdpChromaType *type,
|
||||||
|
uint32_t *width, uint32_t *height)
|
||||||
|
{
|
||||||
|
VdpChromaType t;
|
||||||
|
uint32_t w = avctx->coded_width;
|
||||||
|
uint32_t h = avctx->coded_height;
|
||||||
|
|
||||||
|
/* See <vdpau/vdpau.h> for per-type alignment constraints. */
|
||||||
|
switch (avctx->sw_pix_fmt) {
|
||||||
|
case AV_PIX_FMT_YUV420P:
|
||||||
|
case AV_PIX_FMT_YUVJ420P:
|
||||||
|
t = VDP_CHROMA_TYPE_420;
|
||||||
|
w = (w + 1) & ~1;
|
||||||
|
h = (h + 3) & ~3;
|
||||||
|
break;
|
||||||
|
case AV_PIX_FMT_YUV422P:
|
||||||
|
case AV_PIX_FMT_YUVJ422P:
|
||||||
|
t = VDP_CHROMA_TYPE_422;
|
||||||
|
w = (w + 1) & ~1;
|
||||||
|
h = (h + 1) & ~1;
|
||||||
|
break;
|
||||||
|
case AV_PIX_FMT_YUV444P:
|
||||||
|
case AV_PIX_FMT_YUVJ444P:
|
||||||
|
t = VDP_CHROMA_TYPE_444;
|
||||||
|
h = (h + 1) & ~1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return AVERROR(ENOSYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
*type = t;
|
||||||
|
if (width)
|
||||||
|
*width = w;
|
||||||
|
if (height)
|
||||||
|
*height = h;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
|
int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
|
||||||
int level)
|
int level)
|
||||||
{
|
{
|
||||||
@ -83,9 +123,9 @@ int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
|
|||||||
VdpStatus status;
|
VdpStatus status;
|
||||||
VdpBool supported;
|
VdpBool supported;
|
||||||
uint32_t max_level, max_mb, max_width, max_height;
|
uint32_t max_level, max_mb, max_width, max_height;
|
||||||
/* See vdpau/vdpau.h for alignment constraints. */
|
VdpChromaType type;
|
||||||
uint32_t width = (avctx->coded_width + 1) & ~1;
|
uint32_t width;
|
||||||
uint32_t height = (avctx->coded_height + 3) & ~3;
|
uint32_t height;
|
||||||
|
|
||||||
vdctx->width = UINT32_MAX;
|
vdctx->width = UINT32_MAX;
|
||||||
vdctx->height = UINT32_MAX;
|
vdctx->height = UINT32_MAX;
|
||||||
@ -112,6 +152,9 @@ int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
|
|||||||
else if (level < 0)
|
else if (level < 0)
|
||||||
return AVERROR(ENOTSUP);
|
return AVERROR(ENOTSUP);
|
||||||
|
|
||||||
|
if (av_vdpau_get_surface_parameters(avctx, &type, &width, &height))
|
||||||
|
return AVERROR(ENOSYS);
|
||||||
|
|
||||||
status = vdctx->get_proc_address(vdctx->device,
|
status = vdctx->get_proc_address(vdctx->device,
|
||||||
VDP_FUNC_ID_VIDEO_SURFACE_QUERY_CAPABILITIES,
|
VDP_FUNC_ID_VIDEO_SURFACE_QUERY_CAPABILITIES,
|
||||||
&func);
|
&func);
|
||||||
@ -120,7 +163,7 @@ int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
|
|||||||
else
|
else
|
||||||
surface_query_caps = func;
|
surface_query_caps = func;
|
||||||
|
|
||||||
status = surface_query_caps(vdctx->device, VDP_CHROMA_TYPE_420, &supported,
|
status = surface_query_caps(vdctx->device, type, &supported,
|
||||||
&max_width, &max_height);
|
&max_width, &max_height);
|
||||||
if (status != VDP_STATUS_OK)
|
if (status != VDP_STATUS_OK)
|
||||||
return vdpau_error(status);
|
return vdpau_error(status);
|
||||||
|
@ -169,6 +169,26 @@ void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
|
|||||||
int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
|
int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
|
||||||
VdpGetProcAddress *get_proc_address, unsigned flags);
|
VdpGetProcAddress *get_proc_address, unsigned flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the parameters to create an adequate VDPAU video surface for the codec
|
||||||
|
* context using VDPAU hardware decoding acceleration.
|
||||||
|
*
|
||||||
|
* @note Behavior is undefined if the context was not successfully bound to a
|
||||||
|
* VDPAU device using av_vdpau_bind_context().
|
||||||
|
*
|
||||||
|
* @param avctx the codec context being used for decoding the stream
|
||||||
|
* @param type storage space for the VDPAU video surface chroma type
|
||||||
|
* (or NULL to ignore)
|
||||||
|
* @param width storage space for the VDPAU video surface pixel width
|
||||||
|
* (or NULL to ignore)
|
||||||
|
* @param height storage space for the VDPAU video surface pixel height
|
||||||
|
* (or NULL to ignore)
|
||||||
|
*
|
||||||
|
* @return 0 on success, a negative AVERROR code on failure.
|
||||||
|
*/
|
||||||
|
int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
|
||||||
|
uint32_t *width, uint32_t *height);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate an AVVDPAUContext.
|
* Allocate an AVVDPAUContext.
|
||||||
*
|
*
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 56
|
#define LIBAVCODEC_VERSION_MAJOR 56
|
||||||
#define LIBAVCODEC_VERSION_MINOR 18
|
#define LIBAVCODEC_VERSION_MINOR 19
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#define LIBAVCODEC_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
|
Loading…
Reference in New Issue
Block a user