Exemplo n.º 1
0
void
PlanarYCbCrImageD3D10::AllocateTextures()
{
    D3D10_SUBRESOURCE_DATA dataY;
    D3D10_SUBRESOURCE_DATA dataCb;
    D3D10_SUBRESOURCE_DATA dataCr;
    CD3D10_TEXTURE2D_DESC descY(DXGI_FORMAT_R8_UNORM,
                                mData.mYSize.width,
                                mData.mYSize.height, 1, 1);
    CD3D10_TEXTURE2D_DESC descCbCr(DXGI_FORMAT_R8_UNORM,
                                   mData.mCbCrSize.width,
                                   mData.mCbCrSize.height, 1, 1);

    descY.Usage = descCbCr.Usage = D3D10_USAGE_IMMUTABLE;

    dataY.pSysMem = mData.mYChannel;
    dataY.SysMemPitch = mData.mYStride;
    dataCb.pSysMem = mData.mCbChannel;
    dataCb.SysMemPitch = mData.mCbCrStride;
    dataCr.pSysMem = mData.mCrChannel;
    dataCr.SysMemPitch = mData.mCbCrStride;

    mDevice->CreateTexture2D(&descY, &dataY, getter_AddRefs(mYTexture));
    mDevice->CreateTexture2D(&descCbCr, &dataCb, getter_AddRefs(mCbTexture));
    mDevice->CreateTexture2D(&descCbCr, &dataCr, getter_AddRefs(mCrTexture));
    mDevice->CreateShaderResourceView(mYTexture, NULL, getter_AddRefs(mYView));
    mDevice->CreateShaderResourceView(mCbTexture, NULL, getter_AddRefs(mCbView));
    mDevice->CreateShaderResourceView(mCrTexture, NULL, getter_AddRefs(mCrView));
}
Exemplo n.º 2
0
void ImageLayerD3D10::AllocateTexturesYCbCr(PlanarYCbCrImage *aImage)
{
  nsAutoPtr<PlanarYCbCrD3D10BackendData> backendData(
    new PlanarYCbCrD3D10BackendData);

  const PlanarYCbCrImage::Data *data = aImage->GetData();

  D3D10_SUBRESOURCE_DATA dataY;
  D3D10_SUBRESOURCE_DATA dataCb;
  D3D10_SUBRESOURCE_DATA dataCr;
  CD3D10_TEXTURE2D_DESC descY(DXGI_FORMAT_R8_UNORM,
                              data->mYSize.width,
                              data->mYSize.height, 1, 1);
  CD3D10_TEXTURE2D_DESC descCbCr(DXGI_FORMAT_R8_UNORM,
                                 data->mCbCrSize.width,
                                 data->mCbCrSize.height, 1, 1);

  descY.Usage = descCbCr.Usage = D3D10_USAGE_IMMUTABLE;

  dataY.pSysMem = data->mYChannel;
  dataY.SysMemPitch = data->mYStride;
  dataCb.pSysMem = data->mCbChannel;
  dataCb.SysMemPitch = data->mCbCrStride;
  dataCr.pSysMem = data->mCrChannel;
  dataCr.SysMemPitch = data->mCbCrStride;

  HRESULT hr = device()->CreateTexture2D(&descY, &dataY, getter_AddRefs(backendData->mYTexture));
  if (!FAILED(hr)) {
      hr = device()->CreateTexture2D(&descCbCr, &dataCb, getter_AddRefs(backendData->mCbTexture));
  }
  if (!FAILED(hr)) {
      hr = device()->CreateTexture2D(&descCbCr, &dataCr, getter_AddRefs(backendData->mCrTexture));
  }
  if (FAILED(hr)) {
    LayerManagerD3D10::ReportFailure(NS_LITERAL_CSTRING("PlanarYCbCrImageD3D10::AllocateTextures(): Failed to create texture"),
                                     hr);
    return;
  }
  device()->CreateShaderResourceView(backendData->mYTexture, NULL, getter_AddRefs(backendData->mYView));
  device()->CreateShaderResourceView(backendData->mCbTexture, NULL, getter_AddRefs(backendData->mCbView));
  device()->CreateShaderResourceView(backendData->mCrTexture, NULL, getter_AddRefs(backendData->mCrView));

  aImage->SetBackendData(mozilla::layers::LAYERS_D3D10, backendData.forget());
}