Commit 12f9b5f3 authored by Frank Barchard's avatar Frank Barchard

Add commment for jpeg parameters.

Bug: None
Test: Try bots
Change-Id: I7b90731e828169af96b3e0b8f8821635cff57755
Reviewed-on: https://chromium-review.googlesource.com/c/1308819Reviewed-by: 's avatarFrank Barchard <fbarchard@chromium.org>
parent 76630fb2
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 1722 Version: 1724
License: BSD License: BSD
License File: LICENSE License File: LICENSE
......
...@@ -375,11 +375,13 @@ int ARGB4444ToI420(const uint8_t* src_argb4444, ...@@ -375,11 +375,13 @@ int ARGB4444ToI420(const uint8_t* src_argb4444,
int height); int height);
#ifdef HAVE_JPEG #ifdef HAVE_JPEG
// src_mjpg is pointer to raw jpeg bytes in memory
// src_size_mjpg is size of jpeg in bytes
// src_width/height provided by capture. // src_width/height provided by capture.
// dst_width/height for clipping determine final size. // dst_width/height for clipping determine final size.
LIBYUV_API LIBYUV_API
int MJPGToI420(const uint8_t* sample, int MJPGToI420(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
uint8_t* dst_y, uint8_t* dst_y,
int dst_stride_y, int dst_stride_y,
uint8_t* dst_u, uint8_t* dst_u,
...@@ -393,8 +395,8 @@ int MJPGToI420(const uint8_t* sample, ...@@ -393,8 +395,8 @@ int MJPGToI420(const uint8_t* sample,
// JPEG to NV21 // JPEG to NV21
LIBYUV_API LIBYUV_API
int MJPGToNV21(const uint8_t* sample, int MJPGToNV21(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
uint8_t* dst_y, uint8_t* dst_y,
int dst_stride_y, int dst_stride_y,
uint8_t* dst_vu, uint8_t* dst_vu,
...@@ -406,8 +408,8 @@ int MJPGToNV21(const uint8_t* sample, ...@@ -406,8 +408,8 @@ int MJPGToNV21(const uint8_t* sample,
// Query size of MJPG in pixels. // Query size of MJPG in pixels.
LIBYUV_API LIBYUV_API
int MJPGSize(const uint8_t* sample, int MJPGSize(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
int* width, int* width,
int* height); int* height);
#endif #endif
......
...@@ -627,8 +627,8 @@ int AR30ToAB30(const uint8_t* src_ar30, ...@@ -627,8 +627,8 @@ int AR30ToAB30(const uint8_t* src_ar30,
// src_width/height provided by capture // src_width/height provided by capture
// dst_width/height for clipping determine final size. // dst_width/height for clipping determine final size.
LIBYUV_API LIBYUV_API
int MJPGToARGB(const uint8_t* sample, int MJPGToARGB(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
uint8_t* dst_argb, uint8_t* dst_argb,
int dst_stride_argb, int dst_stride_argb,
int src_width, int src_width,
......
...@@ -26,7 +26,7 @@ namespace libyuv { ...@@ -26,7 +26,7 @@ namespace libyuv {
extern "C" { extern "C" {
#endif #endif
LIBYUV_BOOL ValidateJpeg(const uint8_t* sample, size_t sample_size); LIBYUV_BOOL ValidateJpeg(const uint8_t* src_mjpg, size_t src_size_mjpg_size);
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
......
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_ #ifndef INCLUDE_LIBYUV_VERSION_H_
#define INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 1723 #define LIBYUV_VERSION 1724
#endif // INCLUDE_LIBYUV_VERSION_H_ #endif // INCLUDE_LIBYUV_VERSION_H_
...@@ -89,12 +89,12 @@ static void JpegI400ToI420(void* opaque, ...@@ -89,12 +89,12 @@ static void JpegI400ToI420(void* opaque,
// Query size of MJPG in pixels. // Query size of MJPG in pixels.
LIBYUV_API LIBYUV_API
int MJPGSize(const uint8_t* sample, int MJPGSize(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
int* width, int* width,
int* height) { int* height) {
MJpegDecoder mjpeg_decoder; MJpegDecoder mjpeg_decoder;
LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(sample, sample_size); LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(src_mjpg, src_size_mjpg);
if (ret) { if (ret) {
*width = mjpeg_decoder.GetWidth(); *width = mjpeg_decoder.GetWidth();
*height = mjpeg_decoder.GetHeight(); *height = mjpeg_decoder.GetHeight();
...@@ -107,8 +107,8 @@ int MJPGSize(const uint8_t* sample, ...@@ -107,8 +107,8 @@ int MJPGSize(const uint8_t* sample,
// TODO(fbarchard): review src_width and src_height requirement. dst_width and // TODO(fbarchard): review src_width and src_height requirement. dst_width and
// dst_height may be enough. // dst_height may be enough.
LIBYUV_API LIBYUV_API
int MJPGToI420(const uint8_t* sample, int MJPGToI420(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
uint8_t* dst_y, uint8_t* dst_y,
int dst_stride_y, int dst_stride_y,
uint8_t* dst_u, uint8_t* dst_u,
...@@ -119,14 +119,14 @@ int MJPGToI420(const uint8_t* sample, ...@@ -119,14 +119,14 @@ int MJPGToI420(const uint8_t* sample,
int src_height, int src_height,
int dst_width, int dst_width,
int dst_height) { int dst_height) {
if (sample_size == kUnknownDataSize) { if (src_size_mjpg == kUnknownDataSize) {
// ERROR: MJPEG frame size unknown // ERROR: MJPEG frame size unknown
return -1; return -1;
} }
// TODO(fbarchard): Port MJpeg to C. // TODO(fbarchard): Port MJpeg to C.
MJpegDecoder mjpeg_decoder; MJpegDecoder mjpeg_decoder;
LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(sample, sample_size); LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(src_mjpg, src_size_mjpg);
if (ret && (mjpeg_decoder.GetWidth() != src_width || if (ret && (mjpeg_decoder.GetWidth() != src_width ||
mjpeg_decoder.GetHeight() != src_height)) { mjpeg_decoder.GetHeight() != src_height)) {
// ERROR: MJPEG frame has unexpected dimensions // ERROR: MJPEG frame has unexpected dimensions
...@@ -180,9 +180,9 @@ int MJPGToI420(const uint8_t* sample, ...@@ -180,9 +180,9 @@ int MJPGToI420(const uint8_t* sample,
ret = mjpeg_decoder.DecodeToCallback(&JpegI400ToI420, &bufs, dst_width, ret = mjpeg_decoder.DecodeToCallback(&JpegI400ToI420, &bufs, dst_width,
dst_height); dst_height);
} else { } else {
// TODO(fbarchard): Implement conversion for any other colorspace/sample // TODO(fbarchard): Implement conversion for any other
// factors that occur in practice. // colorspace/subsample factors that occur in practice. ERROR: Unable to
// ERROR: Unable to convert MJPEG frame because format is not supported // convert MJPEG frame because format is not supported
mjpeg_decoder.UnloadFrame(); mjpeg_decoder.UnloadFrame();
return 1; return 1;
} }
...@@ -249,8 +249,8 @@ static void JpegI400ToNV21(void* opaque, ...@@ -249,8 +249,8 @@ static void JpegI400ToNV21(void* opaque,
// MJPG (Motion JPeg) to NV21 // MJPG (Motion JPeg) to NV21
LIBYUV_API LIBYUV_API
int MJPGToNV21(const uint8_t* sample, int MJPGToNV21(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
uint8_t* dst_y, uint8_t* dst_y,
int dst_stride_y, int dst_stride_y,
uint8_t* dst_vu, uint8_t* dst_vu,
...@@ -259,14 +259,14 @@ int MJPGToNV21(const uint8_t* sample, ...@@ -259,14 +259,14 @@ int MJPGToNV21(const uint8_t* sample,
int src_height, int src_height,
int dst_width, int dst_width,
int dst_height) { int dst_height) {
if (sample_size == kUnknownDataSize) { if (src_size_mjpg == kUnknownDataSize) {
// ERROR: MJPEG frame size unknown // ERROR: MJPEG frame size unknown
return -1; return -1;
} }
// TODO(fbarchard): Port MJpeg to C. // TODO(fbarchard): Port MJpeg to C.
MJpegDecoder mjpeg_decoder; MJpegDecoder mjpeg_decoder;
LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(sample, sample_size); LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(src_mjpg, src_size_mjpg);
if (ret && (mjpeg_decoder.GetWidth() != src_width || if (ret && (mjpeg_decoder.GetWidth() != src_width ||
mjpeg_decoder.GetHeight() != src_height)) { mjpeg_decoder.GetHeight() != src_height)) {
// ERROR: MJPEG frame has unexpected dimensions // ERROR: MJPEG frame has unexpected dimensions
...@@ -382,22 +382,22 @@ static void JpegI400ToARGB(void* opaque, ...@@ -382,22 +382,22 @@ static void JpegI400ToARGB(void* opaque,
// TODO(fbarchard): review src_width and src_height requirement. dst_width and // TODO(fbarchard): review src_width and src_height requirement. dst_width and
// dst_height may be enough. // dst_height may be enough.
LIBYUV_API LIBYUV_API
int MJPGToARGB(const uint8_t* sample, int MJPGToARGB(const uint8_t* src_mjpg,
size_t sample_size, size_t src_size_mjpg,
uint8_t* dst_argb, uint8_t* dst_argb,
int dst_stride_argb, int dst_stride_argb,
int src_width, int src_width,
int src_height, int src_height,
int dst_width, int dst_width,
int dst_height) { int dst_height) {
if (sample_size == kUnknownDataSize) { if (src_size_mjpg == kUnknownDataSize) {
// ERROR: MJPEG frame size unknown // ERROR: MJPEG frame size unknown
return -1; return -1;
} }
// TODO(fbarchard): Port MJpeg to C. // TODO(fbarchard): Port MJpeg to C.
MJpegDecoder mjpeg_decoder; MJpegDecoder mjpeg_decoder;
LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(sample, sample_size); LIBYUV_BOOL ret = mjpeg_decoder.LoadFrame(src_mjpg, src_size_mjpg);
if (ret && (mjpeg_decoder.GetWidth() != src_width || if (ret && (mjpeg_decoder.GetWidth() != src_width ||
mjpeg_decoder.GetHeight() != src_height)) { mjpeg_decoder.GetHeight() != src_height)) {
// ERROR: MJPEG frame has unexpected dimensions // ERROR: MJPEG frame has unexpected dimensions
...@@ -450,9 +450,9 @@ int MJPGToARGB(const uint8_t* sample, ...@@ -450,9 +450,9 @@ int MJPGToARGB(const uint8_t* sample,
ret = mjpeg_decoder.DecodeToCallback(&JpegI400ToARGB, &bufs, dst_width, ret = mjpeg_decoder.DecodeToCallback(&JpegI400ToARGB, &bufs, dst_width,
dst_height); dst_height);
} else { } else {
// TODO(fbarchard): Implement conversion for any other colorspace/sample // TODO(fbarchard): Implement conversion for any other
// factors that occur in practice. // colorspace/subsample factors that occur in practice. ERROR: Unable to
// ERROR: Unable to convert MJPEG frame because format is not supported // convert MJPEG frame because format is not supported
mjpeg_decoder.UnloadFrame(); mjpeg_decoder.UnloadFrame();
return 1; return 1;
} }
......
...@@ -18,10 +18,10 @@ extern "C" { ...@@ -18,10 +18,10 @@ extern "C" {
#endif #endif
// Helper function to scan for EOI marker (0xff 0xd9). // Helper function to scan for EOI marker (0xff 0xd9).
static LIBYUV_BOOL ScanEOI(const uint8_t* sample, size_t sample_size) { static LIBYUV_BOOL ScanEOI(const uint8_t* src_mjpg, size_t src_size_mjpg) {
if (sample_size >= 2) { if (src_size_mjpg >= 2) {
const uint8_t* end = sample + sample_size - 1; const uint8_t* end = src_mjpg + src_size_mjpg - 1;
const uint8_t* it = sample; const uint8_t* it = src_mjpg;
while (it < end) { while (it < end) {
// TODO(fbarchard): scan for 0xd9 instead. // TODO(fbarchard): scan for 0xd9 instead.
it = (const uint8_t*)(memchr(it, 0xff, end - it)); it = (const uint8_t*)(memchr(it, 0xff, end - it));
...@@ -34,34 +34,34 @@ static LIBYUV_BOOL ScanEOI(const uint8_t* sample, size_t sample_size) { ...@@ -34,34 +34,34 @@ static LIBYUV_BOOL ScanEOI(const uint8_t* sample, size_t sample_size) {
++it; // Skip over current 0xff. ++it; // Skip over current 0xff.
} }
} }
// ERROR: Invalid jpeg end code not found. Size sample_size // ERROR: Invalid jpeg end code not found. Size src_size_mjpg
return LIBYUV_FALSE; return LIBYUV_FALSE;
} }
// Helper function to validate the jpeg appears intact. // Helper function to validate the jpeg appears intact.
LIBYUV_BOOL ValidateJpeg(const uint8_t* sample, size_t sample_size) { LIBYUV_BOOL ValidateJpeg(const uint8_t* src_mjpg, size_t src_size_mjpg) {
// Maximum size that ValidateJpeg will consider valid. // Maximum size that ValidateJpeg will consider valid.
const size_t kMaxJpegSize = 0x7fffffffull; const size_t kMaxJpegSize = 0x7fffffffull;
const size_t kBackSearchSize = 1024; const size_t kBackSearchSize = 1024;
if (sample_size < 64 || sample_size > kMaxJpegSize || !sample) { if (src_size_mjpg < 64 || src_size_mjpg > kMaxJpegSize || !src_mjpg) {
// ERROR: Invalid jpeg size: sample_size // ERROR: Invalid jpeg size: src_size_mjpg
return LIBYUV_FALSE; return LIBYUV_FALSE;
} }
if (sample[0] != 0xff || sample[1] != 0xd8) { // SOI marker if (src_mjpg[0] != 0xff || src_mjpg[1] != 0xd8) { // SOI marker
// ERROR: Invalid jpeg initial start code // ERROR: Invalid jpeg initial start code
return LIBYUV_FALSE; return LIBYUV_FALSE;
} }
// Look for the End Of Image (EOI) marker near the end of the buffer. // Look for the End Of Image (EOI) marker near the end of the buffer.
if (sample_size > kBackSearchSize) { if (src_size_mjpg > kBackSearchSize) {
if (ScanEOI(sample + sample_size - kBackSearchSize, kBackSearchSize)) { if (ScanEOI(src_mjpg + src_size_mjpg - kBackSearchSize, kBackSearchSize)) {
return LIBYUV_TRUE; // Success: Valid jpeg. return LIBYUV_TRUE; // Success: Valid jpeg.
} }
// Reduce search size for forward search. // Reduce search size for forward search.
sample_size = sample_size - kBackSearchSize + 1; src_size_mjpg = src_size_mjpg - kBackSearchSize + 1;
} }
// Step over SOI marker and scan for EOI. // Step over SOI marker and scan for EOI.
return ScanEOI(sample + 2, sample_size - 2); return ScanEOI(src_mjpg + 2, src_size_mjpg - 2);
} }
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -26,6 +26,8 @@ extern "C" { ...@@ -26,6 +26,8 @@ extern "C" {
// This module is for Mips MMI. // This module is for Mips MMI.
#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) #if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A)
// clang-format off
// CPU agnostic row functions // CPU agnostic row functions
void ScaleRowDown2_MMI(const uint8_t* src_ptr, void ScaleRowDown2_MMI(const uint8_t* src_ptr,
ptrdiff_t src_stride, ptrdiff_t src_stride,
...@@ -1101,6 +1103,8 @@ void ScaleRowUp2_16_MMI(const uint16_t* src_ptr, ...@@ -1101,6 +1103,8 @@ void ScaleRowUp2_16_MMI(const uint16_t* src_ptr,
: "memory"); : "memory");
} }
// clang-format on
#endif // !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) #endif // !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A)
#ifdef __cplusplus #ifdef __cplusplus
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment