예제 #1
0
void
YCbCrImageDataSerializer::InitializeBufferInfo(uint32_t aYOffset,
        uint32_t aCbOffset,
        uint32_t aCrOffset,
        uint32_t aYStride,
        uint32_t aCbCrStride,
        const gfx::IntSize& aYSize,
        const gfx::IntSize& aCbCrSize,
        StereoMode aStereoMode)
{
    YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData, mDataSize);
    MOZ_ASSERT(info); // OK to assert here, this method is client-side-only
    uint32_t info_size = MOZ_ALIGN_WORD(sizeof(YCbCrBufferInfo));
    info->mYOffset = info_size + aYOffset;
    info->mCbOffset = info_size + aCbOffset;
    info->mCrOffset = info_size + aCrOffset;
    info->mYStride = aYStride;
    info->mYWidth = aYSize.width;
    info->mYHeight = aYSize.height;
    info->mCbCrStride = aCbCrStride;
    info->mCbCrWidth = aCbCrSize.width;
    info->mCbCrHeight = aCbCrSize.height;
    info->mStereoMode = aStereoMode;
    Validate();
}
void
YCbCrImageDataSerializer::InitializeBufferInfo(const gfx::IntSize& aYSize,
                                               const gfx::IntSize& aCbCrSize)
{
  YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData);
  info->mYOffset = MOZ_ALIGN_WORD(sizeof(YCbCrBufferInfo));
  info->mCbOffset = info->mYOffset
                  + MOZ_ALIGN_WORD(aYSize.width * aYSize.height);
  info->mCrOffset = info->mCbOffset
                  + MOZ_ALIGN_WORD(aCbCrSize.width * aCbCrSize.height);

  info->mYWidth = aYSize.width;
  info->mYHeight = aYSize.height;
  info->mCbCrWidth = aCbCrSize.width;
  info->mCbCrHeight = aCbCrSize.height;
}
예제 #3
0
void YCbCrImageDataDeserializerBase::Validate()
{
    mIsValid = false;
    if (!mData) {
        return;
    }
    YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData, mDataSize);
    if (!info) {
        return;
    }
    size_t requiredSize = ComputeMinBufferSize(
                              IntSize(info->mYWidth, info->mYHeight),
                              info->mYStride,
                              IntSize(info->mCbCrWidth, info->mCbCrHeight),
                              info->mCbCrStride);
    mIsValid = requiredSize && requiredSize <= mDataSize;

}
gfxIntSize YCbCrImageDataDeserializerBase::GetCbCrSize()
{
  YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData);
  return gfxIntSize(info->mCbCrWidth, info->mCbCrHeight);
}
uint32_t YCbCrImageDataDeserializerBase::GetCbCrStride()
{
  YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData);
  return info->mCbCrWidth;
}
uint8_t* YCbCrImageDataDeserializerBase::GetData()
{
  YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData);
  return (reinterpret_cast<uint8_t*>(info)) + MOZ_ALIGN_WORD(sizeof(YCbCrBufferInfo));
}
uint8_t* YCbCrImageDataDeserializerBase::GetCrData()
{
  YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData);
  return reinterpret_cast<uint8_t*>(info) + info->mCrOffset;
}
예제 #8
0
StereoMode YCbCrImageDataDeserializerBase::GetStereoMode()
{
    YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData, mDataSize);
    return info->mStereoMode;
}
예제 #9
0
gfx::IntSize YCbCrImageDataDeserializerBase::GetYSize()
{
    YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData, mDataSize);
    return gfx::IntSize(info->mYWidth, info->mYHeight);
}
예제 #10
0
uint32_t YCbCrImageDataDeserializerBase::GetYStride()
{
    YCbCrBufferInfo* info = GetYCbCrBufferInfo(mData, mDataSize);
    return info->mYStride;
}