Modernize codec usage in pdf/
Codec calls have new API that uses std::optional and spans. Switch usage to those new APIs, and lightly modernize the calling code. Bug: 370696612 Change-Id: Ic1c4effb2f426595f84fda1d0cad300989e33ecb Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5932471 Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com> Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Avi Drissman <avi@chromium.org> Auto-Submit: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1369531}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
acdfbc7f98
commit
32d2e0ab08
@ -440,21 +440,20 @@ ScopedFPDFDocument PDFiumPrint::CreateSinglePageRasterPdf(
|
|||||||
kBGRA_8888_SkColorType, kOpaque_SkAlphaType);
|
kBGRA_8888_SkColorType, kOpaque_SkAlphaType);
|
||||||
SkPixmap src(info, FPDFBitmap_GetBuffer(bitmap.get()),
|
SkPixmap src(info, FPDFBitmap_GetBuffer(bitmap.get()),
|
||||||
FPDFBitmap_GetStride(bitmap.get()));
|
FPDFBitmap_GetStride(bitmap.get()));
|
||||||
std::vector<uint8_t> compressed_bitmap_data;
|
std::optional<std::vector<uint8_t>> compressed_bitmap_data =
|
||||||
bool encoded = gfx::JPEGCodec::Encode(src, kQuality, &compressed_bitmap_data);
|
gfx::JPEGCodec::Encode(src, kQuality);
|
||||||
|
|
||||||
ScopedFPDFPage temp_page_holder(
|
ScopedFPDFPage temp_page_holder(
|
||||||
FPDFPage_New(temp_doc.get(), 0, source_page_width, source_page_height));
|
FPDFPage_New(temp_doc.get(), 0, source_page_width, source_page_height));
|
||||||
FPDF_PAGE temp_page = temp_page_holder.get();
|
FPDF_PAGE temp_page = temp_page_holder.get();
|
||||||
if (encoded) {
|
if (compressed_bitmap_data) {
|
||||||
base::span<const uint8_t> compressed_bitmap_span =
|
base::span<const uint8_t> compressed_bitmap_span(
|
||||||
base::make_span(compressed_bitmap_data);
|
compressed_bitmap_data.value());
|
||||||
FPDF_FILEACCESS file_access = {};
|
FPDF_FILEACCESS file_access = {};
|
||||||
file_access.m_FileLen =
|
file_access.m_FileLen =
|
||||||
static_cast<unsigned long>(compressed_bitmap_data.size());
|
static_cast<unsigned long>(compressed_bitmap_span.size());
|
||||||
file_access.m_GetBlock = [](void* param, unsigned long pos,
|
file_access.m_GetBlock = [](void* param, unsigned long pos,
|
||||||
unsigned char* buf, unsigned long size) {
|
unsigned char* buf, unsigned long size) {
|
||||||
const auto& compressed_bitmap_span =
|
base::span<const uint8_t>& compressed_bitmap_span =
|
||||||
*static_cast<base::span<const uint8_t>*>(param);
|
*static_cast<base::span<const uint8_t>*>(param);
|
||||||
if (pos + size < pos || pos + size > compressed_bitmap_span.size()) {
|
if (pos + size < pos || pos + size > compressed_bitmap_span.size()) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -464,7 +463,7 @@ ScopedFPDFDocument PDFiumPrint::CreateSinglePageRasterPdf(
|
|||||||
buf_span.copy_from(compressed_bitmap_span.subspan(pos, size));
|
buf_span.copy_from(compressed_bitmap_span.subspan(pos, size));
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
file_access.m_Param = &compressed_bitmap_data;
|
file_access.m_Param = &compressed_bitmap_span;
|
||||||
|
|
||||||
FPDFImageObj_LoadJpegFileInline(&temp_page, 1, temp_img.get(),
|
FPDFImageObj_LoadJpegFileInline(&temp_page, 1, temp_img.get(),
|
||||||
&file_access);
|
&file_access);
|
||||||
|
@ -45,18 +45,20 @@ void PdfiumProgressiveSearchifier::AddPage(
|
|||||||
CHECK(page);
|
CHECK(page);
|
||||||
ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc_.get()));
|
ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc_.get()));
|
||||||
CHECK(image);
|
CHECK(image);
|
||||||
std::vector<uint8_t> encoded;
|
std::optional<std::vector<uint8_t>> encoded =
|
||||||
CHECK(gfx::JPEGCodec::Encode(bitmap, 100, &encoded));
|
gfx::JPEGCodec::Encode(bitmap, /*quality=*/100);
|
||||||
base::span<const uint8_t> encoded_span = base::make_span(encoded);
|
CHECK(encoded.has_value());
|
||||||
|
base::span<const uint8_t> encoded_span(encoded.value());
|
||||||
FPDF_FILEACCESS file_access = {};
|
FPDF_FILEACCESS file_access = {};
|
||||||
file_access.m_FileLen = static_cast<unsigned long>(encoded_span.size());
|
file_access.m_FileLen = static_cast<unsigned long>(encoded_span.size());
|
||||||
file_access.m_GetBlock = [](void* param, unsigned long pos,
|
file_access.m_GetBlock = [](void* param, unsigned long pos,
|
||||||
unsigned char* buf, unsigned long size) {
|
unsigned char* buf, unsigned long size) {
|
||||||
const auto& encoded_span = *static_cast<base::span<const uint8_t>*>(param);
|
base::span<const uint8_t>& encoded_span =
|
||||||
|
*static_cast<base::span<const uint8_t>*>(param);
|
||||||
if (pos + size < pos || pos + size > encoded_span.size()) {
|
if (pos + size < pos || pos + size > encoded_span.size()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// TODO(tsepez): spanify arguments to remove the error.
|
// TODO(thestig): spanify arguments to remove the error.
|
||||||
base::span<uint8_t> UNSAFE_TODO(buf_span(buf, size));
|
base::span<uint8_t> UNSAFE_TODO(buf_span(buf, size));
|
||||||
buf_span.copy_from(encoded_span.subspan(pos, size));
|
buf_span.copy_from(encoded_span.subspan(pos, size));
|
||||||
return 1;
|
return 1;
|
||||||
|
Reference in New Issue
Block a user