HRESULT GetDefaultStride(IMFMediaType *aType, uint32_t* aOutStride) { // Try to get the default stride from the media type. HRESULT hr = aType->GetUINT32(MF_MT_DEFAULT_STRIDE, aOutStride); if (SUCCEEDED(hr)) { return S_OK; } // Stride attribute not set, calculate it. GUID subtype = GUID_NULL; uint32_t width = 0; uint32_t height = 0; hr = aType->GetGUID(MF_MT_SUBTYPE, &subtype); ENSURE(SUCCEEDED(hr), hr); hr = MFGetAttributeSize(aType, MF_MT_FRAME_SIZE, &width, &height); ENSURE(SUCCEEDED(hr), hr); hr = MFGetStrideForBitmapInfoHeader(subtype.Data1, width, (LONG*)(aOutStride)); ENSURE(SUCCEEDED(hr), hr); return hr; }
HRESULT GetDefaultStride(IMFMediaType *pType, LONG *plStride) { LONG lStride = 0; // Try to get the default stride from the media type. HRESULT hr = pType->GetUINT32(MF_MT_DEFAULT_STRIDE, (UINT32*)&lStride); if (FAILED(hr)) { // Attribute not set. Try to calculate the default stride. GUID subtype = GUID_NULL; UINT32 width = 0; UINT32 height = 0; // Get the subtype and the image size. hr = pType->GetGUID(MF_MT_SUBTYPE, &subtype); if (FAILED(hr)) { goto done; } hr = MFGetAttributeSize(pType, MF_MT_FRAME_SIZE, &width, &height); if (FAILED(hr)) { goto done; } hr = MFGetStrideForBitmapInfoHeader(subtype.Data1, width, &lStride); if (FAILED(hr)) { goto done; } // Set the attribute for later reference. (void)pType->SetUINT32(MF_MT_DEFAULT_STRIDE, UINT32(lStride)); } if (SUCCEEDED(hr)) { *plStride = lStride; } done: return hr; }
HRESULT CaptureClass::setVideoType(IMFMediaType *aType) { HRESULT hr = S_OK; GUID subtype = { 0 }; // Find the video subtype. hr = aType->GetGUID(MF_MT_SUBTYPE, &subtype); DO_OR_DIE; // Choose a conversion function. // (This also validates the format type.) hr = setConversionFunction(subtype); DO_OR_DIE; // // Get some video attributes. // subtype = GUID_NULL; UINT32 width = 0; UINT32 height = 0; // Get the subtype and the image size. hr = aType->GetGUID(MF_MT_SUBTYPE, &subtype); DO_OR_DIE; hr = MFGetAttributeSize(aType, MF_MT_FRAME_SIZE, &width, &height); DO_OR_DIE; hr = MFGetStrideForBitmapInfoHeader(subtype.Data1, width, &mDefaultStride); mCaptureBuffer = new unsigned int[width * height]; mCaptureBufferWidth = width; mCaptureBufferHeight = height; DO_OR_DIE; return hr; }