> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SHAPE_XMA_CONTEXT

> SHAPE_XMA_CONTEXT

# SHAPE\_XMA\_CONTEXT

XBOX Media Audio(XMA) 컨텍스트입니다.

<a id="syntaxSection" />

## Syntax

```cpp theme={null}
typedef struct SHAPE_XMA_CONTEXT {  
    UINT32 sizeRead0 : 12;  
    UINT32 numLoops : 8;  
    UINT32 validBuffer : 2;  
    UINT32 sizeWrite : 5;  
    UINT32 offsetWrite : 5;  
    UINT32 sizeRead1 : 12;  
    UINT32 loopSubframeEnd : 2;  
    UINT32 reserved0 : 3;  
    UINT32 loopSubframeSkip : 3;  
    UINT32 numSubframesToDecode : 4;  
    UINT32 numSubframesToSkip : 3;  
    UINT32 sampleRate : 2;  
    UINT32 numChannels : 1;  
    UINT32 reserved1 : 1;  
    UINT32 validWrite : 1;  
    UINT32 offsetRead : 26;  
    UINT32 errorStatus : 5;  
    UINT32 errorSet : 1;  
    UINT32 loopStartOffset : 26;  
    UINT32 parserErrorStatus : 5;  
    UINT32 parserErrorSet : 1;  
    UINT32 loopEndOffset : 26;  
    UINT32 packetMetaData : 5;  
    UINT32 currentBuffer : 1;  
    UINT32 ptrRead0;  
    UINT32 ptrRead1;  
    UINT32 ptrWrite;  
    UINT32 ptrOverlapAdd;  
    UINT32 writeBufferOffsetRead : 5;  
    UINT32 reserved2 : 25;  
    UINT32 stopWhenDone : 1;  
    UINT32 interruptWhenDone : 1;  
    UINT32 reserved[6];  
} SHAPE_XMA_CONTEXT  
```

<a id="membersSection" />

### Members

*sizeRead0*\
Type: UINT32

쓰기: 왼쪽 입력 버퍼의 크기(2KB 블록 단위)입니다.

*numLoops*\
Type: UINT32

읽기/쓰기: 루프 수입니다. 255는 무한(연속) 루프를 지정합니다.

*validBuffer*\
Type: UINT32

읽기/쓰기: 입력 버퍼의 유효성 플래그입니다.

| Value | Description        |
| ----- | ------------------ |
| 00    | 두 버퍼 모두 유효하지 않습니다. |
| 01    | 버퍼 0(왼쪽)만 유효합니다.   |
| 10    | 버퍼 1(오른쪽)만 유효합니다.  |
| 11    | 두 버퍼 모두 유효합니다.     |

*sizeWrite*\
Type: UINT32

쓰기: 출력 버퍼의 크기(256바이트 블록 단위)입니다.

*offsetWrite*\
Type: UINT32

읽기: 하드웨어가 쓸 위치의 출력 버퍼 내 오프셋(256바이트 블록 단위)입니다.

*sizeRead1*\
Type: UINT32

쓰기: 오른쪽 입력 버퍼의 크기(2KB 블록 단위)입니다.

*loopSubframeEnd*\
Type: UINT32

쓰기: 루프 끝점의 서브프레임 번호(포함)입니다.

*reserved0*\
Type: UINT32

예약되어 있습니다.

*loopSubframeSkip*\
Type: UINT32

쓰기: 루프 시작 시 건너뛸 서브프레임 수입니다. 유효한 값은 0, 1, 2, 3, 4입니다.

*numSubframesToDecode*\
Type: UINT32

쓰기: 패스당 디코딩할 서브프레임 수입니다. 유효한 값은 1, 2, 4, 8입니다.

*numSubframesToSkip*\
Type: UINT32

쓰기: 건너뛸 서브프레임 수입니다. 유효한 값은 0, 1, 2, 3, 4입니다.

*sampleRate*\
Type: UINT32

