Skip to main content
이 항목에서는 Microsoft Game Development Kit(GDK)에 포함된 샘플 중 하나를 사용하여 XBOX Series X 장치에서 Opus 하드웨어 가속 디코딩을 사용하는 예상 코드 흐름을 안내합니다. 이 샘플은 DecodeOne.cpp라고 하며, 하나의 클라이언트로 싱글 스트림 디코딩 시나리오를 다룹니다.

오디오 하드웨어 연결 및 시작

디코딩은 XApuConnect를 통해 하드웨어 가속 유닛과의 연결을 설정하는 것으로 시작됩니다. 호출자는 다음을 설정하기 위해 XApuConnectInputParameters를 사용하여 연결 요구사항을 설정합니다:
  1. 처리 유형(이 경우 XApuProcessType::DecodeOpus).
  2. 스트림 수(이 경우 1).
  3. 입력과 출력 데이터를 전달하고 검색하는 데 필요한 총 메모리. 이 경우 MaxInputBufferLength에 대해 1024(스트림 내 가장 큰 Opus 패킷보다 크거나 같아야 합니다). 이 수는 또한 16의 배수여야 하며, 7680이어야 합니다. 이는 48K에서 20ms의 데이터로, MaxOutputBufferLength에 대해 960 × 2 × sizeof(float) = 7680입니다. 출력도 16의 배수여야 합니다.
이 호출이 성공하면, XApuConnectOutputParameters::baseData 매개변수는 운영체제에서 할당한 메모리 위치를 가리키며, 이는 하드웨어 가속 유닛이 추가적인 마샬링이나 복사 없이 직접 액세스할 수 있는 방식으로 할당됩니다. 이 메모리는 호출자가 입력 데이터를 전달하고 출력 데이터를 검색하는 데 사용해야 합니다. 다음의 간단한 메모리 관리자 예제는 XApuConnectInputParameters를 설정하고 XApuConnectOutputParameters::baseData를 두 개의 포인터(입력 데이터용 하나와 출력 데이터용 다른 하나)로 분할하는 데 사용할 수 있습니다.
다음은 연결을 설정하는 첫 번째 단계에 대한 코드 예제입니다.

스트림 활성화 및 비활성화

장치와 연결이 설정된 후, 호출자는 단일 디코딩 엔진을 시작하는 스트림 활성화 명령을 보내야 합니다. 호출자는 스트림 인덱스와 채널 수를 지정해야 합니다. 모노 또는 스테레오 스트림만 허용됩니다. 호출자는 XApuDequeueResult를 호출하여 활성화 결과를 가져와야 합니다. 이 샘플에서는 XApuConnectInputParameters::maxQueuedCommandsPerStream이 1로 설정되어 있으므로, 호출자는 다음 명령을 제출하기 전에 각 결과를 기다려야 합니다. 여기에는 Activate, Process, Deactivate 명령이 포함됩니다(자세한 내용은 XApuCommandType 참고). 다음은 하나의 스트림을 활성화하는 코드입니다.
활성화 결과가 수신된 후, 호출자는 디코딩을 위해 Opus 패킷을 제출하기 시작할 수 있습니다. 이는 XApuCommandType::Process 명령을 사용하여 수행해야 합니다. 각 Process 명령에 대해 호출자는 다음을 수행해야 합니다:
  1. 정확히 하나의 Opus 패킷으로 입력 버퍼를 채웁니다.
  2. 패킷의 길이를 지정합니다.
  3. 오디오 하드웨어 가속 유닛에 의해 디코드된 데이터로 채워질 출력 버퍼의 위치를 제공합니다.
  4. 출력 버퍼의 최대 길이를 지정합니다.
또한 호출자는 streamIndexframeCount 값을 지정해야 합니다. 모든 디코드된 데이터를 출력 버퍼에 복사해야 하는 경우, frameCount 값은 패킷에 인코드된 프레임 수 이상의 값으로 설정할 수 있습니다(예: 20ms 패킷의 경우 frameCount는 960에서 0xFFFFFFFF 사이로 설정할 수 있습니다).
다음으로, 패킷의 디코드된 출력을 가져오려면 XApuDequeueResult를 호출해야 합니다. XApuResult가 성공적으로 검색된 후, 출력 데이터는 result.outputData에 저장됩니다. 처리 후, XApuCommandType::Process 명령과 함께 XApuEnqueueCommand에 대한 새 호출로 다음 패킷을 디코딩용으로 제출해야 합니다.
스트림의 모든 패킷이 디코드된 후, XApuCommandType::Deactivate 명령을 제출해야 합니다.

종료

비활성화 결과가 수신된 후, 호출자는 XApuDisconnect를 호출하여 오디오 하드웨어 가속 유닛과의 연결을 끊고 할당된 모든 리소스를 해제해야 합니다.
마지막 수정일 2026년 8월 24일