Export (0) Print
Expand All

IAMVideoAccelerator::GetBuffer method

The GetBuffer method gets a pointer to a compressed or uncompressed surface that was allocated for DirectX Video Acceleration (DXVA) decoding.

Syntax


HRESULT GetBuffer(
  [in]   DWORD dwTypeIndex,
  [in]   DWORD dwBufferIndex,
  [in]   BOOL bReadOnly,
  [out]  LPVOID *ppBuffer,
  [out]  LONG *lpStride
);

Parameters

dwTypeIndex [in]

Specifies the surface type:

  • To get a pointer to a compressed surface, specify one of the DXVA surface types defined in dxva.h.
  • To get a pointer to an uncompressed output surface, set this parameter to 0xFFFFFFFF.

The value 0xFFFFFFFF is valid only between calls to IAMVideoAccelerator::BeginFrame and IAMVideoAccelerator::EndFrame.

dwBufferIndex [in]

The zero-based index of the surface, within the pool of surfaces that were allocated for the specified surface type.

bReadOnly [in]

Specifies whether the decoder will write to the surface memory. For read-only access, specify TRUE. This might allow faster access to reference frames that are currently in use.

ppBuffer [out]

Receives a pointer to the surface memory. To get the size of the buffer in bytes, call the IAMVideoAccelerator::GetInternalCompBufferInfo method. The size is given in the dwBytesToAllocate member of the AMVACompBufferInfo structure that corresponds to dwTypeIndex.

lpStride [out]

Receives the surface stride, in bytes.

Return value

Returns an HRESULT value that depends on the implementation of the interface. HRESULT can include one of the following standard constants, or other values not listed.

Return codeDescription
E_FAIL

Failure.

E_INVALIDARG

Argument is invalid.

E_NOTIMPL

Method is not supported.

E_POINTER

NULL pointer argument.

S_OK

Success.

VFW_E_INVALIDSUBTYPE

The decoder did not use a DXVA decoding type when it connected to the video renderer.

VFW_E_NOT_CONNECTED

The pins on the decoder and video renderer filters are not connected.

 

Remarks

If the filter's pins are not connected, the method returns VFW_E_NOT_CONNECTED.

This method locks and obtains access to a single buffer. Buffers are identified by type and by index within that type. The IAMVideoAccelerator::GetInternalCompBufferInfo method returns the number of surface types in its pdwNumTypesCompBuffers parameter. This number defines the valid range for dwTypeIndex. For each type, the dwNumCompBuffers member of the AMVACompBufferInfo structure gives the number of buffers, which defines the valid range for dwBufferIndex.

To release the buffer, call IAMVideoAccelerator::ReleaseBuffer.

Until all compressed buffers are released, it is possible that the calling thread will hold the Win16 lock or the DirectDraw lock.

Requirements

Minimum supported client

Windows 2000 Professional [desktop apps only]

Minimum supported server

Windows 2000 Server [desktop apps only]

Header

Videoacc.h

Library

Strmiids.lib

See also

Error and Success Codes
How Decoders Use IAMVideoAccelerator
IAMVideoAccelerator Interface

 

 

Community Additions

ADD
Show:
© 2014 Microsoft