Signed-off-by: Andrew Eikum aeikum@codeweavers.com --- dlls/evr/mixer.c | 3 +- dlls/mf/copier.c | 3 +- dlls/winegstreamer/audioconvert.c | 3 +- dlls/winegstreamer/mfplat.c | 3 +- dlls/winegstreamer/wma_decoder.c | 3 +- include/wine/mfdebug.h | 178 ++++++++++++++++++++++++++++++ 6 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 include/wine/mfdebug.h
diff --git a/dlls/evr/mixer.c b/dlls/evr/mixer.c index 0b957e7b6bd..e8488d6cf1a 100644 --- a/dlls/evr/mixer.c +++ b/dlls/evr/mixer.c @@ -32,6 +32,7 @@ #include "evcode.h"
#include "wine/debug.h" +#include "wine/mfdebug.h"
WINE_DEFAULT_DEBUG_CHANNEL(evr);
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags); + TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
EnterCriticalSection(&mixer->cs);
diff --git a/dlls/mf/copier.c b/dlls/mf/copier.c index 4972c9f9c44..857de34cb91 100644 --- a/dlls/mf/copier.c +++ b/dlls/mf/copier.c @@ -23,6 +23,7 @@ #include "mf_private.h"
#include "wine/debug.h" +#include "wine/mfdebug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
@@ -326,7 +327,7 @@ static HRESULT WINAPI sample_copier_transform_SetInputType(IMFTransform *iface, { struct sample_copier *transform = impl_from_IMFTransform(iface);
- TRACE("%p, %u, %p, %#x.\n", iface, id, type, flags); + TRACE("%p, %u, %p %s, %#x.\n", iface, id, type, wine_dbgstr_mfmediatype(type), flags);
return sample_copier_set_media_type(transform, TRUE, id, type, flags); } diff --git a/dlls/winegstreamer/audioconvert.c b/dlls/winegstreamer/audioconvert.c index d5723cdf58f..0d812af6500 100644 --- a/dlls/winegstreamer/audioconvert.c +++ b/dlls/winegstreamer/audioconvert.c @@ -25,6 +25,7 @@ #include "ksmedia.h"
#include "wine/debug.h" +#include "wine/mfdebug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
@@ -277,7 +278,7 @@ static HRESULT WINAPI audio_converter_SetInputType(IMFTransform *iface, DWORD id
struct audio_converter *converter = impl_audio_converter_from_IMFTransform(iface);
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, type, flags); + TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, type, wine_dbgstr_mfmediatype(type), flags);
if (id != 0) return MF_E_INVALIDSTREAMNUMBER; diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index a111bbe196d..cf4fbd5b04a 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -26,6 +26,7 @@ #include "mfapi.h"
#include "wine/debug.h" +#include "wine/mfdebug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mfplat);
@@ -186,7 +187,7 @@ static HRESULT WINAPI video_processor_GetOutputAvailableType(IMFTransform *iface
static HRESULT WINAPI video_processor_SetInputType(IMFTransform *iface, DWORD id, IMFMediaType *type, DWORD flags) { - FIXME("%p, %lu, %p, %#lx.\n", iface, id, type, flags); + FIXME("%p, %lu, %p %s, %#lx.\n", iface, id, type, wine_dbgstr_mfmediatype(type), flags);
return E_NOTIMPL; } diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 78316059052..aca9c50953d 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -26,6 +26,7 @@ #include "wmcodecdsp.h"
#include "wine/debug.h" +#include "wine/mfdebug.h" #include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(wmadec); @@ -330,7 +331,7 @@ static HRESULT WINAPI transform_SetInputType(IMFTransform *iface, DWORD id, IMFM HRESULT hr; ULONG i;
- TRACE("iface %p, id %lu, type %p, flags %#lx.\n", iface, id, type, flags); + TRACE("iface %p, id %lu, type %p %s, flags %#lx.\n", iface, id, type, wine_dbgstr_mfmediatype(type), flags);
if (FAILED(hr = IMFMediaType_GetGUID(type, &MF_MT_MAJOR_TYPE, &major)) || FAILED(hr = IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype))) diff --git a/include/wine/mfdebug.h b/include/wine/mfdebug.h new file mode 100644 index 00000000000..503d89dc9a8 --- /dev/null +++ b/include/wine/mfdebug.h @@ -0,0 +1,178 @@ +/* + * Copyright 2022 Andrew Eikum for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_WINE_MFDEBUG_H +#define __WINE_WINE_MFDEBUG_H + +static const char *wine_dbgstr_mfmediatype_guid( const GUID *guid ) +{ +#define X(x) if (IsEqualGUID( guid, &x )) return #x; + X(MFMediaType_Audio) + X(MFMediaType_Video) + + X(MFVideoFormat_Base) + X(MFVideoFormat_RGB8) + X(MFVideoFormat_RGB555) + X(MFVideoFormat_RGB565) + X(MFVideoFormat_RGB24) + X(MFVideoFormat_RGB32) + X(MFVideoFormat_ARGB32) + X(MFVideoFormat_A2R10G10B10) + X(MFVideoFormat_A16B16G16R16F) + X(MFVideoFormat_L8) + X(MFVideoFormat_L16) + X(MFVideoFormat_D16) + + X(MFVideoFormat_420O) + X(MFVideoFormat_DVSL) + X(MFVideoFormat_DVSD) + X(MFVideoFormat_DVHD) + X(MFVideoFormat_DV25) + X(MFVideoFormat_DV50) + X(MFVideoFormat_DVH1) + X(MFVideoFormat_DVC) + X(MFVideoFormat_v210) + X(MFVideoFormat_v216) + X(MFVideoFormat_v410) + X(MFVideoFormat_AI44) + X(MFVideoFormat_AV1) + X(MFVideoFormat_AYUV) + X(MFVideoFormat_H263) + X(MFVideoFormat_H264) + X(MFVideoFormat_H265) + X(MFVideoFormat_HEVC) + X(MFVideoFormat_HEVC_ES) + X(MFVideoFormat_I420) + X(MFVideoFormat_IYUV) + X(MFVideoFormat_M4S2) + X(MFVideoFormat_MJPG) + X(MFVideoFormat_MP43) + X(MFVideoFormat_MP4S) + X(MFVideoFormat_MP4V) + X(MFVideoFormat_MPG1) + X(MFVideoFormat_MSS1) + X(MFVideoFormat_MSS2) + X(MFVideoFormat_NV11) + X(MFVideoFormat_NV12) + X(MFVideoFormat_ORAW) + X(MFVideoFormat_P010) + X(MFVideoFormat_P016) + X(MFVideoFormat_P210) + X(MFVideoFormat_P216) + X(MFVideoFormat_UYVY) + X(MFVideoFormat_VP10) + X(MFVideoFormat_VP80) + X(MFVideoFormat_VP90) + X(MFVideoFormat_Y210) + X(MFVideoFormat_Y216) + X(MFVideoFormat_Y410) + X(MFVideoFormat_Y416) + X(MFVideoFormat_Y41P) + X(MFVideoFormat_Y41T) + X(MFVideoFormat_Y42T) + X(MFVideoFormat_YUY2) + X(MFVideoFormat_YV12) + X(MFVideoFormat_YVYU) + X(MFVideoFormat_YVU9) + X(MFVideoFormat_WMV1) + X(MFVideoFormat_WMV2) + X(MFVideoFormat_WMV3) + X(MFVideoFormat_WVC1) + + X(MFVideoFormat_Base_HDCP) + X(MFVideoFormat_H264_ES) + X(MFVideoFormat_H264_HDCP) + X(MFVideoFormat_HEVC_HDCP) + X(MFVideoFormat_MPEG2) + + X(MFAudioFormat_Base) + X(MFAudioFormat_AAC) + X(MFAudioFormat_ADTS) + X(MFAudioFormat_ALAC) + X(MFAudioFormat_AMR_NB) + X(MFAudioFormat_AMR_WB) + X(MFAudioFormat_AMR_WP) + X(MFAudioFormat_Dolby_AC3_SPDIF) + X(MFAudioFormat_DRM) + X(MFAudioFormat_DTS) + X(MFAudioFormat_Float) + X(MFAudioFormat_FLAC) + X(MFAudioFormat_MP3) + X(MFAudioFormat_MPEG) + X(MFAudioFormat_MSP1) + X(MFAudioFormat_Opus) + X(MFAudioFormat_PCM) + X(MFAudioFormat_WMAudioV8) + X(MFAudioFormat_WMAudioV9) + X(MFAudioFormat_WMAudio_Lossless) + X(MFAudioFormat_WMASPDIF) + + X(MFAudioFormat_AAC_HDCP) + X(MFAudioFormat_ADTS_HDCP) + X(MFAudioFormat_Base_HDCP) + X(MFAudioFormat_Dolby_AC3) + X(MFAudioFormat_Dolby_AC3_HDCP) + X(MFAudioFormat_Dolby_DDPlus) + X(MFAudioFormat_Float_SpatialObjects) + X(MFAudioFormat_LPCM) + X(MFAudioFormat_PCM_HDCP) + X(MFAudioFormat_Vorbis) + + X(MFMediaType_Binary) + X(MFMediaType_Default) + X(MFMediaType_FileTransfer) + X(MFMediaType_HTML) + X(MFMediaType_Image) + X(MFMediaType_MultiplexedFrames) + X(MFMediaType_Perception) + X(MFMediaType_Protected) + X(MFMediaType_SAMI) + X(MFMediaType_Script) + X(MFMediaType_Stream) + X(MFMediaType_Subtitle) +#undef X + return NULL; +} + +static const char *wine_dbgstr_mfmediatype( IMFMediaType *type ) +{ + GUID major, minor; + const char *major_s = "none", *minor_s = "none"; + + if (!type) return "{null}"; + + if (SUCCEEDED( IMFMediaType_GetMajorType( type, &major ) )) + { + major_s = wine_dbgstr_mfmediatype_guid( &major ); + + if (!major_s) + major_s = wine_dbgstr_guid( &major ); + } + + if (SUCCEEDED( IMFMediaType_GetGUID( type, &MF_MT_SUBTYPE, &minor ) )) + { + minor_s = wine_dbgstr_mfmediatype_guid( &minor ); + + if (!minor_s) + minor_s = wine_dbgstr_guid( &minor ); + } + + return wine_dbg_sprintf( "{%s, %s}", major_s, minor_s ); +} + +#endif /* __WINE_WINE_MFDEBUG_H */
On 2/7/22 17:49, Andrew Eikum wrote:
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags);
- TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
I haven't tried it, but I agree that it looks useful. One minor thing is that on null argument you get two nulls printed, but that's not a big deal.
Nikolay Sivov nsivov@codeweavers.com writes:
On 2/7/22 17:49, Andrew Eikum wrote:
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags);
- TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
I haven't tried it, but I agree that it looks useful. One minor thing is that on null argument you get two nulls printed, but that's not a big deal.
It may be useful, but it looks awfully specific for a global header. If we want that sort of thing it would have to be made more generally useful.
On 2/7/22 18:57, Alexandre Julliard wrote:
Nikolay Sivov nsivov@codeweavers.com writes:
On 2/7/22 17:49, Andrew Eikum wrote:
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags);
- TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
I haven't tried it, but I agree that it looks useful. One minor thing is that on null argument you get two nulls printed, but that's not a big deal.
It may be useful, but it looks awfully specific for a global header. If we want that sort of thing it would have to be made more generally useful.
We can certainly have a copy of such header in every module that needs it, so we can easily sync them. It might be possible to share via some custom export, but I think it's worse than a copy, especially because many modules are usable on Windows, which helps testing a lot.
On Mon, Feb 07, 2022 at 04:57:31PM +0100, Alexandre Julliard wrote:
Nikolay Sivov nsivov@codeweavers.com writes:
On 2/7/22 17:49, Andrew Eikum wrote:
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags);
- TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
I haven't tried it, but I agree that it looks useful. One minor thing is that on null argument you get two nulls printed, but that's not a big deal.
It may be useful, but it looks awfully specific for a global header. If we want that sort of thing it would have to be made more generally useful.
Yeah, I agree. This was the least-bad solution I could come up with.
Is there a better idea? Can some kind of PARENTSRC arrangement be made to work?
Andrew
Andrew Eikum aeikum@codeweavers.com writes:
On Mon, Feb 07, 2022 at 04:57:31PM +0100, Alexandre Julliard wrote:
Nikolay Sivov nsivov@codeweavers.com writes:
On 2/7/22 17:49, Andrew Eikum wrote:
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags);
- TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
I haven't tried it, but I agree that it looks useful. One minor thing is that on null argument you get two nulls printed, but that's not a big deal.
It may be useful, but it looks awfully specific for a global header. If we want that sort of thing it would have to be made more generally useful.
Yeah, I agree. This was the least-bad solution I could come up with.
Is there a better idea? Can some kind of PARENTSRC arrangement be made to work?
With the non-recursive makefile it should now be possible to include a header directly from some other module's directory. That's not something we'd want to encourage, but for some specific cases it may be acceptable.
On 2/7/22 10:09, Alexandre Julliard wrote:
Andrew Eikum aeikum@codeweavers.com writes:
On Mon, Feb 07, 2022 at 04:57:31PM +0100, Alexandre Julliard wrote:
Nikolay Sivov nsivov@codeweavers.com writes:
On 2/7/22 17:49, Andrew Eikum wrote:
@@ -853,7 +854,7 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW unsigned int count; GUID *guids;
- TRACE("%p, %lu, %p, %#lx.\n", iface, id, media_type, flags);
- TRACE("%p, %lu, %p %s, %#lx.\n", iface, id, media_type, wine_dbgstr_mfmediatype(media_type), flags);
I haven't tried it, but I agree that it looks useful. One minor thing is that on null argument you get two nulls printed, but that's not a big deal.
It may be useful, but it looks awfully specific for a global header. If we want that sort of thing it would have to be made more generally useful.
Yeah, I agree. This was the least-bad solution I could come up with.
Is there a better idea? Can some kind of PARENTSRC arrangement be made to work?
With the non-recursive makefile it should now be possible to include a header directly from some other module's directory. That's not something we'd want to encourage, but for some specific cases it may be acceptable.
Perhaps it wouldn't be bad to extend strmbase, or create a new static library.