vdpau: always let decoder output IMGFMT_VDPAU

The old ffmpeg vdpau support code uses separate vdpau pixel formats for
each decoder (pretty much because mplayer's architecture sucked), which
just gets into the way. Force the old decoder's output to IMGFMT_VDPAU,
and remove IMGFMT_IS_VDPAU() where we can remove it.

This should completely remove the differences betwene the old and new
vdpau decoder outside of the decoder.
This commit is contained in:
wm4
2013-11-29 14:19:44 +01:00
parent 60cd300558
commit 2a316c3506
3 changed files with 4 additions and 3 deletions
+1
View File
@@ -255,6 +255,7 @@ static struct mp_image *process_image(struct lavc_ctx *ctx, struct mp_image *img
struct vdpau_render_state *rndr = (void *)img->planes[0];
img->planes[0] = (void *)"dummy"; // must be non-NULL, otherwise arbitrary
img->planes[3] = (void *)(intptr_t)rndr->surface;
mp_image_setfmt(img, IMGFMT_VDPAU);
return img;
}
+2 -2
View File
@@ -42,7 +42,7 @@ struct priv {
static bool query_format(int imgfmt)
{
return IMGFMT_IS_VDPAU(imgfmt);
return imgfmt == IMGFMT_VDPAU;
}
static void mark_vdpau_objects_uninitialized(struct gl_hwdec *hw)
@@ -221,7 +221,7 @@ static int map_image(struct gl_hwdec *hw, struct mp_image *hw_image,
struct vdp_functions *vdp = p->ctx->vdp;
VdpStatus vdp_st;
assert(hw_image && IMGFMT_IS_VDPAU(hw_image->imgfmt));
assert(hw_image && hw_image->imgfmt == IMGFMT_VDPAU);
VdpVideoSurface video_surface = (intptr_t)hw_image->planes[3];
if (handle_preemption(hw) < 0)
+1 -1
View File
@@ -1169,7 +1169,7 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
// Forget previous frames, as we can display a new one now.
vc->prev_deint_queue_pos = -1001;
if (IMGFMT_IS_VDPAU(vc->image_format)) {
if (vc->image_format == IMGFMT_VDPAU) {
surface = (VdpVideoSurface)(intptr_t)mpi->planes[3];
reserved_mpi = mp_image_new_ref(mpi);
} else if (vc->rgb_mode) {