mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 10:11:08 +00:00
mediafoundation: Add util function to dump IMFAttributes values
It would be useful for debugging. Reference: https://docs.microsoft.com/en-us/windows/win32/medfound/media-type-debugging-code Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1280>
This commit is contained in:
parent
bd8a415747
commit
c8469644dd
3 changed files with 318 additions and 2 deletions
|
@ -393,3 +393,307 @@ _gst_mf_result (HRESULT hr, GstDebugCategory * cat, const gchar * file,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reference:
|
||||||
|
* https://docs.microsoft.com/en-us/windows/win32/medfound/media-type-debugging-code */
|
||||||
|
#define GST_MF_IF_EQUAL_RETURN(guid,val) G_STMT_START { \
|
||||||
|
if (IsEqualGUID (guid, val)) \
|
||||||
|
return G_STRINGIFY (val); \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
|
static const gchar *
|
||||||
|
gst_mf_guid_to_static_string (const GUID& guid)
|
||||||
|
{
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_SUBTYPE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_ALL_SAMPLES_INDEPENDENT);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_FIXED_SIZE_SAMPLES);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_COMPRESSED);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_SAMPLE_SIZE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_WRAPPED_TYPE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_NUM_CHANNELS);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_SECOND);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FLOAT_SAMPLES_PER_SECOND);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_AVG_BYTES_PER_SECOND);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BLOCK_ALIGNMENT);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BITS_PER_SAMPLE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_VALID_BITS_PER_SAMPLE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_BLOCK);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_CHANNEL_MASK);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FOLDDOWN_MATRIX);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKREF);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKTARGET);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGREF);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGTARGET);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AUDIO_PREFER_WAVEFORMATEX);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AAC_PAYLOAD_TYPE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_FRAME_SIZE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MAX);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MIN);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_PIXEL_ASPECT_RATIO);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DRM_FLAGS);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_PAD_CONTROL_FLAGS);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_SOURCE_CONTENT_HINT);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_VIDEO_CHROMA_SITING);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_INTERLACE_MODE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_TRANSFER_FUNCTION);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_VIDEO_PRIMARIES);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_CUSTOM_VIDEO_PRIMARIES);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_YUV_MATRIX);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_VIDEO_LIGHTING);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_VIDEO_NOMINAL_RANGE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_GEOMETRIC_APERTURE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MINIMUM_DISPLAY_APERTURE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_APERTURE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_ENABLED);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AVG_BITRATE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AVG_BIT_ERROR_RATE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MAX_KEYFRAME_SPACING);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DEFAULT_STRIDE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_PALETTE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_USER_DATA);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_AM_FORMAT_TYPE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG_START_TIME_CODE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG2_PROFILE);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG2_LEVEL);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG2_FLAGS);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG_SEQUENCE_HEADER);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_0);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_0);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_SRC_PACK);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_CTRL_PACK);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_HEADER);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_FORMAT);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_IMAGE_LOSS_TOLERANT);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG4_SAMPLE_DESCRIPTION);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_4CC);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_WAVE_FORMAT_TAG);
|
||||||
|
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_Audio);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_Video);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_Protected);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_SAMI);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_Script);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_Image);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_HTML);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_Binary);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFMediaType_FileTransfer);
|
||||||
|
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_AI44);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_ARGB32);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_AYUV);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_DV25);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_DV50);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_DVH1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_DVSD);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_DVSL);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_H264);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_H265);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_HEVC);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_HEVC_ES);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_I420);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_IYUV);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_M4S2);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MJPG);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MP43);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MP4S);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MP4V);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MPG1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MSS1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_MSS2);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_NV11);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_NV12);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_P010);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_P016);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_P210);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_P216);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_RGB24);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_RGB32);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_RGB555);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_RGB565);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_RGB8);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_UYVY);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_v210);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_v410);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_VP80);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_VP90);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_WMV1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_WMV2);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_WMV3);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_WVC1);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_Y210);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_Y216);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_Y410);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_Y416);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_Y41P);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_Y41T);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_YUY2);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_YV12);
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFVideoFormat_YVYU);
|
||||||
|
|
||||||
|
/* WAVE_FORMAT_PCM */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_PCM);
|
||||||
|
/* WAVE_FORMAT_IEEE_FLOAT */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_Float);
|
||||||
|
/* WAVE_FORMAT_DTS */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_DTS);
|
||||||
|
/* WAVE_FORMAT_DOLBY_AC3_SPDIF */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_Dolby_AC3_SPDIF);
|
||||||
|
/* WAVE_FORMAT_DRM */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_DRM);
|
||||||
|
/* WAVE_FORMAT_WMAUDIO2 */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV8);
|
||||||
|
/* WAVE_FORMAT_WMAUDIO3 */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV9);
|
||||||
|
/* WAVE_FORMAT_WMAUDIO_LOSSLESS */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudio_Lossless);
|
||||||
|
/* WAVE_FORMAT_WMASPDIF */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_WMASPDIF);
|
||||||
|
/* WAVE_FORMAT_WMAVOICE9 */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_MSP1);
|
||||||
|
/* WAVE_FORMAT_MPEGLAYER3 */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_MP3);
|
||||||
|
/* WAVE_FORMAT_MPEG */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_MPEG);
|
||||||
|
/* WAVE_FORMAT_MPEG_HEAAC */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_AAC);
|
||||||
|
/* WAVE_FORMAT_MPEG_ADTS_AAC */
|
||||||
|
GST_MF_IF_EQUAL_RETURN(guid, MFAudioFormat_ADTS);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
gst_mf_guid_to_string (const GUID& guid)
|
||||||
|
{
|
||||||
|
const gchar *str = NULL;
|
||||||
|
HRESULT hr;
|
||||||
|
WCHAR *name = NULL;
|
||||||
|
gchar *ret = NULL;
|
||||||
|
|
||||||
|
str = gst_mf_guid_to_static_string (guid);
|
||||||
|
if (str)
|
||||||
|
return g_strdup (str);
|
||||||
|
|
||||||
|
hr = StringFromCLSID (guid, &name);
|
||||||
|
if (gst_mf_result (hr) && name) {
|
||||||
|
ret = g_utf16_to_utf8 ((const gunichar2 *) name, -1, NULL, NULL, NULL);
|
||||||
|
CoTaskMemFree (name);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = g_strdup_printf
|
||||||
|
("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",
|
||||||
|
(guint) guid.Data1, (guint) guid.Data2, (guint) guid.Data3,
|
||||||
|
guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
|
||||||
|
guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
gst_mf_attribute_value_to_string (const GUID& guid, const PROPVARIANT& var)
|
||||||
|
{
|
||||||
|
if (IsEqualGUID (guid, MF_MT_FRAME_RATE) ||
|
||||||
|
IsEqualGUID (guid, MF_MT_FRAME_RATE_RANGE_MAX) ||
|
||||||
|
IsEqualGUID (guid, MF_MT_FRAME_RATE_RANGE_MIN) ||
|
||||||
|
IsEqualGUID (guid, MF_MT_FRAME_SIZE) ||
|
||||||
|
IsEqualGUID (guid, MF_MT_PIXEL_ASPECT_RATIO)) {
|
||||||
|
UINT32 high = 0, low = 0;
|
||||||
|
|
||||||
|
Unpack2UINT32AsUINT64(var.uhVal.QuadPart, &high, &low);
|
||||||
|
return g_strdup_printf ("%dx%d", high, low);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsEqualGUID (guid, MF_MT_GEOMETRIC_APERTURE) ||
|
||||||
|
IsEqualGUID (guid, MF_MT_MINIMUM_DISPLAY_APERTURE) ||
|
||||||
|
IsEqualGUID (guid, MF_MT_PAN_SCAN_APERTURE)) {
|
||||||
|
/* FIXME: Not our usecase for now */
|
||||||
|
return g_strup ("Not parsed");
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (var.vt) {
|
||||||
|
case VT_UI4:
|
||||||
|
return g_strdup_printf ("%d", var.ulVal);
|
||||||
|
case VT_UI8:
|
||||||
|
return g_strdup_printf ("%" G_GUINT64_FORMAT, var.uhVal);
|
||||||
|
case VT_R8:
|
||||||
|
return g_strdup_printf ("%f", var.dblVal);
|
||||||
|
case VT_CLSID:
|
||||||
|
return gst_mf_guid_to_string (*var.puuid);
|
||||||
|
case VT_LPWSTR:
|
||||||
|
return g_utf16_to_utf8 ((const gunichar2 *) var.pwszVal,
|
||||||
|
-1, NULL, NULL, NULL);
|
||||||
|
case VT_UNKNOWN:
|
||||||
|
return g_strdup ("IUnknown");
|
||||||
|
default:
|
||||||
|
return g_strdup_printf ("Unhandled type (vt = %d)", var.vt);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_mf_dump_attribute_value_by_index (IMFAttributes * attr, const gchar * msg,
|
||||||
|
guint index, GstDebugLevel level, GstDebugCategory * cat, const gchar * file,
|
||||||
|
const gchar * function, gint line)
|
||||||
|
{
|
||||||
|
gchar *guid_name = NULL;
|
||||||
|
gchar *value = NULL;
|
||||||
|
GUID guid = GUID_NULL;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
PROPVARIANT var;
|
||||||
|
PropVariantInit(&var);
|
||||||
|
|
||||||
|
hr = attr->GetItemByIndex(index, &guid, &var);
|
||||||
|
if (!gst_mf_result (hr))
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
guid_name = gst_mf_guid_to_string (guid);
|
||||||
|
if (!guid_name)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
value = gst_mf_attribute_value_to_string (guid, var);
|
||||||
|
if (!value)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
gst_debug_log (cat, level, file, function, line,
|
||||||
|
NULL, "%s attribute %d, %s: %s", msg ? msg : "", index, guid_name,
|
||||||
|
value);
|
||||||
|
|
||||||
|
done:
|
||||||
|
PropVariantClear(&var);
|
||||||
|
g_free (guid_name);
|
||||||
|
g_free (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_gst_mf_dump_attributes (IMFAttributes * attr, const gchar * msg,
|
||||||
|
GstDebugLevel level, GstDebugCategory * cat, const gchar * file,
|
||||||
|
const gchar * function, gint line)
|
||||||
|
{
|
||||||
|
#ifndef GST_DISABLE_GST_DEBUG
|
||||||
|
HRESULT hr;
|
||||||
|
UINT32 count = 0, i;
|
||||||
|
|
||||||
|
if (!attr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hr = attr->GetCount (&count);
|
||||||
|
if (!gst_mf_result (hr) || count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
gst_mf_dump_attribute_value_by_index (attr,
|
||||||
|
msg, i, level, cat, file, function, line);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -57,6 +57,17 @@ gboolean _gst_mf_result (HRESULT hr,
|
||||||
#define gst_mf_result(result) \
|
#define gst_mf_result(result) \
|
||||||
_gst_mf_result (result, GST_CAT_DEFAULT, __FILE__, GST_FUNCTION, __LINE__)
|
_gst_mf_result (result, GST_CAT_DEFAULT, __FILE__, GST_FUNCTION, __LINE__)
|
||||||
|
|
||||||
|
void _gst_mf_dump_attributes (IMFAttributes * attr,
|
||||||
|
const gchar * msg,
|
||||||
|
GstDebugLevel level,
|
||||||
|
GstDebugCategory * cat,
|
||||||
|
const gchar * file,
|
||||||
|
const gchar * function,
|
||||||
|
gint line);
|
||||||
|
|
||||||
|
#define gst_mf_dump_attributes(attr,msg,level) \
|
||||||
|
_gst_mf_dump_attributes (attr, msg, level, GST_CAT_DEFAULT, __FILE__, GST_FUNCTION, __LINE__)
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GST_MF_UTILS_H__ */
|
#endif /* __GST_MF_UTILS_H__ */
|
|
@ -52,9 +52,10 @@ mfplat_lib = cc.find_library('mfplat', required : mf_option)
|
||||||
mfreadwrite_lib = cc.find_library('mfreadwrite', required : mf_option)
|
mfreadwrite_lib = cc.find_library('mfreadwrite', required : mf_option)
|
||||||
mfuuid_lib = cc.find_library('mfuuid', required : mf_option)
|
mfuuid_lib = cc.find_library('mfuuid', required : mf_option)
|
||||||
strmiids_lib = cc.find_library('strmiids', required : mf_option)
|
strmiids_lib = cc.find_library('strmiids', required : mf_option)
|
||||||
|
ole32_dep = cc.find_library('ole32', required : mf_option)
|
||||||
runtimeobject_lib = cc.find_library('runtimeobject', required : false)
|
runtimeobject_lib = cc.find_library('runtimeobject', required : false)
|
||||||
|
|
||||||
have_mf_lib = mf_lib.found() and mfplat_lib.found() and mfreadwrite_lib.found() and mfuuid_lib.found() and strmiids_lib.found()
|
have_mf_lib = mf_lib.found() and mfplat_lib.found() and mfreadwrite_lib.found() and mfuuid_lib.found() and strmiids_lib.found() and ole32_dep.found()
|
||||||
if not have_mf_lib
|
if not have_mf_lib
|
||||||
if mf_option.enabled()
|
if mf_option.enabled()
|
||||||
error('The mediafoundation plugin was enabled explicitly, but required libraries were not found.')
|
error('The mediafoundation plugin was enabled explicitly, but required libraries were not found.')
|
||||||
|
@ -62,7 +63,7 @@ if not have_mf_lib
|
||||||
subdir_done()
|
subdir_done()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
mf_lib_deps += [mf_lib, mfplat_lib, mfreadwrite_lib, mfuuid_lib, strmiids_lib]
|
mf_lib_deps += [mf_lib, mfplat_lib, mfreadwrite_lib, mfuuid_lib, strmiids_lib, ole32_dep]
|
||||||
|
|
||||||
have_mf_header = true
|
have_mf_header = true
|
||||||
foreach h: mf_header_deps
|
foreach h: mf_header_deps
|
||||||
|
|
Loading…
Reference in a new issue