Make JpegModule::JpegImageInfo::width and height be unsigned.
These come from JDIMENSION (unsigned int) values in the jpeg library.
-- Remove redundant 'Jpeg' from struct name.
-- Pass struct rather than 5 output parameters to helper.
Change-Id: If02f175ee33cfa805689c2a69f2eeba3026a2fdb
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/82050
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index 30d63a2..70bde5f 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -561,11 +561,11 @@
if (m_pDecoder)
return true;
- Optional<JpegModule::JpegImageInfo> info_opt = JpegModule::LoadInfo(src_span);
+ Optional<JpegModule::ImageInfo> info_opt = JpegModule::LoadInfo(src_span);
if (!info_opt.has_value())
return false;
- const JpegModule::JpegImageInfo& info = info_opt.value();
+ const JpegModule::ImageInfo& info = info_opt.value();
m_Width = info.width;
m_Height = info.height;
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index a7a9360..5f32a8b 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -82,11 +82,11 @@
RetainPtr<CPDF_Dictionary> CPDF_Image::InitJPEG(
pdfium::span<uint8_t> src_span) {
- Optional<JpegModule::JpegImageInfo> info_opt = JpegModule::LoadInfo(src_span);
+ Optional<JpegModule::ImageInfo> info_opt = JpegModule::LoadInfo(src_span);
if (!info_opt.has_value())
return nullptr;
- const JpegModule::JpegImageInfo& info = info_opt.value();
+ const JpegModule::ImageInfo& info = info_opt.value();
if (!IsValidJpegComponent(info.num_components) ||
!IsValidJpegBitsPerComponent(info.bits_per_components)) {
return nullptr;
diff --git a/core/fxcodec/jpeg/jpegmodule.cpp b/core/fxcodec/jpeg/jpegmodule.cpp
index bd99533..cea0679 100644
--- a/core/fxcodec/jpeg/jpegmodule.cpp
+++ b/core/fxcodec/jpeg/jpegmodule.cpp
@@ -60,11 +60,7 @@
} // extern "C"
static bool JpegLoadInfo(pdfium::span<const uint8_t> src_span,
- int* width,
- int* height,
- int* num_components,
- int* bits_per_components,
- bool* color_transform) {
+ JpegModule::ImageInfo* pInfo) {
src_span = JpegScanSOI(src_span);
jpeg_decompress_struct cinfo;
jpeg_error_mgr jerr;
@@ -99,12 +95,12 @@
jpeg_destroy_decompress(&cinfo);
return false;
}
- *width = cinfo.image_width;
- *height = cinfo.image_height;
- *num_components = cinfo.num_components;
- *color_transform =
+ pInfo->width = cinfo.image_width;
+ pInfo->height = cinfo.image_height;
+ pInfo->num_components = cinfo.num_components;
+ pInfo->color_transform =
cinfo.jpeg_color_space == JCS_YCbCr || cinfo.jpeg_color_space == JCS_YCCK;
- *bits_per_components = cinfo.data_precision;
+ pInfo->bits_per_components = cinfo.data_precision;
jpeg_destroy_decompress(&cinfo);
return true;
}
@@ -121,8 +117,8 @@
~JpegDecoder() override;
bool Create(pdfium::span<const uint8_t> src_span,
- int width,
- int height,
+ uint32_t width,
+ uint32_t height,
int nComps,
bool ColorTransform);
@@ -232,8 +228,8 @@
}
bool JpegDecoder::Create(pdfium::span<const uint8_t> src_span,
- int width,
- int height,
+ uint32_t width,
+ uint32_t height,
int nComps,
bool ColorTransform) {
m_SrcSpan = JpegScanSOI(src_span);
@@ -261,7 +257,7 @@
if (m_Cinfo.num_components < nComps)
return false;
- if (static_cast<int>(m_Cinfo.image_width) < width)
+ if (m_Cinfo.image_width < width)
return false;
CalcPitch();
@@ -380,8 +376,8 @@
// static
std::unique_ptr<ScanlineDecoder> JpegModule::CreateDecoder(
pdfium::span<const uint8_t> src_span,
- int width,
- int height,
+ uint32_t width,
+ uint32_t height,
int nComps,
bool ColorTransform) {
DCHECK(!src_span.empty());
@@ -394,13 +390,12 @@
}
// static
-Optional<JpegModule::JpegImageInfo> JpegModule::LoadInfo(
+Optional<JpegModule::ImageInfo> JpegModule::LoadInfo(
pdfium::span<const uint8_t> src_span) {
- JpegImageInfo info;
- if (!JpegLoadInfo(src_span, &info.width, &info.height, &info.num_components,
- &info.bits_per_components, &info.color_transform)) {
+ ImageInfo info;
+ if (!JpegLoadInfo(src_span, &info))
return pdfium::nullopt;
- }
+
return info;
}
diff --git a/core/fxcodec/jpeg/jpegmodule.h b/core/fxcodec/jpeg/jpegmodule.h
index 98adbef..6ee7675 100644
--- a/core/fxcodec/jpeg/jpegmodule.h
+++ b/core/fxcodec/jpeg/jpegmodule.h
@@ -7,6 +7,8 @@
#ifndef CORE_FXCODEC_JPEG_JPEGMODULE_H_
#define CORE_FXCODEC_JPEG_JPEGMODULE_H_
+#include <stdint.h>
+
#include <memory>
#include "build/build_config.h"
@@ -25,9 +27,9 @@
class JpegModule {
public:
- struct JpegImageInfo {
- int width;
- int height;
+ struct ImageInfo {
+ uint32_t width;
+ uint32_t height;
int num_components;
int bits_per_components;
bool color_transform;
@@ -35,12 +37,12 @@
static std::unique_ptr<ScanlineDecoder> CreateDecoder(
pdfium::span<const uint8_t> src_span,
- int width,
- int height,
+ uint32_t width,
+ uint32_t height,
int nComps,
bool ColorTransform);
- static Optional<JpegImageInfo> LoadInfo(pdfium::span<const uint8_t> src_span);
+ static Optional<ImageInfo> LoadInfo(pdfium::span<const uint8_t> src_span);
#if defined(OS_WIN)
static bool JpegEncode(const RetainPtr<CFX_DIBBase>& pSource,