Revert "frontends/vdpau: Alloc interlaced surface for interlaced pics"
This is not needed now when deinterlace can handle non-interlaced
buffers. Also this forces the buffer as interlaced which doesn't work
on radeonsi anymore.
This reverts commit 0ee4506c3a.
Cc: mesa-stable
Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33927>
This commit is contained in:
@@ -986,16 +986,6 @@ vlVdpDecoderFixVC1Startcode(uint32_t *num_buffers, const void *buffers[], unsign
|
||||
sizes[0] = 4;
|
||||
}
|
||||
|
||||
static bool
|
||||
vlVdpQueryInterlacedH264(struct pipe_h264_picture_desc *h264)
|
||||
{
|
||||
if (h264->pps->sps->frame_mbs_only_flag)
|
||||
return false;
|
||||
|
||||
return h264->field_pic_flag || /* PAFF */
|
||||
h264->pps->sps->mb_adaptive_frame_field_flag; /* MBAFF */
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode a compressed field/frame and render the result into a VdpVideoSurface.
|
||||
*/
|
||||
@@ -1028,7 +1018,6 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
struct pipe_h265_picture_desc h265;
|
||||
struct pipe_av1_picture_desc av1;
|
||||
} desc;
|
||||
bool picture_interlaced = false;
|
||||
struct pipe_video_buffer *target_buf;
|
||||
|
||||
if (!(picture_info && bitstream_buffers))
|
||||
@@ -1052,6 +1041,42 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
// TODO: Recreate decoder with correct chroma
|
||||
return VDP_STATUS_INVALID_CHROMA_TYPE;
|
||||
|
||||
buffer_support[0] = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE);
|
||||
buffer_support[1] = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_SUPPORTS_INTERLACED);
|
||||
|
||||
if (vlsurf->video_buffer == NULL ||
|
||||
!screen->is_video_format_supported(screen, vlsurf->video_buffer->buffer_format,
|
||||
dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM) ||
|
||||
!buffer_support[vlsurf->video_buffer->interlaced]) {
|
||||
|
||||
mtx_lock(&vlsurf->device->mutex);
|
||||
|
||||
/* destroy the old one */
|
||||
if (vlsurf->video_buffer)
|
||||
vlsurf->video_buffer->destroy(vlsurf->video_buffer);
|
||||
|
||||
/* set the buffer format to the prefered one */
|
||||
vlsurf->templat.buffer_format = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_PREFERRED_FORMAT);
|
||||
|
||||
/* also set interlacing to decoders preferences */
|
||||
vlsurf->templat.interlaced = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_PREFERS_INTERLACED);
|
||||
|
||||
/* and recreate the video buffer */
|
||||
vlsurf->video_buffer = dec->context->create_video_buffer(dec->context, &vlsurf->templat);
|
||||
|
||||
/* still no luck? get me out of here... */
|
||||
if (!vlsurf->video_buffer) {
|
||||
mtx_unlock(&vlsurf->device->mutex);
|
||||
return VDP_STATUS_NO_IMPLEMENTATION;
|
||||
}
|
||||
vlVdpVideoSurfaceClear(vlsurf);
|
||||
mtx_unlock(&vlsurf->device->mutex);
|
||||
}
|
||||
|
||||
for (i = 0; i < bitstream_buffer_count; ++i) {
|
||||
buffers[i] = bitstream_buffers[i].bitstream;
|
||||
sizes[i] = bitstream_buffers[i].bitstream_bytes;
|
||||
@@ -1074,7 +1099,6 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
case PIPE_VIDEO_FORMAT_MPEG4_AVC:
|
||||
desc.h264.pps = &pps_h264;
|
||||
ret = vlVdpDecoderRenderH264(&desc.h264, (VdpPictureInfoH264 *)picture_info, dec->level);
|
||||
picture_interlaced = vlVdpQueryInterlacedH264(&desc.h264);
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_HEVC:
|
||||
desc.h265.pps = &pps_h265;
|
||||
@@ -1090,43 +1114,6 @@ vlVdpDecoderRender(VdpDecoder decoder,
|
||||
if (ret != VDP_STATUS_OK)
|
||||
return ret;
|
||||
|
||||
buffer_support[0] = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE);
|
||||
buffer_support[1] = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_SUPPORTS_INTERLACED);
|
||||
|
||||
if (vlsurf->video_buffer == NULL ||
|
||||
!screen->is_video_format_supported(screen, vlsurf->video_buffer->buffer_format,
|
||||
dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM) ||
|
||||
!buffer_support[vlsurf->video_buffer->interlaced] ||
|
||||
(picture_interlaced && !vlsurf->video_buffer->interlaced && buffer_support[1])) {
|
||||
|
||||
mtx_lock(&vlsurf->device->mutex);
|
||||
|
||||
/* destroy the old one */
|
||||
if (vlsurf->video_buffer)
|
||||
vlsurf->video_buffer->destroy(vlsurf->video_buffer);
|
||||
|
||||
/* set the buffer format to the preferred one */
|
||||
vlsurf->templat.buffer_format = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_PREFERRED_FORMAT);
|
||||
|
||||
/* also set interlacing to decoders preferences */
|
||||
vlsurf->templat.interlaced = screen->get_video_param(screen, dec->profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
|
||||
PIPE_VIDEO_CAP_PREFERS_INTERLACED) || picture_interlaced;
|
||||
|
||||
/* and recreate the video buffer */
|
||||
vlsurf->video_buffer = dec->context->create_video_buffer(dec->context, &vlsurf->templat);
|
||||
|
||||
/* still no luck? get me out of here... */
|
||||
if (!vlsurf->video_buffer) {
|
||||
mtx_unlock(&vlsurf->device->mutex);
|
||||
return VDP_STATUS_NO_IMPLEMENTATION;
|
||||
}
|
||||
vlVdpVideoSurfaceClear(vlsurf);
|
||||
mtx_unlock(&vlsurf->device->mutex);
|
||||
}
|
||||
|
||||
target_buf = vlsurf->video_buffer;
|
||||
|
||||
if (u_reduce_video_profile(dec->profile) == PIPE_VIDEO_FORMAT_AV1) {
|
||||
|
||||
Reference in New Issue
Block a user