vdpau: switch ff_vdpau_get_surface_id from Picture to AVFrame
This gets rid of aliasing completely unrelated structs to Picture. Fixes the remaining compilation warnings in the vdpau code. Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
7948a51b5c
commit
1b1094a19d
@ -57,7 +57,7 @@ int ff_vdpau_mpeg_end_frame(AVCodecContext *avctx)
|
|||||||
MpegEncContext *s = avctx->priv_data;
|
MpegEncContext *s = avctx->priv_data;
|
||||||
Picture *pic = s->current_picture_ptr;
|
Picture *pic = s->current_picture_ptr;
|
||||||
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
|
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
|
||||||
VdpVideoSurface surf = ff_vdpau_get_surface_id(pic);
|
VdpVideoSurface surf = ff_vdpau_get_surface_id(&pic->f);
|
||||||
|
|
||||||
hwctx->render(hwctx->decoder, surf, (void *)&pic_ctx->info,
|
hwctx->render(hwctx->decoder, surf, (void *)&pic_ctx->info,
|
||||||
pic_ctx->bitstream_buffers_used, pic_ctx->bitstream_buffers);
|
pic_ctx->bitstream_buffers_used, pic_ctx->bitstream_buffers);
|
||||||
|
@ -50,7 +50,7 @@ static void vdpau_h264_clear_rf(VdpReferenceFrameH264 *rf)
|
|||||||
static void vdpau_h264_set_rf(VdpReferenceFrameH264 *rf, H264Picture *pic,
|
static void vdpau_h264_set_rf(VdpReferenceFrameH264 *rf, H264Picture *pic,
|
||||||
int pic_structure)
|
int pic_structure)
|
||||||
{
|
{
|
||||||
VdpVideoSurface surface = ff_vdpau_get_surface_id(pic);
|
VdpVideoSurface surface = ff_vdpau_get_surface_id(&pic->f);
|
||||||
|
|
||||||
if (pic_structure == 0)
|
if (pic_structure == 0)
|
||||||
pic_structure = pic->reference;
|
pic_structure = pic->reference;
|
||||||
@ -87,7 +87,7 @@ static void vdpau_h264_set_reference_frames(AVCodecContext *avctx)
|
|||||||
if (!pic || !pic->reference)
|
if (!pic || !pic->reference)
|
||||||
continue;
|
continue;
|
||||||
pic_frame_idx = pic->long_ref ? pic->pic_id : pic->frame_num;
|
pic_frame_idx = pic->long_ref ? pic->pic_id : pic->frame_num;
|
||||||
surface_ref = ff_vdpau_get_surface_id(pic);
|
surface_ref = ff_vdpau_get_surface_id(&pic->f);
|
||||||
|
|
||||||
rf2 = &info->referenceFrames[0];
|
rf2 = &info->referenceFrames[0];
|
||||||
while (rf2 != rf) {
|
while (rf2 != rf) {
|
||||||
@ -193,7 +193,7 @@ static int vdpau_h264_end_frame(AVCodecContext *avctx)
|
|||||||
H264Context *h = avctx->priv_data;
|
H264Context *h = avctx->priv_data;
|
||||||
H264Picture *pic = h->cur_pic_ptr;
|
H264Picture *pic = h->cur_pic_ptr;
|
||||||
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
|
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
|
||||||
VdpVideoSurface surf = ff_vdpau_get_surface_id(pic);
|
VdpVideoSurface surf = ff_vdpau_get_surface_id(&pic->f);
|
||||||
|
|
||||||
hwctx->render(hwctx->decoder, surf, (void *)&pic_ctx->info,
|
hwctx->render(hwctx->decoder, surf, (void *)&pic_ctx->info,
|
||||||
pic_ctx->bitstream_buffers_used, pic_ctx->bitstream_buffers);
|
pic_ctx->bitstream_buffers_used, pic_ctx->bitstream_buffers);
|
||||||
|
@ -31,10 +31,10 @@
|
|||||||
#include "mpegvideo.h"
|
#include "mpegvideo.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
/** Extract VdpVideoSurface from a Picture */
|
/** Extract VdpVideoSurface from an AVFrame */
|
||||||
static inline uintptr_t ff_vdpau_get_surface_id(Picture *pic)
|
static inline uintptr_t ff_vdpau_get_surface_id(AVFrame *pic)
|
||||||
{
|
{
|
||||||
return (uintptr_t)pic->f.data[3];
|
return (uintptr_t)pic->data[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !FF_API_BUFS_VDPAU
|
#if !FF_API_BUFS_VDPAU
|
||||||
|
@ -43,12 +43,12 @@ static int vdpau_mpeg_start_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
switch (s->pict_type) {
|
switch (s->pict_type) {
|
||||||
case AV_PICTURE_TYPE_B:
|
case AV_PICTURE_TYPE_B:
|
||||||
ref = ff_vdpau_get_surface_id(&s->next_picture);
|
ref = ff_vdpau_get_surface_id(&s->next_picture.f);
|
||||||
assert(ref != VDP_INVALID_HANDLE);
|
assert(ref != VDP_INVALID_HANDLE);
|
||||||
info->backward_reference = ref;
|
info->backward_reference = ref;
|
||||||
/* fall through to forward prediction */
|
/* fall through to forward prediction */
|
||||||
case AV_PICTURE_TYPE_P:
|
case AV_PICTURE_TYPE_P:
|
||||||
ref = ff_vdpau_get_surface_id(&s->last_picture);
|
ref = ff_vdpau_get_surface_id(&s->last_picture.f);
|
||||||
info->forward_reference = ref;
|
info->forward_reference = ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,13 +46,13 @@ static int vdpau_mpeg4_start_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
switch (s->pict_type) {
|
switch (s->pict_type) {
|
||||||
case AV_PICTURE_TYPE_B:
|
case AV_PICTURE_TYPE_B:
|
||||||
ref = ff_vdpau_get_surface_id(&s->next_picture);
|
ref = ff_vdpau_get_surface_id(&s->next_picture.f);
|
||||||
assert(ref != VDP_INVALID_HANDLE);
|
assert(ref != VDP_INVALID_HANDLE);
|
||||||
info->backward_reference = ref;
|
info->backward_reference = ref;
|
||||||
info->vop_coding_type = 2;
|
info->vop_coding_type = 2;
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
case AV_PICTURE_TYPE_P:
|
case AV_PICTURE_TYPE_P:
|
||||||
ref = ff_vdpau_get_surface_id(&s->last_picture);
|
ref = ff_vdpau_get_surface_id(&s->last_picture.f);
|
||||||
assert(ref != VDP_INVALID_HANDLE);
|
assert(ref != VDP_INVALID_HANDLE);
|
||||||
info->forward_reference = ref;
|
info->forward_reference = ref;
|
||||||
}
|
}
|
||||||
|
@ -44,12 +44,12 @@ static int vdpau_vc1_start_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
switch (s->pict_type) {
|
switch (s->pict_type) {
|
||||||
case AV_PICTURE_TYPE_B:
|
case AV_PICTURE_TYPE_B:
|
||||||
ref = ff_vdpau_get_surface_id(&s->next_picture);
|
ref = ff_vdpau_get_surface_id(&s->next_picture.f);
|
||||||
assert(ref != VDP_INVALID_HANDLE);
|
assert(ref != VDP_INVALID_HANDLE);
|
||||||
info->backward_reference = ref;
|
info->backward_reference = ref;
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
case AV_PICTURE_TYPE_P:
|
case AV_PICTURE_TYPE_P:
|
||||||
ref = ff_vdpau_get_surface_id(&s->last_picture);
|
ref = ff_vdpau_get_surface_id(&s->last_picture.f);
|
||||||
assert(ref != VDP_INVALID_HANDLE);
|
assert(ref != VDP_INVALID_HANDLE);
|
||||||
info->forward_reference = ref;
|
info->forward_reference = ref;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user