* commit 'e3e158e81f0666b8fe66be9ce1cad63a535920e0': vdpau: add av_vdpau_bind_context() Conflicts: doc/APIchanges libavcodec/vdpau.h libavcodec/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.5
| @@ -15,6 +15,10 @@ libavutil: 2014-08-09 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2014-09-xx - xxxxxxx - lavc 56.2.0 - vdpau.h | |||||
| Add av_vdpau_bind_context(). This function should now be used for creating | |||||
| (or resetting) a AVVDPAUContext instead of av_vdpau_alloc_context(). | |||||
| 2014-10-02 - xxxxxxx - lavc 56.2.100 - avcodec.h | 2014-10-02 - xxxxxxx - lavc 56.2.100 - avcodec.h | ||||
| 2014-10-02 - xxxxxxx - lavu 54.9.100 - frame.h | 2014-10-02 - xxxxxxx - lavu 54.9.100 - frame.h | ||||
| Add AV_FRAME_DATA_SKIP_SAMPLES. Add lavc CODEC_FLAG2_SKIP_MANUAL and | Add AV_FRAME_DATA_SKIP_SAMPLES. Add lavc CODEC_FLAG2_SKIP_MANUAL and | ||||
| @@ -85,6 +85,7 @@ int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile, | |||||
| vdctx->width = UINT32_MAX; | vdctx->width = UINT32_MAX; | ||||
| vdctx->height = UINT32_MAX; | vdctx->height = UINT32_MAX; | ||||
| hwctx->reset = 0; | |||||
| if (!hwctx) { | if (!hwctx) { | ||||
| vdctx->device = VDP_INVALID_HANDLE; | vdctx->device = VDP_INVALID_HANDLE; | ||||
| @@ -151,12 +152,13 @@ int ff_vdpau_common_uninit(AVCodecContext *avctx) | |||||
| static int ff_vdpau_common_reinit(AVCodecContext *avctx) | static int ff_vdpau_common_reinit(AVCodecContext *avctx) | ||||
| { | { | ||||
| VDPAUHWContext *hwctx = avctx->hwaccel_context; | |||||
| VDPAUContext *vdctx = avctx->internal->hwaccel_priv_data; | VDPAUContext *vdctx = avctx->internal->hwaccel_priv_data; | ||||
| if (vdctx->device == VDP_INVALID_HANDLE) | if (vdctx->device == VDP_INVALID_HANDLE) | ||||
| return 0; /* Decoder created by user */ | return 0; /* Decoder created by user */ | ||||
| if (avctx->coded_width == vdctx->width && | if (avctx->coded_width == vdctx->width && | ||||
| avctx->coded_height == vdctx->height) | |||||
| avctx->coded_height == vdctx->height && !hwctx->reset) | |||||
| return 0; | return 0; | ||||
| avctx->hwaccel->uninit(avctx); | avctx->hwaccel->uninit(avctx); | ||||
| @@ -639,4 +641,22 @@ AVVDPAUContext *av_vdpau_alloc_context(void) | |||||
| return av_mallocz(sizeof(AVVDPAUContext)); | return av_mallocz(sizeof(AVVDPAUContext)); | ||||
| } | } | ||||
| int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, | |||||
| VdpGetProcAddress *get_proc, unsigned flags) | |||||
| { | |||||
| VDPAUHWContext *hwctx; | |||||
| if (av_reallocp(&avctx->hwaccel_context, sizeof(*hwctx))) | |||||
| return AVERROR(ENOMEM); | |||||
| hwctx = avctx->hwaccel_context; | |||||
| memset(hwctx, 0, sizeof(*hwctx)); | |||||
| hwctx->context.decoder = VDP_INVALID_HANDLE; | |||||
| hwctx->device = device; | |||||
| hwctx->get_proc_address = get_proc; | |||||
| hwctx->reset = 1; | |||||
| return 0; | |||||
| } | |||||
| /* @}*/ | /* @}*/ | ||||
| @@ -149,6 +149,26 @@ AVVDPAUContext *av_alloc_vdpaucontext(void); | |||||
| AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); | AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); | ||||
| void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); | void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); | ||||
| /** | |||||
| * Associate a VDPAU device with a codec context for hardware acceleration. | |||||
| * This function is meant to be called from the get_format() codec callback, | |||||
| * or earlier. It can also be called after avcodec_flush_buffers() to change | |||||
| * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent | |||||
| * display preemption). | |||||
| * | |||||
| * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes | |||||
| * succesfully. | |||||
| * | |||||
| * @param avctx decoding context whose get_format() callback is invoked | |||||
| * @param device VDPAU device handle to use for hardware acceleration | |||||
| * @param get_proc_address VDPAU device driver | |||||
| * @param flags for future use, must be zero | |||||
| * | |||||
| * @return 0 on success, an AVERROR code on failure. | |||||
| */ | |||||
| int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, | |||||
| VdpGetProcAddress *get_proc_address, unsigned flags); | |||||
| /** | /** | ||||
| * Allocate an AVVDPAUContext. | * Allocate an AVVDPAUContext. | ||||
| * | * | ||||
| @@ -59,6 +59,7 @@ typedef struct VDPAUHWContext { | |||||
| AVVDPAUContext context; | AVVDPAUContext context; | ||||
| VdpDevice device; | VdpDevice device; | ||||
| VdpGetProcAddress *get_proc_address; | VdpGetProcAddress *get_proc_address; | ||||
| char reset; | |||||
| } VDPAUHWContext; | } VDPAUHWContext; | ||||
| typedef struct VDPAUContext { | typedef struct VDPAUContext { | ||||
| @@ -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 2 | |||||
| #define LIBAVCODEC_VERSION_MICRO 101 | |||||
| #define LIBAVCODEC_VERSION_MINOR 3 | |||||
| #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, \ | ||||
| LIBAVCODEC_VERSION_MINOR, \ | LIBAVCODEC_VERSION_MINOR, \ | ||||