Commit 913656a3 authored by fbarchard@google.com's avatar fbarchard@google.com

Valid search backwards - find EOI quicker if its there.

BUG=210
TEST=out\release\libyuv_unittest --gtest_filter=*Jpeg*
Review URL: https://webrtc-codereview.appspot.com/1271004

git-svn-id: http://libyuv.googlecode.com/svn/trunk@627 16f28f9a-4ce2-e073-06de-1de4eb20be90
parent b36eeee8
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 626 Version: 627
License: BSD License: BSD
License File: LICENSE License File: LICENSE
......
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
#define INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 626 #define LIBYUV_VERSION 627
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
...@@ -76,35 +76,23 @@ MJpegDecoder::~MJpegDecoder() { ...@@ -76,35 +76,23 @@ MJpegDecoder::~MJpegDecoder() {
} }
// Helper function to validate the jpeg looks ok. // Helper function to validate the jpeg looks ok.
// TODO(fbarchard): Improve performance. Scan backward for EOI? // TODO(fbarchard): Optimize case where SOI is found but EOI is not.
bool ValidateJpeg(const uint8* sample, size_t sample_size) { bool ValidateJpeg(const uint8* sample, size_t sample_size) {
if (sample_size < 64) { if (sample_size < 64) {
// ERROR: Invalid jpeg size: sample_size // ERROR: Invalid jpeg size: sample_size
return false; return false;
} }
if (sample[0] != 0xff || sample[1] != 0xd8) { if (sample[0] != 0xff || sample[1] != 0xd8) { // Start Of Image
// ERROR: Invalid jpeg initial start code // ERROR: Invalid jpeg initial start code
return false; return false;
} }
bool soi = true; for (int i = static_cast<int>(sample_size) - 1; i > 2; --i) {
int total_eoi = 0; if (sample[i - 1] == 0xff && sample[i] == 0xd9) { // End Of Image
for (int i = 2; i < static_cast<int>(sample_size) - 1; ++i) { return true;
if (sample[i] == 0xff) {
if (sample[i + 1] == 0xd8) { // Start Of Image
soi = true;
} else if (sample[i + 1] == 0xd9) { // End Of Image
if (soi) {
++total_eoi;
}
soi = false;
}
} }
} }
if (!total_eoi) { // ERROR: Invalid jpeg end code not found. Size sample_size
// ERROR: Invalid jpeg end code not found. Size sample_size return false;
return false;
}
return true;
} }
bool MJpegDecoder::LoadFrame(const uint8* src, size_t src_len) { bool MJpegDecoder::LoadFrame(const uint8* src, size_t src_len) {
......
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