쓰기: 스트림의 샘플 레이트입니다. 유효한 값은 [SHAPE\_XMA\_SAMPLE\_RATE](/reference/audio/shapexmacontext/enums/shape_xma_sample_rate) 열거형에 있습니다.

*numChannels*\
Type: UINT32

쓰기: 스트림의 채널 수입니다. 0은 모노(1채널)를 지정하고 1은 스테레오(2채널)를 지정합니다.

*reserved1*\
Type: UINT32

예약되어 있습니다.

*validWrite*\
Type: UINT32

읽기/쓰기: 쓰기 버퍼의 유효성 플래그입니다. 1은 하드웨어가 쓸 수 있음을 나타내며, 0은 하드웨어가 쓸 수 없음을 나타냅니다.

*offsetRead*\
Type: UINT32

읽기/쓰기: 입력 버퍼의 시작 지점으로부터의 오프셋(비트 단위)입니다.

*errorStatus*\
Type: UINT32

읽기: 하나 이상의 오류 값입니다.

| Error                                                                                                         | Value |
| ------------------------------------------------------------------------------------------------------------- | ----- |
| SHAPE\_XMA\_ERROR\_STATUS\_NO\_ERROR\_OCCURRED\_ERRORSET\_IS\_0                                               | 0     |
| SHAPE\_XMA\_ERROR\_STATUS\_WRITE\_BUFFER\_INVALID\_VALIDWR\_IS\_0                                             | 1     |
| SHAPE\_XMA\_ERROR\_STATUS\_INSUFFICIENT\_WRITE\_BUFFER\_SPACE\_VALIDWR\_IS\_1                                 | 2     |
| SHAPE\_XMA\_ERROR\_STATUS\_READ\_BUFFER\_INVALID\_VALIDBUFFER\_CURRBUF\_IS\_0                                 | 4     |
| SHAPE\_XMA\_ERROR\_STATUS\_FRAME\_CROSSES\_BOUNDARY\_INTO\_INVALID\_READ\_BUFFER\_VALIDBUFFER\_CURRBUF\_IS\_0 | 8     |
| SHAPE\_XMA\_ERROR\_STATUS\_FRAME\_CROSSES\_BOTH\_READ\_BUFFER\_BOUNDARIES                                     | 16    |

*errorSet*\
Type: UINT32

읽기: 오류 플래그입니다. 오류가 발생하지 않은 경우 0, 오류가 발생한 경우 1입니다. 오류 값을 검색하려면 [GetShapeXmaErrorStatus](/reference/audio/shapexmacontext/functions/getshapexmaerrorstatus)를 사용하세요.

*loopStartOffset*\
Type: UINT32

쓰기: 하드웨어가 디코딩을 시작할 위치의 읽기 버퍼 포인터로부터의 오프셋(비트 단위)입니다.

*parserErrorStatus*\
Type: UINT32

읽기: 파서 오류 값입니다.

| Error                                                    | Value |
| -------------------------------------------------------- | ----- |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_UNKNOWN\_STATE        | 1     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_OUT\_OF\_RANGE        | 2     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_FRAME\_SIZE\_EXCEEDED | 3     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_BITSTREAM\_CORRUPTION | 4     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_BARKVLC\_ERROR        | 5     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_BARKRLC\_ERROR        | 6     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_VLC4D\_ERROR          | 7     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_VLC2D\_ERROR          | 8     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_VLC1D\_ERROR          | 9     |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_RLC0\_ERROR           | 10    |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_RLC1\_ERROR           | 11    |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_LARGEVAL24\_ERROR     | 15    |

*parserErrorSet*\
Type: UINT32

읽기: 파서 오류 플래그입니다. 오류가 발생하지 않은 경우 0, 오류가 발생한 경우 1입니다. 오류 값을 검색하려면 [GetShapeXmaParserErrorStatus](/reference/audio/shapexmacontext/functions/getshapexmaparsererrorstatus)를 사용하세요.

*loopEndOffset*\
Type: UINT32

쓰기: 하드웨어가 디코딩을 종료할 위치의 읽기 버퍼 포인터로부터의 오프셋(비트 단위)입니다.

