Seite 1 von 1

[libjpeg] YUV lesen

Verfasst: 09.06.2011, 14:45
von ElsnPau
Hi,
ist stehe gerade vor dem Problem, dass ich mit Hilfe der libjpeg die YUV-Daten aus einer JPEG Datei lesen möchte.
Mein Bild ist 864x496 Pixel groß. Also alles Vielfache von 16.
Mit folgendem Code versuche ich dsa zu bewerkstelligen:

Code: Alles auswählen

    if (jpeg_read_header(&cinfo, TRUE) != JPEG_HEADER_OK)
    {
        return false;
    }
    
    cinfo.raw_data_out = 1;
    cinfo.out_color_space = JCS_YCbCr;

    jpeg_start_decompress(&cinfo);

    JSAMPIMAGE sampleImage = new JSAMPARRAY[3];
    JSAMPARRAY sampleArray = new JSAMPROW[cinfo.output_height + cinfo.output_height];

    sampleImage[0] = sampleArray;
    sampleImage[1] = sampleArray+cinfo.output_height;
    sampleImage[2] = sampleArray+cinfo.output_height+cinfo.output_height/2;

    JSAMPLE *SampleImageBuffer = new JSAMPLE[cinfo.output_width * cinfo.output_height * 3 >> 1];

    for (int i = 0; i < cinfo.output_height; ++i)
    {
      sampleImage[0][i] = SampleImageBuffer+ i*cinfo.output_width;
    }
    int offset = cinfo.output_height;
    for (int i = 0; i < cinfo.output_height/2; ++i)
    {
      sampleImage[1][i] = offset + SampleImageBuffer+ i*cinfo.output_width/2;
    }
    offset = cinfo.output_height+cinfo.output_height/2;
    for (int i = 0; i < cinfo.output_height/2; ++i)
    {
      sampleImage[2][i] = offset + SampleImageBuffer+ i*cinfo.output_width/2;
    }

    for (; cinfo.output_scanline < cinfo.output_height;)
    {
      jpeg_read_raw_data(&cinfo, sampleImage, 16);

      sampleImage[0] += 16;
      sampleImage[1] += 8;
      sampleImage[2] += 8;
    }
Das Problem ist, dass jpeg_read_raw_data nen Speicherzugriffsfehler verursacht, wenn cinfo.output_scanline == 480 ist, also er bei den letzten 16 Zeilen ist.

Kann mir jemand sagen was ich falsch mache? Die Doku ist nicht besonders hilfreich.

Danke!

Re: [libjpeg] YUV lesen

Verfasst: 10.06.2011, 11:15
von ElsnPau
Ich habe das Problem gelöst.
Mein Fehler war die Version 8c von der offiziellen Webseite zu benutzen. Jetzt nutze ich die Version 6b von sourceforge und alles läuft perfekt :D

Wenn mir noch wer sagen kann, wo ich diesen Bug berichten kann, würde ich das noch machen.

lg