LexerTransition<nsIconDecoder::State>
nsIconDecoder::ReadRowOfPixels(const char* aData, size_t aLength)
{
  MOZ_ASSERT(aLength % 4 == 0, "Rows should contain a multiple of four bytes");

  auto result = mPipe.WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> {
    if (aLength == 0) {
      return AsVariant(WriteState::NEED_MORE_DATA);  // Done with this row.
    }

    uint32_t pixel;
    memcpy(&pixel, aData, 4);
    aData += 4;
    aLength -= 4;

    return AsVariant(pixel);
  });

  MOZ_ASSERT(result != WriteState::FAILURE);

  Maybe<SurfaceInvalidRect> invalidRect = mPipe.TakeInvalidRect();
  if (invalidRect) {
    PostInvalidation(invalidRect->mInputSpaceRect,
                     Some(invalidRect->mOutputSpaceRect));
  }

  return result == WriteState::FINISHED
       ? Transition::To(State::FINISH, 0)
       : Transition::To(State::ROW_OF_PIXELS, mBytesPerRow);
}
Example #2
0
/*static*/ MP4Metadata::ResultAndByteBuffer MP4Metadata::Metadata(
    ByteStream* aSource) {
  auto parser = mozilla::MakeUnique<MoofParser>(
      aSource, AsVariant(ParseAllTracks{}), false);
  RefPtr<mozilla::MediaByteBuffer> buffer = parser->Metadata();
  if (!buffer) {
    return {MediaResult(NS_ERROR_DOM_MEDIA_METADATA_ERR,
                        RESULT_DETAIL("Cannot parse metadata")),
            nullptr};
  }
  return {NS_OK, std::move(buffer)};
}
DocInfo::DocInfo(nsPIDOMWindowOuter* aWindow)
  : mURL(aWindow->GetDocumentURI())
  , mObj(AsVariant(aWindow))
{}
DocInfo::DocInfo(const URLInfo& aURL, nsILoadInfo* aLoadInfo)
  : mURL(aURL)
  , mObj(AsVariant(aLoadInfo))
{}
Example #5
0
ClientState::ClientState(const IPCClientWorkerState& aData)
{
  mData.emplace(AsVariant(ClientWorkerState(aData)));
}
Example #6
0
ClientState::ClientState(const ClientWorkerState& aWorkerState)
{
  mData.emplace(AsVariant(aWorkerState));
}
Example #7
0
ClientState::ClientState(const ClientWindowState& aWindowState)
{
  mData.emplace(AsVariant(aWindowState));
}