#include "main.h"
+
#include "image-load.h"
#include "image_load_jpeg.h"
#include "jpeg_parser.h"
+#ifdef HAVE_JPEG
+
#include <setjmp.h>
#include <jpeglib.h>
#include <jerror.h>
static boolean fill_input_buffer (j_decompress_ptr cinfo)
{
ERREXIT(cinfo, JERR_INPUT_EMPTY);
+ return TRUE;
}
static void skip_input_data (j_decompress_ptr cinfo, long num_bytes)
{
struct jpeg_source_mgr* src = (struct jpeg_source_mgr*) cinfo->src;
- if (num_bytes > 0)
+ if (num_bytes > src->bytes_in_buffer)
+ {
+ ERREXIT(cinfo, JERR_INPUT_EOF);
+ }
+ else if (num_bytes > 0)
{
src->next_input_byte += (size_t) num_bytes;
src->bytes_in_buffer -= (size_t) num_bytes;
MPOData *mpo = jpeg_get_mpo_data(buf, count);
if (mpo && mpo->num_images > 1)
{
- lj->stereo = TRUE;
- stereo_buf2 = (unsigned char *)buf + mpo->images[1].offset;
- stereo_length = mpo->images[1].length;
+ guint i;
+ gint idx1 = -1, idx2 = -1;
+ guint num2 = 1;
+
+ for (i = 0; i < mpo->num_images; i++)
+ {
+ if (mpo->images[i].type_code == 0x20002)
+ {
+ if (mpo->images[i].MPIndividualNum == 1)
+ {
+ idx1 = i;
+ }
+ else if (mpo->images[i].MPIndividualNum > num2)
+ {
+ idx2 = i;
+ num2 = mpo->images[i].MPIndividualNum;
+ }
+ }
+ }
+
+ if (idx1 >= 0 && idx2 >= 0)
+ {
+ lj->stereo = TRUE;
+ stereo_buf2 = (unsigned char *)buf + mpo->images[idx2].offset;
+ stereo_length = mpo->images[idx2].length;
+ buf = (unsigned char *)buf + mpo->images[idx1].offset;
+ count = mpo->images[idx1].length;
+ }
}
jpeg_mpo_data_free(mpo);
+#endif
+
+
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */