[PATCH 5/5] winegstreamer: Get rid of the YUV-to-(A)RGB converters.
Zebediah Figura
z.figura12 at gmail.com
Fri Jan 24 19:55:10 CST 2020
This is handled by the splitter filter now.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/winegstreamer/gst_guids.h | 2 -
dlls/winegstreamer/gst_private.h | 2 -
dlls/winegstreamer/gsttffilter.c | 217 -------------------------------
dlls/winegstreamer/main.c | 52 --------
4 files changed, 273 deletions(-)
diff --git a/dlls/winegstreamer/gst_guids.h b/dlls/winegstreamer/gst_guids.h
index b445dc59625..fe7b65e4454 100644
--- a/dlls/winegstreamer/gst_guids.h
+++ b/dlls/winegstreamer/gst_guids.h
@@ -23,5 +23,3 @@ DEFINE_GUID(CLSID_Gstreamer_AudioConvert, 0x334b2ec9, 0xf2b5, 0x40b9, 0x84, 0x32
DEFINE_GUID(CLSID_Gstreamer_Mp3, 0x728dcf55, 0x128f, 0x4dd1, 0xad, 0x22, 0xbe, 0xcf, 0xa6, 0x6c, 0xe7, 0xaa);
DEFINE_GUID(CLSID_Gstreamer_Splitter, 0xf9d8d64e, 0xa144, 0x47dc, 0x8e, 0xe0, 0xf5, 0x34, 0x98, 0x37, 0x2c, 0x29);
DEFINE_GUID(WINESUBTYPE_Gstreamer, 0xffffffff, 0x128f, 0x4dd1, 0xad, 0x22, 0xbe, 0xcf, 0xa6, 0x6c, 0xe7, 0xaa);
-DEFINE_GUID(CLSID_Gstreamer_YUV2RGB, 0x2d5507df, 0x5ac9, 0x4bb9, 0x9c, 0x09, 0xb2, 0x80, 0xfc, 0x0b, 0xce, 0x01);
-DEFINE_GUID(CLSID_Gstreamer_YUV2ARGB, 0x2d5507df, 0x5ac9, 0x4bb9, 0x9c, 0x09, 0xb2, 0x80, 0xfc, 0x0b, 0xce, 0x02);
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 122e4c1037e..37b19ea6265 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -39,8 +39,6 @@ IUnknown * CALLBACK avi_splitter_create(IUnknown *outer, HRESULT *phr) DECLSPEC_
IUnknown * CALLBACK mpeg_splitter_create(IUnknown *outer, HRESULT *phr) DECLSPEC_HIDDEN;
IUnknown * CALLBACK Gstreamer_AudioConvert_create(IUnknown *pUnkOuter, HRESULT *phr);
IUnknown * CALLBACK Gstreamer_Mp3_create(IUnknown *pUnkOuter, HRESULT *phr);
-IUnknown * CALLBACK Gstreamer_YUV2RGB_create(IUnknown *pUnkOuter, HRESULT *phr);
-IUnknown * CALLBACK Gstreamer_YUV2ARGB_create(IUnknown *pUnkOuter, HRESULT *phr);
IUnknown * CALLBACK Gstreamer_Splitter_create(IUnknown *pUnkOuter, HRESULT *phr);
IUnknown * CALLBACK wave_parser_create(IUnknown *outer, HRESULT *phr) DECLSPEC_HIDDEN;
diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c
index d44a6ae33a6..5d1a98b0f5c 100644
--- a/dlls/winegstreamer/gsttffilter.c
+++ b/dlls/winegstreamer/gsttffilter.c
@@ -627,223 +627,6 @@ IUnknown * CALLBACK Gstreamer_Mp3_create(IUnknown *punkouter, HRESULT *phr)
return obj;
}
-static HRESULT WINAPI Gstreamer_YUV_QueryConnect(TransformFilter *iface, const AM_MEDIA_TYPE *amt)
-{
- GstTfImpl *This = (GstTfImpl*)iface;
- TRACE("%p %p\n", This, amt);
-
- if (!IsEqualGUID(&amt->majortype, &MEDIATYPE_Video) ||
- (!IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo) &&
- !IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo2)))
- return S_FALSE;
- if (memcmp(&amt->subtype.Data2, &MEDIATYPE_Video.Data2, sizeof(GUID) - sizeof(amt->subtype.Data1)))
- return S_FALSE;
- switch (amt->subtype.Data1) {
- case mmioFOURCC('I','4','2','0'):
- case mmioFOURCC('Y','V','1','2'):
- case mmioFOURCC('N','V','1','2'):
- case mmioFOURCC('N','V','2','1'):
- case mmioFOURCC('Y','U','Y','2'):
- case mmioFOURCC('Y','V','Y','U'):
- return S_OK;
- default:
- WARN("Unhandled fourcc %s\n", debugstr_an((char*)&amt->subtype.Data1, 4));
- return S_FALSE;
- }
-}
-
-static HRESULT yuv_to_rgb_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE *amt)
-{
- GstTfImpl *This = (GstTfImpl*)tf;
- GstCaps *capsin, *capsout;
- AM_MEDIA_TYPE *outpmt = &This->tf.pmt;
- HRESULT hr;
- int avgtime;
- LONG width, height;
-
- mark_wine_thread();
-
- if (Gstreamer_YUV_QueryConnect(&This->tf, amt) == S_FALSE || !amt->pbFormat)
- return E_FAIL;
-
- FreeMediaType(outpmt);
- CopyMediaType(outpmt, amt);
-
- if (IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo)) {
- VIDEOINFOHEADER *vih = (VIDEOINFOHEADER*)outpmt->pbFormat;
- avgtime = vih->AvgTimePerFrame;
- width = vih->bmiHeader.biWidth;
- height = vih->bmiHeader.biHeight;
- vih->bmiHeader.biBitCount = 24;
- vih->bmiHeader.biCompression = BI_RGB;
- vih->bmiHeader.biSizeImage = width * abs(height) * 3;
- } else {
- VIDEOINFOHEADER2 *vih = (VIDEOINFOHEADER2*)outpmt->pbFormat;
- avgtime = vih->AvgTimePerFrame;
- width = vih->bmiHeader.biWidth;
- height = vih->bmiHeader.biHeight;
- vih->bmiHeader.biBitCount = 24;
- vih->bmiHeader.biCompression = BI_RGB;
- vih->bmiHeader.biSizeImage = width * abs(height) * 3;
- }
- if (!avgtime)
- avgtime = 10000000 / 30;
-
- outpmt->subtype = MEDIASUBTYPE_RGB24;
-
- capsin = gst_caps_new_simple("video/x-raw",
- "format", G_TYPE_STRING,
- gst_video_format_to_string(
- gst_video_format_from_fourcc(amt->subtype.Data1)),
- "width", G_TYPE_INT, width,
- "height", G_TYPE_INT, height,
- "framerate", GST_TYPE_FRACTION, 10000000, avgtime,
- NULL);
- capsout = gst_caps_new_simple("video/x-raw",
- "format", G_TYPE_STRING, "BGR",
- "width", G_TYPE_INT, width,
- "height", G_TYPE_INT, height,
- "framerate", GST_TYPE_FRACTION, 10000000, avgtime,
- NULL);
-
- hr = Gstreamer_transform_ConnectInput(This, amt, capsin, capsout);
- gst_caps_unref(capsin);
- gst_caps_unref(capsout);
-
- This->cbBuffer = width * height * 4;
- return hr;
-}
-
-static const TransformFilterFuncTable Gstreamer_YUV2RGB_vtbl = {
- .pfnDecideBufferSize = Gstreamer_transform_DecideBufferSize,
- .pfnStartStreaming = Gstreamer_transform_ProcessBegin,
- .pfnReceive = Gstreamer_transform_ProcessData,
- .pfnStopStreaming = Gstreamer_transform_ProcessEnd,
- .pfnCheckInputType = Gstreamer_YUV_QueryConnect,
- .transform_connect_sink = yuv_to_rgb_connect_sink,
- .pfnBreakConnect = Gstreamer_transform_Cleanup,
- .pfnEndOfStream = Gstreamer_transform_EndOfStream,
- .pfnBeginFlush = Gstreamer_transform_BeginFlush,
- .pfnEndFlush = Gstreamer_transform_EndFlush,
- .pfnNewSegment = Gstreamer_transform_NewSegment,
- .pfnNotify = Gstreamer_transform_QOS,
-};
-
-IUnknown * CALLBACK Gstreamer_YUV2RGB_create(IUnknown *punkouter, HRESULT *phr)
-{
- IUnknown *obj = NULL;
-
- TRACE("%p %p\n", punkouter, phr);
-
- if (!init_gstreamer())
- {
- *phr = E_FAIL;
- return NULL;
- }
-
- *phr = Gstreamer_transform_create(punkouter, &CLSID_Gstreamer_YUV2RGB, "videoconvert", &Gstreamer_YUV2RGB_vtbl, (LPVOID*)&obj);
-
- TRACE("returning %p\n", obj);
-
- return obj;
-}
-
-static HRESULT yuv_to_argb_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE *amt)
-{
- GstTfImpl *This = (GstTfImpl*)tf;
- GstCaps *capsin, *capsout;
- AM_MEDIA_TYPE *outpmt = &This->tf.pmt;
- HRESULT hr;
- int avgtime;
- LONG width, height;
-
- mark_wine_thread();
-
- if (Gstreamer_YUV_QueryConnect(&This->tf, amt) == S_FALSE || !amt->pbFormat)
- return E_FAIL;
-
- FreeMediaType(outpmt);
- CopyMediaType(outpmt, amt);
-
- if (IsEqualGUID(&amt->formattype, &FORMAT_VideoInfo)) {
- VIDEOINFOHEADER *vih = (VIDEOINFOHEADER*)outpmt->pbFormat;
- avgtime = vih->AvgTimePerFrame;
- width = vih->bmiHeader.biWidth;
- height = vih->bmiHeader.biHeight;
- vih->bmiHeader.biBitCount = 32;
- vih->bmiHeader.biCompression = BI_RGB;
- vih->bmiHeader.biSizeImage = width * abs(height) * 3;
- } else {
- VIDEOINFOHEADER2 *vih = (VIDEOINFOHEADER2*)outpmt->pbFormat;
- avgtime = vih->AvgTimePerFrame;
- width = vih->bmiHeader.biWidth;
- height = vih->bmiHeader.biHeight;
- vih->bmiHeader.biBitCount = 32;
- vih->bmiHeader.biCompression = BI_RGB;
- vih->bmiHeader.biSizeImage = width * abs(height) * 3;
- }
- if (!avgtime)
- avgtime = 10000000 / 30;
-
- outpmt->subtype = MEDIASUBTYPE_ARGB32;
-
- capsin = gst_caps_new_simple("video/x-raw",
- "format", G_TYPE_STRING,
- gst_video_format_to_string(
- gst_video_format_from_fourcc(amt->subtype.Data1)),
- "width", G_TYPE_INT, width,
- "height", G_TYPE_INT, height,
- "framerate", GST_TYPE_FRACTION, 10000000, avgtime,
- NULL);
- capsout = gst_caps_new_simple("video/x-raw",
- "format", G_TYPE_STRING, "BGRA",
- "width", G_TYPE_INT, width,
- "height", G_TYPE_INT, height,
- "framerate", GST_TYPE_FRACTION, 10000000, avgtime,
- NULL);
-
- hr = Gstreamer_transform_ConnectInput(This, amt, capsin, capsout);
- gst_caps_unref(capsin);
- gst_caps_unref(capsout);
-
- This->cbBuffer = width * height * 4;
- return hr;
-}
-
-static const TransformFilterFuncTable Gstreamer_YUV2ARGB_vtbl = {
- .pfnDecideBufferSize = Gstreamer_transform_DecideBufferSize,
- .pfnStartStreaming = Gstreamer_transform_ProcessBegin,
- .pfnReceive = Gstreamer_transform_ProcessData,
- .pfnStopStreaming = Gstreamer_transform_ProcessEnd,
- .pfnCheckInputType = Gstreamer_YUV_QueryConnect,
- .transform_connect_sink = yuv_to_argb_connect_sink,
- .pfnBreakConnect = Gstreamer_transform_Cleanup,
- .pfnEndOfStream = Gstreamer_transform_EndOfStream,
- .pfnBeginFlush = Gstreamer_transform_BeginFlush,
- .pfnEndFlush = Gstreamer_transform_EndFlush,
- .pfnNewSegment = Gstreamer_transform_NewSegment,
- .pfnNotify = Gstreamer_transform_QOS,
-};
-
-IUnknown * CALLBACK Gstreamer_YUV2ARGB_create(IUnknown *punkouter, HRESULT *phr)
-{
- IUnknown *obj = NULL;
-
- TRACE("%p %p\n", punkouter, phr);
-
- if (!init_gstreamer())
- {
- *phr = E_FAIL;
- return NULL;
- }
-
- *phr = Gstreamer_transform_create(punkouter, &CLSID_Gstreamer_YUV2ARGB, "videoconvert", &Gstreamer_YUV2ARGB_vtbl, (LPVOID*)&obj);
-
- TRACE("returning %p\n", obj);
-
- return obj;
-}
-
static HRESULT WINAPI Gstreamer_AudioConvert_QueryConnect(TransformFilter *iface, const AM_MEDIA_TYPE *amt)
{
GstTfImpl *This = (GstTfImpl*)iface;
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
index 379f54ab4ec..cdc3ba0ddce 100644
--- a/dlls/winegstreamer/main.c
+++ b/dlls/winegstreamer/main.c
@@ -38,10 +38,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(gstreamer);
static const WCHAR wGstreamer_Splitter[] =
{'G','S','t','r','e','a','m','e','r',' ','s','p','l','i','t','t','e','r',' ','f','i','l','t','e','r',0};
-static const WCHAR wGstreamer_YUV2RGB[] =
-{'G','S','t','r','e','a','m','e','r',' ','Y','U','V',' ','t','o',' ','R','G','B',' ','f','i','l','t','e','r',0};
-static const WCHAR wGstreamer_YUV2ARGB[] =
-{'G','S','t','r','e','a','m','e','r',' ','Y','U','V',' ','t','o',' ','A','R','G','B',' ','f','i','l','t','e','r',0};
static const WCHAR wGstreamer_Mp3[] =
{'G','S','t','r','e','a','m','e','r',' ','M','p','3',' ','f','i','l','t','e','r',0};
static const WCHAR wGstreamer_AudioConvert[] =
@@ -100,40 +96,6 @@ static const AMOVIESETUP_FILTER amfSplitter =
amfSplitPin
};
-static const AMOVIESETUP_PIN amfYUVPin[] =
-{ { wNull,
- FALSE, FALSE, FALSE, FALSE,
- &GUID_NULL,
- NULL,
- 1,
- amfMTvideo
- },
- {
- wNull,
- FALSE, TRUE, FALSE, FALSE,
- &GUID_NULL,
- NULL,
- 1,
- amfMTvideo
- },
-};
-
-static const AMOVIESETUP_FILTER amfYUV2RGB =
-{ &CLSID_Gstreamer_YUV2RGB,
- wGstreamer_YUV2RGB,
- MERIT_UNLIKELY,
- 2,
- amfYUVPin
-};
-
-static const AMOVIESETUP_FILTER amfYUV2ARGB =
-{ &CLSID_Gstreamer_YUV2ARGB,
- wGstreamer_YUV2ARGB,
- MERIT_UNLIKELY,
- 2,
- amfYUVPin
-};
-
AMOVIESETUP_PIN amfMp3Pin[] =
{ { wNull,
FALSE, FALSE, FALSE, FALSE,
@@ -326,20 +288,6 @@ FactoryTemplate const g_Templates[] = {
NULL,
&amfSplitter,
},
- {
- wGstreamer_YUV2RGB,
- &CLSID_Gstreamer_YUV2RGB,
- Gstreamer_YUV2RGB_create,
- NULL,
- &amfYUV2RGB,
- },
- {
- wGstreamer_YUV2ARGB,
- &CLSID_Gstreamer_YUV2ARGB,
- Gstreamer_YUV2ARGB_create,
- NULL,
- &amfYUV2ARGB,
- },
{
wGstreamer_Mp3,
&CLSID_Gstreamer_Mp3,
--
2.25.0
More information about the wine-devel
mailing list