/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
class ImageOps::ImageBufferImpl final : public ImageOps::ImageBuffer { public: explicit ImageBufferImpl(already_AddRefed<SourceBuffer> aSourceBuffer)
: mSourceBuffer(aSourceBuffer) {}
// Prepare the input stream. if (!NS_InputStreamIsBuffered(inputStream)) {
nsCOMPtr<nsIInputStream> bufStream;
rv = NS_NewBufferedInputStream(getter_AddRefs(bufStream),
inputStream.forget(), 1024); if (NS_WARN_IF(NS_FAILED(rv))) { return nullptr;
}
inputStream = std::move(bufStream);
}
// Figure out how much data we've been passed.
uint64_t length;
rv = inputStream->Available(&length); if (NS_FAILED(rv) || length > UINT32_MAX) { return nullptr;
}
// Write the data into a SourceBuffer.
RefPtr<SourceBuffer> sourceBuffer = new SourceBuffer();
sourceBuffer->ExpectLength(length);
rv = sourceBuffer->AppendFromInputStream(inputStream, length); if (NS_FAILED(rv)) { return nullptr;
} // Make sure our sourceBuffer is marked as complete. if (sourceBuffer->IsComplete()) {
NS_WARNING( "The SourceBuffer was unexpectedly marked as complete. This may " "indicate either an OOM condition, or that imagelib was not " "initialized properly."); return nullptr;
}
sourceBuffer->Complete(NS_OK);
RefPtr<ImageBuffer> imageBuffer = new ImageBufferImpl(sourceBuffer.forget()); return imageBuffer.forget();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.