Jump to content

  • Log In with Google      Sign In   
  • Create Account


Android jpeg_read_header crash


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 polyfrag   Crossbones+   -  Reputation: 1821

Like
0Likes
Like

Posted 28 March 2013 - 01:55 PM

Why is it crashing on jpeg_read_header?

libc is complaining:

03-28 00:53:21.293: A/libc(26952): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 26967 (engame.pathogen)


struct jpeg_decompress_struct cinfo; 
    jpeg_error_mgr jerr;
    if (!source_init(strFileName)) 
  { 
    LOGE("Error opening jpeg %s", strFileName); 
    return NULL; 
  }

    cinfo.err = jpeg_std_error(&jerr); 
    jpeg_create_decompress(&cinfo); 
    jpegSource.pub.init_source = init_sourceFunc; 
    jpegSource.pub.fill_input_buffer = fill_input_bufferFunc; 
    jpegSource.pub.skip_input_data = skip_input_dataFunc; 
    jpegSource.pub.resync_to_restart = jpeg_resync_to_restart; 
    jpegSource.pub.term_source = term_sourceFunc; 
    jpegSource.pub.next_input_byte = NULL; 
    jpegSource.pub.bytes_in_buffer = 0; 
    cinfo.src = (struct jpeg_source_mgr*)&jpegSource; 
  
  //LOGI("JPG %s 3", strFileName);

    jpeg_read_header(&cinfo, TRUE);

#define JPEG_BUFFER_SIZE (8 << 10)
typedef struct 
{ 
    struct jpeg_source_mgr  pub; 
} JPEGSource;

static char jpegBuffer[JPEG_BUFFER_SIZE]; 
static JPEGSource  jpegSource;

static void init_sourceFunc(j_decompress_ptr cinfo) 
{ 
    ((JPEGSource*)cinfo->src)->pub.bytes_in_buffer = 0; 
}

static boolean fill_input_bufferFunc(j_decompress_ptr cinfo) 
{ 
    JPEGSource  *src = (JPEGSource*)cinfo->src;

    src->pub.bytes_in_buffer = source_read(jpegBuffer);

    src->pub.next_input_byte = (const unsigned char*)jpegBuffer;

    return TRUE; 
}

void skip_input_dataFunc(j_decompress_ptr cinfo, long num_bytes) 
{ 
    JPEGSource  *src = (JPEGSource*)cinfo->src;

    if (num_bytes > 0) 
  { 
        source_seek(num_bytes);

        if (num_bytes > src->pub.bytes_in_buffer) src->pub.bytes_in_buffer = 0;

        else 
    { 
            src->pub.next_input_byte += num_bytes; 
            src->pub.bytes_in_buffer -= num_bytes; 
        } 
    } 
}

void term_sourceFunc(j_decompress_ptr cinfo) 
{ 
}

bool source_init(const char *filename) 
{ 
  g_src = CFile(filename);
  if(!g_src.mFile) 
    return false;

    return true; 
}

void source_close() 
{ 
  g_src.close(); 
}

int source_read(char* buffer) 
{ 
  return g_src.read((void*)buffer, JPEG_BUFFER_SIZE); 
}

void source_seek(int num) 
{ 
  g_src.seek(num); 
}

Edited by polyfrag, 28 March 2013 - 03:04 PM.


Sponsor:

#2 polyfrag   Crossbones+   -  Reputation: 1821

Like
0Likes
Like

Posted 28 March 2013 - 03:12 PM

I added debug info leading up to the crash:

 

03-28 13:38:08.827: I/NDK_MainActivity(32384): source_init size=157506

03-28 13:38:08.827: I/NDK_MainActivity(32384): JPG models/human2.jpg 2
03-28 13:38:08.827: I/NDK_MainActivity(32384): JPG models/human2.jpg 3
03-28 13:38:08.827: I/NDK_MainActivity(32384): init_sourceFunc
03-28 13:38:08.827: I/NDK_MainActivity(32384): fill_input_bufferFunc
03-28 13:38:08.827: I/NDK_MainActivity(32384): source_read...
03-28 13:38:08.827: I/NDK_MainActivity(32384): source_read 8192
03-28 13:38:08.827: I/NDK_MainActivity(32384): read 8192
03-28 13:38:08.827: I/NDK_MainActivity(32384): skip_input_dataFunc 8282
03-28 13:38:08.835: I/NDK_MainActivity(32384): source_seek 8282
03-28 13:38:08.835: I/NDK_MainActivity(32384): fill_input_bufferFunc
03-28 13:38:08.835: I/NDK_MainActivity(32384): source_read...
03-28 13:38:08.835: I/NDK_MainActivity(32384): source_read 8192
03-28 13:38:08.835: I/NDK_MainActivity(32384): read 8192
03-28 13:38:08.835: A/libc(32384): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 32397 (engame.pathogen)

 

It crashes when it returns to jpeg_read_header from the second read of 8192 bytes.


Edited by polyfrag, 28 March 2013 - 03:17 PM.


#3 polyfrag   Crossbones+   -  Reputation: 1821

Like
0Likes
Like

Posted 28 March 2013 - 05:12 PM

Fixed SEEK_SET to SEEK_CUR but still getting the problem.



#4 polyfrag   Crossbones+   -  Reputation: 1821

Like
0Likes
Like

Posted 28 March 2013 - 08:51 PM

For some reason using jpeg_mem_src makes it work.

 

http://d.hatena.ne.jp/andyroid/?of=5






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS