浏览代码

vl/video_buffer: fix up surface ordering for the interlaced case

It seems the other code expects surface[0..1] to be the luma field in interlaced case.

See for example vdpau/surface.c vlVdpVideoSurfaceClear and vlVdpVideoSurfacePutBitsYCbCr.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
tags/mesa-9.1-rc1
Maarten Lankhorst 13 年前
父节点
当前提交
4b8af72f96
共有 1 个文件被更改,包括 6 次插入6 次删除
  1. 6
    6
      src/gallium/auxiliary/vl/vl_video_buffer.c

+ 6
- 6
src/gallium/auxiliary/vl/vl_video_buffer.c 查看文件

@@ -356,20 +356,20 @@ vl_video_buffer_surfaces(struct pipe_video_buffer *buffer)
pipe = buf->base.context;

depth = buffer->interlaced ? 2 : 1;
for (i = 0, surf = 0; i < depth; ++i ) {
for (j = 0; j < VL_NUM_COMPONENTS; ++j, ++surf) {
for (i = 0, surf = 0; i < VL_NUM_COMPONENTS; ++i) {
for (j = 0; j < depth; ++j, ++surf) {
assert(surf < (VL_NUM_COMPONENTS * 2));

if (!buf->resources[j]) {
if (!buf->resources[i]) {
pipe_surface_reference(&buf->surfaces[surf], NULL);
continue;
}

if (!buf->surfaces[surf]) {
memset(&surf_templ, 0, sizeof(surf_templ));
surf_templ.format = vl_video_buffer_surface_format(buf->resources[j]->format);
surf_templ.u.tex.first_layer = surf_templ.u.tex.last_layer = i;
buf->surfaces[surf] = pipe->create_surface(pipe, buf->resources[j], &surf_templ);
surf_templ.format = vl_video_buffer_surface_format(buf->resources[i]->format);
surf_templ.u.tex.first_layer = surf_templ.u.tex.last_layer = j;
buf->surfaces[surf] = pipe->create_surface(pipe, buf->resources[i], &surf_templ);
if (!buf->surfaces[surf])
goto error;
}

正在加载...
取消
保存