Thread: How to pass member of struct into jpeg_finish_compress() & jpeg_destroy_compress()?

  1. #1
    Registered User
    Join Date
    Sep 2014
    Posts
    235

    How to pass member of struct into jpeg_finish_compress() & jpeg_destroy_compress()?

    How to fix this?
    Code:
    ...
    typedef struct JPEG_DATA
    {
        struct jpeg_decompress_struct d_info;
        struct jpeg_compress_struct c_info;
    
    } JPEG_DATA, *pJPEG_DATA;
    ...
    
    int main(int argc, char **argv)
    {
    JPEG_DATA data;
    prepare_read_jpg_file(argv[2], &data);
    read_jpg_file(&data);
    jpeg_finish_compress(&data.d_info); // WARNING HERE
    jpeg_destroy_compress(&data.d_info);
    return 0;
    }
    warning: passing argument 1 of 'jpeg_finish_compress' from incompatible pointer type

    The problem is in jpeg_finish_compress(). How to pass the pointer?
    By default in example they do it like this:
    Code:
    (void) jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    But I use the member d_info in data struct. There is also a not:

    In library there is a definition in file jpeglib.h:
    Code:
    EXTERN(void) jpeg_finish_compress (j_compress_ptr cinfo);
    jpeglib.h|954|note: expected 'j_compress_ptr' but argument is of type 'struct jpeg_decompress_struct *'|

  2. #2
    Unregistered User Yarin's Avatar
    Join Date
    Jul 2007
    Posts
    2,158
    Quote Originally Posted by barracuda View Post
    How to fix this?
    Code:
    ...
    typedef struct JPEG_DATA
    {
        struct jpeg_decompress_struct d_info;
        struct jpeg_compress_struct c_info;
    
    } JPEG_DATA, *pJPEG_DATA;
    ...
    
    int main(int argc, char **argv)
    {
    JPEG_DATA data;
    prepare_read_jpg_file(argv[2], &data);
    read_jpg_file(&data);
    jpeg_finish_compress(&data.d_info); // WARNING HERE
    jpeg_destroy_compress(&data.d_info);
    return 0;
    }
    You're passing the decompression info data to the compression cleanup routines.

  3. #3
    Registered User
    Join Date
    Sep 2014
    Posts
    235
    Thank you man!

  4. #4
    Registered User
    Join Date
    Sep 2014
    Posts
    235
    Anyway, it crashes on the line with
    Code:
    (void) jpeg_finish_decompress(&data.d_info);
    Any idea why this happens?
    Code:
        JPEG_DATA data;
        data.quality=95;
        data.source_type=st;
        data.target_type=tt;
        data.source_color_space=scs;
        data.target_color_space=tcs;
    
        prepare_read_jpg_file(argv[2], &data);
        read_jpg_file(&data);
        (void) jpeg_finish_decompress(&data.d_info);
        jpeg_destroy_decompress(&data.d_info);
    
        prepare_write_jpg_file(argv[3], &data);
    //    write_jpg_file(&data);
    
        jpeg_finish_compress(&data.c_info);
        jpeg_destroy_compress(&data.c_info);
    They normally use style like this:
    Code:
    (void) jpeg_finish_decompress(&cinfo);
    but when I pass &data.d_info it crashes.

    I also tested to move the fclose after the clean rutines:
    Code:
    (void) jpeg_finish_decompress(&data.d_info);
    jpeg_destroy_decompress(&data.d_info);
    fclose(data.fpr);
    But still crashes
    Last edited by barracuda; 02-10-2015 at 09:50 AM.

  5. #5
    Registered User
    Join Date
    Sep 2014
    Posts
    235
    Finally I solve it! The problem is in Error manager, variable jerr; It needed to be moved under data struct.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 3
    Last Post: 10-31-2013, 09:44 AM
  2. Assign struct member value to struct member value
    By thahemp in forum C Programming
    Replies: 5
    Last Post: 10-13-2010, 09:48 AM
  3. How to pass member functions into a function object...
    By TeenWolf in forum C++ Programming
    Replies: 3
    Last Post: 04-24-2007, 01:01 PM
  4. Replies: 1
    Last Post: 05-05-2004, 06:58 AM
  5. syntax to pass a member function pointer to another class?
    By reanimated in forum C++ Programming
    Replies: 4
    Last Post: 11-27-2003, 05:24 PM

Tags for this Thread