Как jpeg_read_scanline декодирует файл JPEG - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь использовать libjpeg для декомпрессии изображений, но мне нужно знать, как читаются данные. Чтение исходного кода jpeg_read_scanlines привело меня к некоторым указателям на функции, и я не могу найти, где они объявлены, оставляя меня в тупике.

Вот исходный код, о котором идет речь: https://code.woboq.org/qt5/qtbase/src/3rdparty/libjpeg/src/jdapistd.c.html#263

GLOBAL(JDIMENSION)
jpeg_read_scanlines(j_decompress_ptr cinfo, JSAMPARRAY scanlines,
                    JDIMENSION max_lines)
{
  JDIMENSION row_ctr;
  if (cinfo->global_state != DSTATE_SCANNING)
    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
  if (cinfo->output_scanline >= cinfo->output_height) {
    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
    return 0;
  }
  /* Call progress monitor hook if present */
  if (cinfo->progress != NULL) {
    cinfo->progress->pass_counter = (long)cinfo->output_scanline;
    cinfo->progress->pass_limit = (long)cinfo->output_height;
    (*cinfo->progress->progress_monitor) ((j_common_ptr)cinfo);
  }
  /* Process some data */
  row_ctr = 0;

  // This is the function pointer that processes the data.
  // I cannot seem to find where this is initialized and what it does.

  (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines);
  cinfo->output_scanline += row_ctr;
  return row_ctr;
}

Если кто-нибудь может указать мне правильное направление, я был бы очень признателен за помощь! Спасибо!

...