DecodeOne.cpp라고 하며, 하나의 클라이언트로 싱글 스트림 디코딩 시나리오를 다룹니다.
오디오 하드웨어 연결 및 시작
디코딩은 XApuConnect를 통해 하드웨어 가속 유닛과의 연결을 설정하는 것으로 시작됩니다. 호출자는 다음을 설정하기 위해 XApuConnectInputParameters를 사용하여 연결 요구사항을 설정합니다:- 처리 유형(이 경우 XApuProcessType::DecodeOpus).
- 스트림 수(이 경우 1).
- 입력과 출력 데이터를 전달하고 검색하는 데 필요한 총 메모리. 이 경우
MaxInputBufferLength에 대해 1024(스트림 내 가장 큰 Opus 패킷보다 크거나 같아야 합니다). 이 수는 또한 16의 배수여야 하며, 7680이어야 합니다. 이는 48K에서 20ms의 데이터로,MaxOutputBufferLength에 대해 960 × 2 × sizeof(float) = 7680입니다. 출력도 16의 배수여야 합니다.
스트림 활성화 및 비활성화
장치와 연결이 설정된 후, 호출자는 단일 디코딩 엔진을 시작하는 스트림 활성화 명령을 보내야 합니다. 호출자는 스트림 인덱스와 채널 수를 지정해야 합니다. 모노 또는 스테레오 스트림만 허용됩니다. 호출자는 XApuDequeueResult를 호출하여 활성화 결과를 가져와야 합니다. 이 샘플에서는 XApuConnectInputParameters::maxQueuedCommandsPerStream이 1로 설정되어 있으므로, 호출자는 다음 명령을 제출하기 전에 각 결과를 기다려야 합니다. 여기에는Activate, Process, Deactivate 명령이 포함됩니다(자세한 내용은 XApuCommandType 참고).
다음은 하나의 스트림을 활성화하는 코드입니다.
Process 명령에 대해 호출자는 다음을 수행해야 합니다:
- 정확히 하나의 Opus 패킷으로 입력 버퍼를 채웁니다.
- 패킷의 길이를 지정합니다.
- 오디오 하드웨어 가속 유닛에 의해 디코드된 데이터로 채워질 출력 버퍼의 위치를 제공합니다.
- 출력 버퍼의 최대 길이를 지정합니다.
streamIndex와 frameCount 값을 지정해야 합니다. 모든 디코드된 데이터를 출력 버퍼에 복사해야 하는 경우, frameCount 값은 패킷에 인코드된 프레임 수 이상의 값으로 설정할 수 있습니다(예: 20ms 패킷의 경우 frameCount는 960에서 0xFFFFFFFF 사이로 설정할 수 있습니다).
result.outputData에 저장됩니다. 처리 후, XApuCommandType::Process 명령과 함께 XApuEnqueueCommand에 대한 새 호출로 다음 패킷을 디코딩용으로 제출해야 합니다.
