223 GUID_ENTRY(ff_MF_SA_MINIMUM_OUTPUT_SAMPLE_COUNT),
224 GUID_ENTRY(ff_MF_SA_MINIMUM_OUTPUT_SAMPLE_COUNT_PROGRESSIVE),
229 GUID_ENTRY(ff_MF_SA_D3D11_SHARED_WITHOUT_MUTEX),
268 GUID_ENTRY(MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION),
274 GUID_ENTRY(MF_MT_AUDIO_FLOAT_SAMPLES_PER_SECOND),
280 GUID_ENTRY(MF_MT_AUDIO_VALID_BITS_PER_SAMPLE),
315 GUID_ENTRY(ff_CODECAPI_AVDecVideoThumbnailGenerationMode),
316 GUID_ENTRY(ff_CODECAPI_AVDecVideoDropPicWithMissingRef),
317 GUID_ENTRY(ff_CODECAPI_AVDecVideoSoftwareDeinterlaceMode),
318 GUID_ENTRY(ff_CODECAPI_AVDecVideoFastDecodeMode),
320 GUID_ENTRY(ff_CODECAPI_AVDecVideoH264ErrorConcealment),
321 GUID_ENTRY(ff_CODECAPI_AVDecVideoMPEG2ErrorConcealment),
324 GUID_ENTRY(ff_CODECAPI_AVDecVideoDXVABusEncryption),
325 GUID_ENTRY(ff_CODECAPI_AVDecVideoSWPowerLevel),
326 GUID_ENTRY(ff_CODECAPI_AVDecVideoMaxCodedWidth),
327 GUID_ENTRY(ff_CODECAPI_AVDecVideoMaxCodedHeight),
328 GUID_ENTRY(ff_CODECAPI_AVDecNumWorkerThreads),
329 GUID_ENTRY(ff_CODECAPI_AVDecSoftwareDynamicFormatChange),
330 GUID_ENTRY(ff_CODECAPI_AVDecDisableVideoPostProcessing),
365 hr = IMFAttributes_GetCount(attrs, &count);
369 for (n = 0; n < count; n++) {
371 MF_ATTRIBUTE_TYPE
type;
372 char extra[80] = {0};
375 hr = IMFAttributes_GetItemByIndex(attrs, n, &
key,
NULL);
381 if (IsEqualGUID(&
key, &MF_MT_AUDIO_CHANNEL_MASK)) {
383 hr = IMFAttributes_GetUINT32(attrs, &
key, &v);
386 snprintf(extra,
sizeof(extra),
" (0x%x)", (
unsigned)v);
387 }
else if (IsEqualGUID(&
key, &MF_MT_FRAME_SIZE)) {
393 snprintf(extra,
sizeof(extra),
" (%dx%d)", (
int)
w, (
int)
h);
394 }
else if (IsEqualGUID(&
key, &MF_MT_PIXEL_ASPECT_RATIO) ||
395 IsEqualGUID(&
key, &MF_MT_FRAME_RATE)) {
401 snprintf(extra,
sizeof(extra),
" (%d:%d)", (
int)num, (
int)den);
404 hr = IMFAttributes_GetItemType(attrs, &
key, &
type);
409 case MF_ATTRIBUTE_UINT32: {
411 hr = IMFAttributes_GetUINT32(attrs, &
key, &v);
416 case MF_ATTRIBUTE_UINT64: {
418 hr = IMFAttributes_GetUINT64(attrs, &
key, &v);
424 case MF_ATTRIBUTE_DOUBLE: {
426 hr = IMFAttributes_GetDouble(attrs, &
key, &v);
432 case MF_ATTRIBUTE_STRING: {
434 hr = IMFAttributes_GetString(attrs, &
key,
s,
sizeof(
s),
NULL);
440 case MF_ATTRIBUTE_GUID: {
442 hr = IMFAttributes_GetGUID(attrs, &
key, &v);
448 case MF_ATTRIBUTE_BLOB: {
451 hr = IMFAttributes_GetBlobSize(attrs, &
key, &sz);
454 if (sz <=
sizeof(
buffer)) {
462 const char *hex =
"0123456789ABCDEF";
463 if (
pos * 3 + 3 >
sizeof(str))
467 str[
pos * 3 + 2] =
' ';
469 str[
pos * 3 + 0] = 0;
476 case MF_ATTRIBUTE_IUNKNOWN: {
486 if (IsEqualGUID(&
key, &MF_MT_SUBTYPE)) {
555 MFT_REGISTER_TYPE_INFO *in_type,
556 MFT_REGISTER_TYPE_INFO *out_type,
565 IMFActivate *winner = 0;
572 flags = MFT_ENUM_FLAG_SORTANDFILTER;
575 flags |= MFT_ENUM_FLAG_HARDWARE;
577 flags |= MFT_ENUM_FLAG_SYNCMFT;
583 goto error_uninit_mf;
589 for (n = 0; n < num_activate; n++) {
596 for (n = 0; n < num_activate; n++) {
599 hr = IMFActivate_ActivateObject(
activate[n], &IID_IMFTransform,
603 IMFActivate_AddRef(winner);
608 for (n = 0; n < num_activate; n++)
615 goto error_uninit_mf;
620 IMFAttributes *attrs;
621 hr = IMFTransform_GetAttributes(*res, &attrs);
622 if (!FAILED(hr) && attrs) {
626 IMFAttributes_Release(attrs);
629 hr = IMFActivate_GetString(winner, &MFT_FRIENDLY_NAME_Attribute,
s,
636 IMFActivate_Release(winner);