[PATCH 1/5] winegstreamer: Prefer YUV formats to RGB ones.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> --- dlls/winegstreamer/gstdemux.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 75ddb3082e6..11ca8f90bb0 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1677,17 +1677,19 @@ static HRESULT gstdecoder_source_get_media_type(struct gstdemux_source *pin, { static const GstVideoFormat video_formats[] = { - /* Roughly ordered by preference from videoflip. */ + /* Try to prefer YUV formats over RGB ones. Most decoders output in the + * YUV color space, and it's generally much less expensive for + * videoconvert to do YUV -> YUV transformations. */ GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_FORMAT_BGRA, - GST_VIDEO_FORMAT_BGRx, - GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YVYU, GST_VIDEO_FORMAT_NV12, + GST_VIDEO_FORMAT_BGRA, + GST_VIDEO_FORMAT_BGRx, + GST_VIDEO_FORMAT_BGR, }; if (!index) -- 2.27.0
This reduces the time videoconvert takes to process I420 -> YV12 from 15 ms to 0.8 ms on my system. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> --- dlls/winegstreamer/gstdemux.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 11ca8f90bb0..8f89935b82b 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1022,6 +1022,9 @@ static void init_new_decoded_pad(GstElement *bin, GstPad *pad, struct gstdemux * goto out; } + /* Avoid expensive color matrix conversions. */ + gst_util_set_object_arg(G_OBJECT(vconv), "matrix-mode", "none"); + /* GStreamer outputs RGB video top-down, but DirectShow expects bottom-up. */ if (!(flip = gst_element_factory_make("videoflip", NULL))) { -- 2.27.0
This was never correct; 8-bit RGB is always palettized. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> --- dlls/quartz/vmr9.c | 1 - 1 file changed, 1 deletion(-) diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index b49b2b67dbb..318d825ac9e 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -419,7 +419,6 @@ static HRESULT allocate_surfaces(struct quartz_vmr *filter, const AM_MEDIA_TYPE { switch (filter->bmiheader.biBitCount) { - case 8: info.Format = D3DFMT_R3G3B2; break; case 15: info.Format = D3DFMT_X1R5G5B5; break; case 16: info.Format = D3DFMT_R5G6B5; break; case 24: info.Format = D3DFMT_R8G8B8; break; -- 2.27.0
This was never correct; 15-bit RGB has a biBitCount of 16. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> --- dlls/quartz/vmr9.c | 1 - 1 file changed, 1 deletion(-) diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index 318d825ac9e..d290d02ce7f 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -419,7 +419,6 @@ static HRESULT allocate_surfaces(struct quartz_vmr *filter, const AM_MEDIA_TYPE { switch (filter->bmiheader.biBitCount) { - case 15: info.Format = D3DFMT_X1R5G5B5; break; case 16: info.Format = D3DFMT_R5G6B5; break; case 24: info.Format = D3DFMT_R8G8B8; break; case 32: info.Format = D3DFMT_X8R8G8B8; break; -- 2.27.0
Hi, While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=73944 Your paranoid android. === debiant (32 bit report) === quartz: videorenderer.c:1053: Test failed: Got hr 0xdeadbeef. videorenderer.c:1054: Test failed: Got time 11005000000000.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> --- dlls/quartz/vmr9.c | 1 - 1 file changed, 1 deletion(-) diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index d290d02ce7f..09d63b6a71c 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -419,7 +419,6 @@ static HRESULT allocate_surfaces(struct quartz_vmr *filter, const AM_MEDIA_TYPE { switch (filter->bmiheader.biBitCount) { - case 16: info.Format = D3DFMT_R5G6B5; break; case 24: info.Format = D3DFMT_R8G8B8; break; case 32: info.Format = D3DFMT_X8R8G8B8; break; default: -- 2.27.0
participants (2)
-
Marvin -
Zebediah Figura