> ## 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_DMA_CONTEXT

> SHAPE_DMA_CONTEXT

# SHAPE\_DMA\_CONTEXT

The Direct Memory Access (DMA) context structure.

## Syntax

```cpp theme={null}
typedef struct SHAPE_DMA_CONTEXT {  
    UINT32 timestamp : 21;
    UINT32 reserved0 : 3;
    UINT32 mixBufPeakMag : 4;
    UINT32 peakMag : 4;
    UINT32 readPointer : 5;
    UINT32 reserved1 : 3;
    UINT32 writePointer : 5;
    UINT32 reserved2 : 3;
    UINT32 full : 1;
    UINT32 reserved3 : 15;
    UINT32 reserved4 : 9;
    UINT32 address : 23;
    UINT32 numFrames : 5;
    UINT32 reserved5 : 3;
    UINT32 floatConvert : 1;
    UINT32 reserved6 : 7;
    UINT32 numChannels : 3;
    UINT32 reserved7 : 5;
    UINT32 channel : 3;
    UINT32 reserved8 : 5;
} SHAPE_DMA_CONTEXT  
```

### Members

*timestamp*\
Type: UINT32

Read: Timestamp of the completion of context processing.

*reserved0*\
Type: UINT32

Reserved.

*mixBufPeakMag*\
Type: UINT32

Read: Peak magnitude of the output mix buffer.

*peakMag*\
Type: UINT32

Read: Peak magnitude of the output.

*readPointer*\
Type: UINT32

Read/Write: Read pointer from the start of the buffer, in units of frames per channel or frame-interleave groups.

*reserved1*\
Type: UINT32

Reserved.

*writePointer*\
Type: UINT32

Read/Write: Write pointer from the start of the buffer, in units of frames per channel or frame-interleave groups.

*reserved2*\
Type: UINT32

Reserved.

*full*\
Type: UINT32

Read/Write: When the read pointer and the write pointer are equal, *full* indicates whether the buffer is empty or full (0 == empty, 1 == full).

*reserved3*\
Type: UINT32

Reserved.

*reserved4*\
Type: UINT32

Reserved.

*address*\
Type: UINT32

Write: Buffer address, aligned to 128 samples.

*numFrames*\
Type: UINT32

Write: *numFrames* + 1 equals the number of frames per channel, or the number of frame-interleave groups in the system-memory DMA buffer. A value of zero indicates one frame. From this information, the DMA block can derive the size of the DMA circular buffer. This field is set when the context and buffer are defined.

*reserved5*\
Type: UINT32

Reserved.

*floatConvert*\
Type: UINT32

Write: 1 if the data is to be converted into or from a float. 0 if the data is a 32-bit integer.

*reserved6*\
Type: UINT32

Reserved.

*numChannels*\
Type: UINT32

Write: *numChannels* + 1 is the number of channels of audio in the buffer. A value of zero indicates one channel.

*reserved7*\
Type: UINT32

Reserved.

*channel*\
Type: UINT32

Write: The channel to read/write.

*reserved8*\
Type: UINT32

Reserved.

## Remarks

Members that are marked as **Read** are written by the ACP library and should only be read by your application. Members that are marked **Write** are set by your application and are not changed by the ACP library. Members that are marked **Read/Write** are set by your application but can be changed by the ACP library.

For information on flowgraphs, see the [Flowgraph parsing in Overview of ACP](/build/console-features/audio/overviews/acp-overview#ID4EHF).

## Requirements

**Header:** shapedmacontext.h

**Supported platforms:** XBOX One family consoles and XBOX Series consoles

## Conceptual documentation

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

## See also

[ShapeDmaContext](/reference/audio/shapedmacontext/shapedmacontext_members)


## Related topics

- [ShapeDmaContext](/reference/audio/shapedmacontext/shapedmacontext_members.md)
- [GetShapeDmaTimestamp](/reference/audio/shapedmacontext/functions/getshapedmatimestamp.md)
- [GetShapeDmaChannel](/reference/audio/shapedmacontext/functions/getshapedmachannel.md)
- [SetShapeDmaChannel](/reference/audio/shapedmacontext/functions/setshapedmachannel.md)
- [GetShapeDmaAudioBuffer](/reference/audio/shapedmacontext/functions/getshapedmaaudiobuffer.md)