*packetMetaData*\
Type: UINT32

내부용으로 예약되어 있습니다.

*currentBuffer*\
Type: UINT32

읽기/쓰기: 현재 입력 버퍼입니다. 0은 왼쪽 버퍼를 지정하고 1은 오른쪽 버퍼를 지정합니다.

*ptrRead0*\
Type: UINT32

쓰기: 왼쪽 입력 버퍼에 대한 포인터입니다. 2KB 경계에 정렬되며, 하위 11비트는 무시됩니다.

*ptrRead1*\
Type: UINT32

쓰기: 오른쪽 입력 버퍼에 대한 포인터입니다. 2KB 경계에 정렬되며, 하위 11비트는 무시됩니다.

*ptrWrite*\
Type: UINT32

쓰기: 출력 버퍼에 대한 포인터입니다. 64바이트 경계에 정렬됩니다.

*ptrOverlapAdd*\
Type: UINT32

쓰기: 작업 버퍼에 대한 포인터입니다. 128바이트 경계에 정렬됩니다.

*writeBufferOffsetRead*\
Type: UINT32

쓰기: 출력 버퍼 내 읽기 포인터의 오프셋(256바이트 블록 단위)입니다.

*reserved2*\
Type: UINT32

예약되어 있습니다.

*stopWhenDone*\
Type: UINT32

내부용으로 예약되어 있습니다.

*interruptWhenDone*\
Type: UINT32

내부용으로 예약되어 있습니다.

*reserved*\
Type: UINT32\[6]

예약되어 있습니다.

<a id="remarksSection" />

## Remarks

이 구조체는 XMA 디코더 블록의 컨텍스트를 포함합니다.

입력 버퍼의 최대 크기는 8MB입니다. 입력 버퍼 소비 상태를 확인하려면 *offsetRead*, *currentBuffer* 및 *validBuffer* 멤버를 검사하세요.

**읽기**로 표시된 멤버는 Audio Control Processor(ACP) 라이브러리에 의해 기록되며 애플리케이션에서는 읽기만 해야 합니다. **쓰기**로 표시된 멤버는 애플리케이션에서 설정하며 ACP 라이브러리에서는 변경되지 않습니다. **읽기/쓰기**로 표시된 멤버는 애플리케이션에서 설정하지만 ACP 라이브러리에서 변경할 수 있습니다.

자세한 내용은 [SHAPE 개요](/build/console-features/audio/overviews/shape-overview)의 [XMA](/build/console-features/audio/overviews/shape-overview#ID4EYD) 섹션을 참조하세요.

<a id="requirementsSection" />

## Requirements

**Header:** shapexmacontext.h

**Supported platforms:** XBOX One 제품군 콘솔 및 XBOX Series 콘솔

<a id="seealsoSection" />

## Conceptual documentation

* [ACP 개요](/build/console-features/audio/overviews/acp-overview)

## See also

[ShapeXmaContext](/reference/audio/shapexmacontext/shapexmacontext_members)


## Related topics

- [ShapeXmaContext](/ko/reference/audio/shapexmacontext/shapexmacontext_members.md)
- [SetShapeXmaSampleRate(SHAPE_XMA_CONTEXT*, SHAPE_XMA_SAMPLE_RATE)](/ko/reference/audio/shapexmacontext/functions/setshapexmasamplerate.md)
- [SetShapeXmaOutputBuffer(SHAPE_XMA_CONTEXT*, void*)](/ko/reference/audio/shapexmacontext/functions/setshapexmaoutputbuffer.md)
- [SetShapeXmaOverlapAddBuffer(SHAPE_XMA_CONTEXT*, void*)](/ko/reference/audio/shapexmacontext/functions/setshapexmaoverlapaddbuffer.md)
- [SetShapeXmaInputBuffer0(SHAPE_XMA_CONTEXT*, const void*)](/ko/reference/audio/shapexmacontext/functions/setshapexmainputbuffer0.md)
