DirectShow DirectShow 레퍼런스 DirectShow 구조체 MPEG1WAVEFORMAT   [목차열람] [주소복사] [슬롯비우기]
MPEG1WAVEFORMAT
 
Microsoft DirectX 9.0

MPEG1WAVEFORMAT

MPEG1WAVEFORMAT 구조체는, MPEG-1 오디오 데이터의 포맷을 기술한다.

구문

typedef struct mpeg1waveformat_tag {
    WAVEFORMATEX    wfx;
    WORD            fwHeadLayer;
    DWORD           dwHeadBitrate;
    WORD            fwHeadMode;
    WORD            fwHeadModeExt;
    WORD            wHeadEmphasis;
    WORD            fwHeadFlags;
    DWORD           dwPTSLow;
    DWORD           dwPTSHigh;
} MPEG1WAVEFORMAT;

멤버

wfx

오디오 포맷에 관한 정보를 저장 하는 WAVEFORMATEX 구조체. 「주의」를 참조할것.

fwHeadLayer

다음의 정수로 정의되도록(듯이) MPEG 오디오 계층을 지정한다.

설명
ACM_MPEG_LAYER1 계층 1
ACM_MPEG_LAYER2 계층 2
ACM_MPEG_LAYER3 계층 3

일부의 MPEG 스트림에는, 복수의 계층으로부터의 프레임이 포함되는 경우가 있다. 그 경우, 플래그를 비트마다 OR 로 묶는 것.

dwHeadBitrate

bit rate (비트/초)를 지정한다. 이 값에는, MPEG 프레임의 헤더 코드는 아니고, 실제의 bit rate를 지정한다. bit rate가 변수인가, 또는 표준이 아닌 bit rate의 경우는, 이 필드를 제로로 설정한다.

fwHeadMode

다음의 정수로 정의되도록(듯이) 스트림 모드를 지정한다.

설명
ACM_MPEG_STEREO 스테레오
ACM_MPEG_JOINTSTEREO Joint 스테레오
ACM_MPEG_DUALCHANNEL 듀얼 채널
ACM_MPEG_SINGLECHANNEL 단일 채널

일부의 MPEG 스트림에는, 모드가 다른 프레임이 포함되는 경우가 있다. 그 경우, 플래그를 비트마다 OR 로 묶는 것.

fwHeadModeExt

다음에 나타내는 Joint 스테레오 인코딩용의 모드 extension를 지정한다.

MPEG 프레임 헤더 코드 계층 1 으로 계층 2 계층 3
0x01 '00' 대역 4 ~ 31 의 인텐시티스테레오 인텐시티스테레오를 오프, 미들 사이드 (MS) 스테레오를 오프
0x02 '01' 띠 8 ~ 31 의 인텐시티스테레오 인텐시티스테레오를 온, MS 스테레오를 오프
0x04 '10' 대역 12 ~ 31 의 인텐시티스테레오 인텐시티스테레오를 오프, MS 스테레오를 온
0x08 '11' 대역 16 ~ 31 의 인텐시티스테레오 인텐시티스테레오를 오프, MS 스테레오를 온

이러한 값은, 비트마다 OR 에 의해 연결되고 있는 일이 있다. 보통, 엔코더는 신호의 특성에 응해 extension 모드를 동적으로 바꾼다. 따라서, 표준의 Joint 스테레오 인코딩에서는, 이 필드에 0x0F (모든 플래그의 비트마다 OR)를 설정한다. 다만, 이 필드를 사용해, 엔코더를 지정할 수 있는 일련의 인코딩의 종류를 제한할 수 있다.

이 필드는,fwHeadMode 에 ACM_MPEG_JOINTSTEREO 가 포함되는 경우에 한해서 적용된다. 그 외의 모드에 대해서는, 이 필드에는 제로를 설정한다.

wHeadEmphasis

디코더에 필요한 데엔파시스를 지정한다.

MPEG 프레임 헤더 코드 필요한 데엔파시스
1 '00' 없음
2 '01' 50/15 ms 강조
3 '10' 예약이 끝난 상태
4 '11' CCITT J. 17

fwHeadFlags

다음의 플래그의 0 개 이상의 비트마다 편성을 지정한다.

설명
ACM_MPEG_PRIVATEBIT Private 비트를 설정한다.
ACM_MPEG_COPYRIGHT 저작권 비트를 설정한다.
ACM_MPEG_ORIGINALHOME 오리지날/홈 비트를 설정한다.
ACM_MPEG_PROTECTIONBIT 보호 비트를 설정해, 16 비트의 에러 보호 코드를 각 프레임에 삽입한다.
ACM_MPEG_ID_MPEG1 ID 비트를 1 으로 설정해, 스트림을 MPEG-1 오디오 스트림으로서 정의한다.

엔코더는 이러한 플래그를 사용해, MPEG 오디오 프레임 헤더의 대응하는 비트를 설정한다.

dwPTSLow

오디오 스트림의 선두 프레임에 있는 프레젠테이션 타임 스탬프 (PTS)의 최하정도 32 비트를 지정한다.

dwPTSHigh

PTS 의 최상정도 비트를 지정한다. dwPTSLow 필드와 dwPTSHigh 필드는, 단일의 64 비트값이라고 볼 수가 있다.

주의

MPEG-1 오디오의 경우,wfx 멤버에 정의되는 WAVEFORMATEX 구조체에는 다음의 값을 갖게할 필요가 있다.

WAVEFORMATEX 멤버 설명
wFormatTag 반드시 WAVE_FORMAT_MPEG 를 지정하는 것.
nChannels 단청의의 경우는 1, 스테레오의 경우는 2.
nSamplesPerSec 샘플링 주파수가 고정의 경우는, 샘플링 주파수를 지정한다. 샘플링 주파수가 가변의 경우, 이 필드는 0 으로 설정한다.
nAvgBytesPerSec 평균 데이터 레이트를 지정한다. 계층 3 으로 가변 bit rate 인코딩이 사용되고 있는 경우, 이 값은 올바른 MPEG-1 bit rate가 아닐 가능성이 있다.
nBlockAlign 고정 오디오 프레임장을 가지는 오디오 스트림의 경우, 이 필드에서 오디오 프레임의 길이를 지정한다. 프레임장이 가변의 경우, 이 필드는 1 으로 설정한다.

샘플링 주파수가 32 kHz 또는 48 kHz 로 bit rate가 일정한 경우, 오디오 frame size는 일정한다. 그러한 경우,nBlockAlign 는 다음의 방법으로 요구하는 것.

  • 계층 1 : 4 * (int)(12 * bitrate / sampling frequency)
  • 계층 2 및 계층 3 : (int)(144 * bitrate / sampling frequency)

bit rate가 가변 또는 샘플링 주파수가 44.1 kHz 의 경우, 오디오 frame size는 일정은 아니기 때문에,nBlockAlign 에는 반드시 1 을 지정하는 것.

wBitsPerSample 미사용. 제로를 설정한다.
cbSize WAVEFORMATEX 구조체의 뒤의 포맷 데이터의 사이즈를 지정한다 (바이트 단위). 표준적인 MPEG1WAVEFORMAT 구조체의 경우, 이 값은 22 바이트이다.

참조

↑TOP