Ошибка сегмента при преобразовании YUV в JPEG с использованием LibJpeg

Мне нужно сжать ТОЛЬКО Y в изображении yuv 422 в изображение jpeg, используя LibJpeg

Y только изображение в градациях серого

вот мой код:

y = (char*) malloc(640*480);
for (i = 0, j = 0; j < n; i++, j += 2)
       y[i] = raw[j];
Image *dst;

dst = CreateImage(sz, 8, 1);
dst->imageData = y;

//frame is the dst image
bool ipl2jpeg(Image *frame, unsigned char **outbuffer, long unsigned int *outlen) {
    unsigned char *outdata = (uchar *) frame->imageData;
    struct jpeg_compress_struct cinfo ;
    struct jpeg_error_mgr jerr;
    JSAMPROW row_ptr[1];
    int row_stride;

    *outbuffer = NULL;
    *outlen = 0;

    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    jpeg_mem_dest(&cinfo, outbuffer, outlen);

    cinfo.image_width = frame->width;
    cinfo.image_height = frame->height;
    cinfo.input_components = frame->nChannels;

    cinfo.in_color_space = JCS_GRAYSCALE;

    jpeg_set_defaults(&cinfo);
    jpeg_set_quality (&cinfo, 50, true);
    jpeg_start_compress(&cinfo, TRUE);
    row_stride = frame->width * frame->nChannels;

    while (cinfo.next_scanline < cinfo.image_height) {
        row_ptr[0] = &outdata[cinfo.next_scanline * row_stride];
        jpeg_write_scanlines(&cinfo, row_ptr, 1); // Iam getting segm. fault here
    }

    jpeg_finish_compress(&cinfo);
    jpeg_destroy_compress(&cinfo);

    return true;
}

Я получаю ошибку сегментации в jpeg_write_scanlines. Я не уверен, что делаю это правильно. это правильный способ конвертировать изображение в градациях серого в jpeg ??


person Ahmed Kato    schedule 08.06.2013    source источник
comment
в коде я пишу комментарий, где я получаю ошибку сегментации, нет, это не работает, я спрашиваю, это правильный способ преобразовать изображение в градациях серого в jpeg ??   -  person Ahmed Kato    schedule 08.06.2013
comment
Хорошо, вы должны сделать более очевидным, в чем проблема. Например, измените свой заголовок на ошибку seg при использовании libjpeg или что-то в этом роде.   -  person Oliver Charlesworth    schedule 08.06.2013
comment
Извините, что я этого не сделал, я спешу, я умею писать хорошие вопросы, но я в стрессе, и это не работает для меня.   -  person Ahmed Kato    schedule 08.06.2013


Ответы (1)


вы не публикуете компилируемый исходный код; трудно догадаться, как на самом деле вызывается ipl2jpeg()

frame->nChannels должно быть 1

row_ptr[0] должен указывать на данные входного кадра

person pmeerw    schedule 21.01.2014