서식 태그와 하위 형식 GUID 간 변환
비 PCM WAVE_FORMAT_EXTENSIBLE 형식을 처리하기 위한 지침은 웨이브 형식 태그로 지정된 비 PCM 형식에 대한 지침과 유사합니다. 특히 WAVE_FORMAT_EXTENSIBLE 형식에는 PCM 형식에 대한 팩터리와 별도로 핀 팩터리를 사용해야 하며 자체 데이터 범위 교차 처리기가 필요합니다.
WAVE_FORMAT_EXTENSIBLE 형식의 오디오 형식은 KSDATAFORMAT 구조체의 SubFormat 멤버에서 GUID에 의해 지정됩니다. 등록된 모든 웨이브 형식 태그에는 Ksmedia.h의 DEFINE_WAVEFORMATEX_GUID 매크로에 의해 생성되는 해당 하위 형식 GUID가 있습니다. 예를 들어 WAVE_FORMAT_DOLBY_AC3_SPDIF 태그에 해당하는 GUID는 DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)로 정의됩니다.
Ksmedia.h의 이 코드 조각은 새 GUID를 자동 초기화된 정적 변수로 정의하는 방법을 보여 줍니다.
#define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX \
0x00000000L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);
#define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)
Ksmedia.h의 이러한 매크로는 웨이브 형식 태그와 연결된 GUID 간에 변환됩니다.
#if !defined( DEFINE_WAVEFORMATEX_GUID )
#define DEFINE_WAVEFORMATEX_GUID(x) \
(USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
#endif
#define INIT_WAVEFORMATEX_GUID(Guid, x) \
{ \
*(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX; \
(Guid)->Data1 = (USHORT)(x); \
}
#define IS_VALID_WAVEFORMATEX_GUID(Guid) \
(!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, \
((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
#define EXTRACT_WAVEFORMATEX_ID(Guid)(USHORT)((Guid)->Data1)
아래 샘플 코드는 이러한 기술을 결합하여 값이 0x0092 파형 태그 WAVE_FORMAT_AC3_SPDIF 기반으로 하는 하위 형식 GUID를 만듭니다.
#define STATIC_KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF \
DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)
DEFINE_GUIDSTRUCT("00000092-0000-0010-8000-00aa00389b71",
KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF);
#define KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF \
DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF)
...
INIT_WAVEFORMATEX_GUID(pMyGuid,myWaveFormatTag);
...
if (IS_VALID_WAVEFORMATEX_GUID(aWaveFormatExGuidPtr)) {
aWaveFormatTag = EXTRACT_WAVEFORMATEX_ID(aWaveFormatExGuidPtr);
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기