winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
March 2019
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
1097 discussions
Start a n
N
ew thread
Francois Gouget : dwrite: Remove freetype_get_design_glyph_bbox(). It' s not used anymore.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: 1e819f00a5fda6c06f507c4f5006a8d3bd2b9cd9 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=1e819f00a5fda6c06f507c4f…
Author: Francois Gouget <fgouget(a)free.fr> Date: Sat Mar 16 23:49:52 2019 +0100 dwrite: Remove freetype_get_design_glyph_bbox(). It's not used anymore. Signed-off-by: Francois Gouget <fgouget(a)free.fr> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/freetype.c | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/dlls/dwrite/freetype.c b/dlls/dwrite/freetype.c index 58cad41..fd94829 100644 --- a/dlls/dwrite/freetype.c +++ b/dlls/dwrite/freetype.c @@ -716,32 +716,6 @@ void freetype_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap) SetRect(&bitmap->bbox, bbox.xMin, -bbox.yMax, bbox.xMax, -bbox.yMin); } -void freetype_get_design_glyph_bbox(IDWriteFontFace4 *fontface, UINT16 unitsperEm, UINT16 glyph, RECT *bbox) -{ - FTC_ScalerRec scaler; - FT_Size size; - - scaler.face_id = fontface; - scaler.width = unitsperEm; - scaler.height = unitsperEm; - scaler.pixel = 1; - scaler.x_res = 0; - scaler.y_res = 0; - - EnterCriticalSection(&freetype_cs); - if (pFTC_Manager_LookupSize(cache_manager, &scaler, &size) == 0) { - if (pFT_Load_Glyph(size->face, glyph, FT_LOAD_NO_SCALE) == 0) { - FT_Glyph_Metrics *metrics = &size->face->glyph->metrics; - - bbox->left = metrics->horiBearingX; - bbox->right = bbox->left + metrics->horiAdvance; - bbox->top = -metrics->horiBearingY; - bbox->bottom = bbox->top + metrics->height; - } - } - LeaveCriticalSection(&freetype_cs); -} - static BOOL freetype_get_aliased_glyph_bitmap(struct dwrite_glyphbitmap *bitmap, FT_Glyph glyph) { const RECT *bbox = &bitmap->bbox; @@ -998,11 +972,6 @@ void freetype_get_glyph_bbox(struct dwrite_glyphbitmap *bitmap) SetRectEmpty(&bitmap->bbox); } -void freetype_get_design_glyph_bbox(IDWriteFontFace4 *fontface, UINT16 unitsperEm, UINT16 glyph, RECT *bbox) -{ - SetRectEmpty(bbox); -} - BOOL freetype_get_glyph_bitmap(struct dwrite_glyphbitmap *bitmap) { return FALSE;
1
0
0
0
Francois Gouget : dwrite/tests: Avoid a couple of unneeded lstrlenW() calls.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: f72622bf0d2de2d1784763e1ea24524e58bfef44 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=f72622bf0d2de2d1784763e1…
Author: Francois Gouget <fgouget(a)free.fr> Date: Sat Mar 16 23:52:20 2019 +0100 dwrite/tests: Avoid a couple of unneeded lstrlenW() calls. Signed-off-by: Francois Gouget <fgouget(a)free.fr> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dwrite/tests/layout.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index 6aaf792..14b287c 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -3931,7 +3931,7 @@ static void test_SetTextAlignment(void) count = 0; hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, ARRAY_SIZE(clusters), &count); ok(hr == S_OK, "got 0x%08x\n", hr); - if (lstrlenW(stringsW[i])) + if (stringsW[i][0]) ok(count > 0, "got %u\n", count); else ok(count == 0, "got %u\n", count); @@ -3981,7 +3981,7 @@ static void test_SetTextAlignment(void) ok(metrics.lineCount == 1, "got %d\n", metrics.lineCount); IDWriteTextLayout_Release(layout); - if (lstrlenW(stringsW[i]) > 0) { + if (stringsW[i][0]) { /* max width less than total run width, trailing alignment */ hr = IDWriteTextFormat_SetWordWrapping(format, DWRITE_WORD_WRAPPING_NO_WRAP); ok(hr == S_OK, "got 0x%08x\n", hr);
1
0
0
0
Detlef Riekenberg : advapi32/tests: Accept failure code from recent win10.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: 9e8e5204677ba87966067ab143fd82fb7c7454d6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=9e8e5204677ba87966067ab1…
Author: Detlef Riekenberg <wine.dev(a)web.de> Date: Thu Mar 21 08:07:44 2019 +0100 advapi32/tests: Accept failure code from recent win10. Signed-off-by: Detlef Riekenberg <wine.dev(a)web.de> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/advapi32/tests/registry.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 6043cab..d1fe3f0 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -1951,7 +1951,8 @@ static void test_reg_query_info(void) memset(classbufferW, 0x55, sizeof(classbufferW)); classlen = 1; ret = RegQueryInfoKeyW(subkey, classbufferW, &classlen, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - ok(ret == ERROR_INSUFFICIENT_BUFFER, "ret = %d\n", ret); + /* failure-code changed to ERROR_MORE_DATA in recent win10 */ + ok((ret == ERROR_INSUFFICIENT_BUFFER) || (ret == ERROR_MORE_DATA), "ret = %d\n", ret); ok(classlen == 0 /* win8 */ || classlen == strlen(subkey_class), "classlen = %u\n", classlen); memset(expectbufferW, 0x55, sizeof(expectbufferW));
1
0
0
0
Nikolay Sivov : mfplat: Add IMFGetService stub for file-based bytestream.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: e079edf8a8a111244577a23a5cf3b2d74a2a8709 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e079edf8a8a111244577a23a…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:19 2019 +0300 mfplat: Add IMFGetService stub for file-based bytestream. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 47 +++++++++++++++++++++++++++++++++++++++++++++- dlls/mfplat/tests/mfplat.c | 4 +--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 12ac940..bac5905 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -1795,6 +1795,7 @@ typedef struct bytestream { struct attributes attributes; IMFByteStream IMFByteStream_iface; + IMFGetService IMFGetService_iface; IMFAsyncCallback read_callback; IMFAsyncCallback write_callback; IStream *stream; @@ -1809,6 +1810,11 @@ static inline mfbytestream *impl_from_IMFByteStream(IMFByteStream *iface) return CONTAINING_RECORD(iface, mfbytestream, IMFByteStream_iface); } +static struct bytestream *impl_bytestream_from_IMFGetService(IMFGetService *iface) +{ + return CONTAINING_RECORD(iface, struct bytestream, IMFGetService_iface); +} + static struct bytestream *impl_from_read_callback_IMFAsyncCallback(IMFAsyncCallback *iface) { return CONTAINING_RECORD(iface, struct bytestream, read_callback); @@ -2013,9 +2019,13 @@ static HRESULT WINAPI bytestream_QueryInterface(IMFByteStream *iface, REFIID rii { *out = &stream->attributes.IMFAttributes_iface; } + else if (stream->IMFGetService_iface.lpVtbl && IsEqualIID(riid, &IID_IMFGetService)) + { + *out = &stream->IMFGetService_iface; + } else { - FIXME("(%s, %p)\n", debugstr_guid(riid), out); + WARN("Unsupported %s.\n", debugstr_guid(riid)); *out = NULL; return E_NOINTERFACE; } @@ -2621,6 +2631,40 @@ static const IMFAsyncCallbackVtbl bytestream_file_write_callback_vtbl = bytestream_file_write_callback_Invoke, }; +static HRESULT WINAPI bytestream_file_getservice_QueryInterface(IMFGetService *iface, REFIID riid, void **obj) +{ + struct bytestream *stream = impl_bytestream_from_IMFGetService(iface); + return IMFByteStream_QueryInterface(&stream->IMFByteStream_iface, riid, obj); +} + +static ULONG WINAPI bytestream_file_getservice_AddRef(IMFGetService *iface) +{ + struct bytestream *stream = impl_bytestream_from_IMFGetService(iface); + return IMFByteStream_AddRef(&stream->IMFByteStream_iface); +} + +static ULONG WINAPI bytestream_file_getservice_Release(IMFGetService *iface) +{ + struct bytestream *stream = impl_bytestream_from_IMFGetService(iface); + return IMFByteStream_Release(&stream->IMFByteStream_iface); +} + +static HRESULT WINAPI bytestream_file_getservice_GetService(IMFGetService *iface, REFGUID service, + REFIID riid, void **obj) +{ + FIXME("%p, %s, %s, %p.\n", iface, debugstr_guid(service), debugstr_guid(riid), obj); + + return E_NOTIMPL; +} + +static const IMFGetServiceVtbl bytestream_file_getservice_vtbl = +{ + bytestream_file_getservice_QueryInterface, + bytestream_file_getservice_AddRef, + bytestream_file_getservice_Release, + bytestream_file_getservice_GetService, +}; + /*********************************************************************** * MFCreateFile (mfplat.@) */ @@ -2696,6 +2740,7 @@ HRESULT WINAPI MFCreateFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE open } object->IMFByteStream_iface.lpVtbl = &mfbytestream_vtbl; object->attributes.IMFAttributes_iface.lpVtbl = &mfbytestream_attributes_vtbl; + object->IMFGetService_iface.lpVtbl = &bytestream_file_getservice_vtbl; object->read_callback.lpVtbl = &bytestream_file_read_callback_vtbl; object->write_callback.lpVtbl = &bytestream_file_write_callback_vtbl; InitializeCriticalSection(&object->cs); diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 4e01abf..6c6bfc1 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -1146,10 +1146,8 @@ static void test_file_stream(void) ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr); hr = IMFByteStream_QueryInterface(bytestream, &IID_IMFGetService, (void **)&unk); -todo_wine ok(hr == S_OK, "Failed to get interface pointer, hr %#x.\n", hr); - if (SUCCEEDED(hr)) - IUnknown_Release(unk); + IUnknown_Release(unk); hr = IMFByteStream_GetCapabilities(bytestream, &caps); ok(hr == S_OK, "Failed to get stream capabilities, hr %#x.\n", hr);
1
0
0
0
Nikolay Sivov : mfplat: Set default attributes for file-based bytestream object.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: 12812772a0cbe143ca89844904198806dfca62a6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=12812772a0cbe143ca898449…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:18 2019 +0300 mfplat: Set default attributes for file-based bytestream object. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 20 ++++++++++++++++---- dlls/mfplat/tests/mfplat.c | 9 ++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index b3c264b..12ac940 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -2632,6 +2632,7 @@ HRESULT WINAPI MFCreateFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE open DWORD filesharemode = FILE_SHARE_READ; DWORD filecreation_disposition = 0; DWORD fileattributes = 0; + FILETIME writetime; HANDLE file; HRESULT hr; @@ -2680,15 +2681,16 @@ HRESULT WINAPI MFCreateFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE open if(file == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError()); - /* Close the file again, since we don't do anything with it yet */ - CloseHandle(file); - object = heap_alloc_zero(sizeof(*object)); if (!object) + { + CloseHandle(file); return E_OUTOFMEMORY; + } - if (FAILED(hr = init_attributes_object(&object->attributes, 0))) + if (FAILED(hr = init_attributes_object(&object->attributes, 2))) { + CloseHandle(file); heap_free(object); return hr; } @@ -2699,8 +2701,18 @@ HRESULT WINAPI MFCreateFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE open InitializeCriticalSection(&object->cs); list_init(&object->pending); + if (GetFileTime(file, NULL, NULL, &writetime)) + { + IMFAttributes_SetBlob(&object->attributes.IMFAttributes_iface, &MF_BYTESTREAM_LAST_MODIFIED_TIME, + (const UINT8 *)&writetime, sizeof(writetime)); + } + + IMFAttributes_SetString(&object->attributes.IMFAttributes_iface, &MF_BYTESTREAM_ORIGIN_NAME, url); + *bytestream = &object->IMFByteStream_iface; + CloseHandle(file); + return S_OK; } diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 6603808..4e01abf 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -1169,24 +1169,19 @@ todo_wine hr = IMFAttributes_GetCount(attributes, &count); ok(hr == S_OK, "Failed to get attributes count, hr %#x.\n", hr); -todo_wine ok(count == 2, "Unexpected attributes count %u.\n", count); /* Original file name. */ hr = IMFAttributes_GetAllocatedString(attributes, &MF_BYTESTREAM_ORIGIN_NAME, &str, &count); -todo_wine ok(hr == S_OK, "Failed to get attribute, hr %#x.\n", hr); -if (SUCCEEDED(hr)) -{ ok(!lstrcmpW(str, filename), "Unexpected name %s.\n", wine_dbgstr_w(str)); CoTaskMemFree(str); -} + /* Modification time. */ hr = IMFAttributes_GetItemType(attributes, &MF_BYTESTREAM_LAST_MODIFIED_TIME, &item_type); -todo_wine { ok(hr == S_OK, "Failed to get item type, hr %#x.\n", hr); ok(item_type == MF_ATTRIBUTE_BLOB, "Unexpected item type.\n"); -} + IMFAttributes_Release(attributes); hr = MFCreateFile(MF_ACCESSMODE_READ, MF_OPENMODE_FAIL_IF_NOT_EXIST,
1
0
0
0
Nikolay Sivov : mfplat: Set capabilities flags for IStream-based bytestream object.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: e3c76d773b0c21ede0b0fcd5c4702462d932a5d6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e3c76d773b0c21ede0b0fcd5…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:17 2019 +0300 mfplat: Set capabilities flags for IStream-based bytestream object. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 1 + dlls/mfplat/tests/mfplat.c | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 2adf381..b3c264b 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -2582,6 +2582,7 @@ HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *stream, IMFByteStream **byt IStream_AddRef(object->stream); position.QuadPart = 0; IStream_Seek(object->stream, position, STREAM_SEEK_SET, NULL); + object->capabilities = MFBYTESTREAM_IS_READABLE | MFBYTESTREAM_IS_SEEKABLE; *bytestream = &object->IMFByteStream_iface; diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index f0148e1..6603808 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -1091,7 +1091,6 @@ static void test_MFCreateMFByteStreamOnStream(void) hr = IMFByteStream_GetCapabilities(bytestream, &caps); ok(hr == S_OK, "Failed to get stream capabilities, hr %#x.\n", hr); -todo_wine ok(caps == (MFBYTESTREAM_IS_READABLE | MFBYTESTREAM_IS_SEEKABLE), "Unexpected caps %#x.\n", caps); hr = IMFByteStream_Close(bytestream); @@ -1102,7 +1101,6 @@ todo_wine hr = IMFByteStream_GetCapabilities(bytestream, &caps); ok(hr == S_OK, "Failed to get stream capabilities, hr %#x.\n", hr); -todo_wine ok(caps == (MFBYTESTREAM_IS_READABLE | MFBYTESTREAM_IS_SEEKABLE), "Unexpected caps %#x.\n", caps); caps = 0;
1
0
0
0
Nikolay Sivov : mfplat: Implement IStream-based bytestream object.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: e8c4c1db0c40e6b8bca3ab2295ea94bfe3d71dab URL:
https://source.winehq.org/git/wine.git/?a=commit;h=e8c4c1db0c40e6b8bca3ab22…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:16 2019 +0300 mfplat: Implement IStream-based bytestream object. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 649 ++++++++++++++++++++++++++++++++++++++++----- dlls/mfplat/tests/mfplat.c | 100 ++++++- include/mfidl.idl | 42 +++ include/mfobjects.idl | 1 + 4 files changed, 726 insertions(+), 66 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=e8c4c1db0c40e6b8bca3…
1
0
0
0
Nikolay Sivov : mfplat: Implement media type wrapping.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: 16477a0922d36885d1f129f8540a30e7d4d481d6 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=16477a0922d36885d1f129f8…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:15 2019 +0300 mfplat: Implement media type wrapping. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 1 + dlls/mfplat/mediatype.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/mfplat/mfplat.spec | 4 +-- dlls/mfplat/tests/mfplat.c | 57 ++++++++++++++++++++++++++++++++++++ include/mfapi.h | 3 ++ 5 files changed, 135 insertions(+), 2 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 30c3073..dd89f4c 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -559,6 +559,7 @@ static const char *debugstr_attr(const GUID *guid) X(MF_SOURCE_READER_ENABLE_TRANSCODE_ONLY_TRANSFORMS), X(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS), X(MF_MT_PIXEL_ASPECT_RATIO), + X(MF_MT_WRAPPED_TYPE), X(MF_MT_AVG_BITRATE), X(MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING), X(MF_PD_PMPHOST_CONTEXT), diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index a2e3a96..e64dd3d 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -1515,3 +1515,75 @@ BOOL WINAPI MFCompareFullToPartialMediaType(IMFMediaType *full_type, IMFMediaTyp return result; } + +/*********************************************************************** + * MFWrapMediaType (mfplat.@) + */ +HRESULT WINAPI MFWrapMediaType(IMFMediaType *original, REFGUID major, REFGUID subtype, IMFMediaType **ret) +{ + IMFMediaType *mediatype; + UINT8 *buffer; + UINT32 size; + HRESULT hr; + + TRACE("%p, %s, %s, %p.\n", original, debugstr_guid(major), debugstr_guid(subtype), ret); + + if (FAILED(hr = MFGetAttributesAsBlobSize((IMFAttributes *)original, &size))) + return hr; + + if (!(buffer = heap_alloc(size))) + return E_OUTOFMEMORY; + + if (FAILED(hr = MFGetAttributesAsBlob((IMFAttributes *)original, buffer, size))) + goto failed; + + if (FAILED(hr = MFCreateMediaType(&mediatype))) + goto failed; + + if (FAILED(hr = IMFMediaType_SetGUID(mediatype, &MF_MT_MAJOR_TYPE, major))) + goto failed; + + if (FAILED(hr = IMFMediaType_SetGUID(mediatype, &MF_MT_SUBTYPE, subtype))) + goto failed; + + if (FAILED(hr = IMFMediaType_SetBlob(mediatype, &MF_MT_WRAPPED_TYPE, buffer, size))) + goto failed; + + *ret = mediatype; + +failed: + heap_free(buffer); + + return hr; +} + +/*********************************************************************** + * MFUnwrapMediaType (mfplat.@) + */ +HRESULT WINAPI MFUnwrapMediaType(IMFMediaType *wrapper, IMFMediaType **ret) +{ + IMFMediaType *mediatype; + UINT8 *buffer; + UINT32 size; + HRESULT hr; + + TRACE("%p, %p.\n", wrapper, ret); + + if (FAILED(hr = MFCreateMediaType(&mediatype))) + return hr; + + if (FAILED(hr = IMFMediaType_GetAllocatedBlob(wrapper, &MF_MT_WRAPPED_TYPE, &buffer, &size))) + { + IMFMediaType_Release(mediatype); + return hr; + } + + hr = MFInitAttributesFromBlob((IMFAttributes *)mediatype, buffer, size); + CoTaskMemFree(buffer); + if (FAILED(hr)) + return hr; + + *ret = mediatype; + + return S_OK; +} diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec index 4272a20..79f25f5 100644 --- a/dlls/mfplat/mfplat.spec +++ b/dlls/mfplat/mfplat.spec @@ -152,9 +152,9 @@ @ stub MFUnblockThread @ stdcall MFUnlockPlatform() @ stdcall MFUnlockWorkQueue(long) -@ stub MFUnwrapMediaType +@ stdcall MFUnwrapMediaType(ptr ptr) @ stub MFValidateMediaTypeSize -@ stub MFWrapMediaType +@ stdcall MFWrapMediaType(ptr ptr ptr ptr) @ stub MFllMulDiv @ stub PropVariantFromStream @ stub PropVariantToStream diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 85fc176..d53251c 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -2616,6 +2616,62 @@ static void test_attributes_serialization(void) IMFAttributes_Release(dest); } +static void test_wrapped_media_type(void) +{ + IMFMediaType *mediatype, *mediatype2; + UINT32 count, type; + HRESULT hr; + GUID guid; + + hr = MFCreateMediaType(&mediatype); + ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr); + + hr = MFUnwrapMediaType(mediatype, &mediatype2); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaType_SetUINT32(mediatype, &GUID_NULL, 1); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + hr = IMFMediaType_SetUINT32(mediatype, &DUMMY_GUID1, 2); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = IMFMediaType_SetGUID(mediatype, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + ok(hr == S_OK, "Failed to set GUID value, hr %#x.\n", hr); + + hr = MFWrapMediaType(mediatype, &MFMediaType_Audio, &IID_IUnknown, &mediatype2); + ok(hr == S_OK, "Failed to create wrapped media type, hr %#x.\n", hr); + + hr = IMFMediaType_GetGUID(mediatype2, &MF_MT_MAJOR_TYPE, &guid); + ok(hr == S_OK, "Failed to get major type, hr %#x.\n", hr); + ok(IsEqualGUID(&guid, &MFMediaType_Audio), "Unexpected major type.\n"); + + hr = IMFMediaType_GetGUID(mediatype2, &MF_MT_SUBTYPE, &guid); + ok(hr == S_OK, "Failed to get subtype, hr %#x.\n", hr); + ok(IsEqualGUID(&guid, &IID_IUnknown), "Unexpected major type.\n"); + + hr = IMFMediaType_GetCount(mediatype2, &count); + ok(hr == S_OK, "Failed to get item count, hr %#x.\n", hr); + ok(count == 3, "Unexpected count %u.\n", count); + + hr = IMFMediaType_GetItemType(mediatype2, &MF_MT_WRAPPED_TYPE, &type); + ok(hr == S_OK, "Failed to get item type, hr %#x.\n", hr); + ok(type == MF_ATTRIBUTE_BLOB, "Unexpected item type.\n"); + + IMFMediaType_Release(mediatype); + + hr = MFUnwrapMediaType(mediatype2, &mediatype); + ok(hr == S_OK, "Failed to unwrap, hr %#x.\n", hr); + + hr = IMFMediaType_GetGUID(mediatype, &MF_MT_MAJOR_TYPE, &guid); + ok(hr == S_OK, "Failed to get major type, hr %#x.\n", hr); + ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected major type.\n"); + + hr = IMFMediaType_GetGUID(mediatype, &MF_MT_SUBTYPE, &guid); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#x.\n", hr); + + IMFMediaType_Release(mediatype); + IMFMediaType_Release(mediatype2); +} + START_TEST(mfplat) { CoInitialize(NULL); @@ -2648,6 +2704,7 @@ START_TEST(mfplat) test_MFCalculateImageSize(); test_MFCompareFullToPartialMediaType(); test_attributes_serialization(); + test_wrapped_media_type(); CoUninitialize(); } diff --git a/include/mfapi.h b/include/mfapi.h index b082f9c..2d794e4 100644 --- a/include/mfapi.h +++ b/include/mfapi.h @@ -105,6 +105,7 @@ DEFINE_GUID(MF_MT_ALL_SAMPLES_INDEPENDENT, 0xc9173739, 0x5e56, 0x461c, 0xb7, 0x1 DEFINE_GUID(MF_MT_USER_DATA, 0xb6bc765f, 0x4c3b, 0x40a4, 0xbd, 0x51, 0x25, 0x35, 0xb6, 0x6f, 0xe0, 0x9d); DEFINE_GUID(MF_MT_FRAME_RATE_RANGE_MIN, 0xd2e7558c, 0xdc1f, 0x403f, 0x9a, 0x72, 0xd2, 0x8b, 0xb1, 0xeb, 0x3b, 0x5e); DEFINE_GUID(MF_MT_FRAME_RATE_RANGE_MAX, 0xe3371d41, 0xb4cf, 0x4a05, 0xbd, 0x4e, 0x20, 0xb8, 0x8b, 0xb2, 0xc4, 0xd6); +DEFINE_GUID(MF_MT_WRAPPED_TYPE, 0x4d3f7b23, 0xd02f, 0x4e6c, 0x9b, 0xee, 0xe4, 0xbf, 0x2c, 0x6c, 0x69, 0x5d); DEFINE_GUID(MFT_CATEGORY_VIDEO_DECODER, 0xd6c02d4b, 0x6833, 0x45b4, 0x97, 0x1a, 0x05, 0xa4, 0xb0, 0x4b, 0xab, 0x91); DEFINE_GUID(MFT_CATEGORY_VIDEO_ENCODER, 0xf79eac7d, 0xe545, 0x4387, 0xbd, 0xee, 0xd6, 0x47, 0xd7, 0xbd, 0xe4, 0x2a); @@ -236,6 +237,8 @@ HRESULT WINAPI MFUnlockWorkQueue(DWORD queue); HRESULT WINAPI MFTUnregister(CLSID clsid); HRESULT WINAPI MFTUnregisterLocal(IClassFactory *factory); HRESULT WINAPI MFGetPluginControl(IMFPluginControl**); +HRESULT WINAPI MFWrapMediaType(IMFMediaType *original, REFGUID major, REFGUID subtype, IMFMediaType **wrapped); +HRESULT WINAPI MFUnwrapMediaType(IMFMediaType *wrapped, IMFMediaType **original); #if defined(__cplusplus) }
1
0
0
0
Nikolay Sivov : mfplat: Remove typedef for attributes structure.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: 52cca8e8e301b753b1f9e8c961dd2150d6aeaa65 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=52cca8e8e301b753b1f9e8c9…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:14 2019 +0300 mfplat: Remove typedef for attributes structure. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 18 +++++++++--------- dlls/mfplat/mfplat_private.h | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 8e9cb66..30c3073 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -644,9 +644,9 @@ static const char *debugstr_attr(const GUID *guid) return ret ? wine_dbg_sprintf("%s", ret->name) : wine_dbgstr_guid(guid); } -static inline mfattributes *impl_from_IMFAttributes(IMFAttributes *iface) +static inline struct attributes *impl_from_IMFAttributes(IMFAttributes *iface) { - return CONTAINING_RECORD(iface, mfattributes, IMFAttributes_iface); + return CONTAINING_RECORD(iface, struct attributes, IMFAttributes_iface); } static HRESULT WINAPI mfattributes_QueryInterface(IMFAttributes *iface, REFIID riid, void **out) @@ -668,12 +668,12 @@ static HRESULT WINAPI mfattributes_QueryInterface(IMFAttributes *iface, REFIID r static ULONG WINAPI mfattributes_AddRef(IMFAttributes *iface) { - mfattributes *This = impl_from_IMFAttributes(iface); - ULONG ref = InterlockedIncrement(&This->ref); + struct attributes *attributes = impl_from_IMFAttributes(iface); + ULONG refcount = InterlockedIncrement(&attributes->ref); - TRACE("(%p) ref=%u\n", This, ref); + TRACE("%p, refcount %d.\n", iface, refcount); - return ref; + return refcount; } static ULONG WINAPI mfattributes_Release(IMFAttributes *iface) @@ -1792,7 +1792,7 @@ HRESULT WINAPI MFInitAttributesFromBlob(IMFAttributes *dest, const UINT8 *buffer typedef struct _mfbytestream { - mfattributes attributes; + struct attributes attributes; IMFByteStream IMFByteStream_iface; } mfbytestream; @@ -2273,7 +2273,7 @@ HRESULT WINAPI MFGetPluginControl(IMFPluginControl **ret) typedef struct _mfpresentationdescriptor { - mfattributes attributes; + struct attributes attributes; IMFPresentationDescriptor IMFPresentationDescriptor_iface; } mfpresentationdescriptor; @@ -3566,7 +3566,7 @@ HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver) typedef struct media_event { - mfattributes attributes; + struct attributes attributes; IMFMediaEvent IMFMediaEvent_iface; MediaEventType type; diff --git a/dlls/mfplat/mfplat_private.h b/dlls/mfplat/mfplat_private.h index 7d2e25f..b3ed176 100644 --- a/dlls/mfplat/mfplat_private.h +++ b/dlls/mfplat/mfplat_private.h @@ -30,7 +30,7 @@ struct attribute PROPVARIANT value; }; -typedef struct attributes +struct attributes { IMFAttributes IMFAttributes_iface; LONG ref; @@ -38,7 +38,7 @@ typedef struct attributes struct attribute *attributes; size_t capacity; size_t count; -} mfattributes; +}; extern HRESULT init_attributes_object(struct attributes *object, UINT32 size) DECLSPEC_HIDDEN; extern void clear_attributes_object(struct attributes *object) DECLSPEC_HIDDEN;
1
0
0
0
Nikolay Sivov : mfplat: Print warning instead of fixme for unsupported interfaces in attributes object.
by Alexandre Julliard
22 Mar '19
22 Mar '19
Module: wine Branch: master Commit: 71bf156e1bc658c77814eb90ac8a8e2f39e38755 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=71bf156e1bc658c77814eb90…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 22 09:15:13 2019 +0300 mfplat: Print warning instead of fixme for unsupported interfaces in attributes object. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mfplat/main.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 899aca7..8e9cb66 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -651,24 +651,19 @@ static inline mfattributes *impl_from_IMFAttributes(IMFAttributes *iface) static HRESULT WINAPI mfattributes_QueryInterface(IMFAttributes *iface, REFIID riid, void **out) { - mfattributes *This = impl_from_IMFAttributes(iface); - - TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), out); + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out); - if(IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IMFAttributes)) + if (IsEqualIID(riid, &IID_IMFAttributes) || + IsEqualGUID(riid, &IID_IUnknown)) { - *out = &This->IMFAttributes_iface; - } - else - { - FIXME("(%s, %p)\n", debugstr_guid(riid), out); - *out = NULL; - return E_NOINTERFACE; + *out = iface; + IMFAttributes_AddRef(iface); + return S_OK; } - IUnknown_AddRef((IUnknown*)*out); - return S_OK; + WARN("Unsupported %s.\n", debugstr_guid(riid)); + *out = NULL; + return E_NOINTERFACE; } static ULONG WINAPI mfattributes_AddRef(IMFAttributes *iface)
1
0
0
0
← Newer
1
...
22
23
24
25
26
27
28
...
110
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Results per page:
10
25
50
100
200