Równoległość tworzenia plików PNG z C ++, libpng i OpenMP

Obecnie próbuję zaimplementować koder PNG w C ++ oparty na libpng, który używa OpenMP do przyspieszenia procesu kompresji. Narzędzie jest już w stanie generować pliki PNG z różnych formatów obrazu. Przesłałem kompletny kod źródłowy do pastebin.com, abyś mógł zobaczyć, co do tej pory zrobiłem:http://pastebin.com/8wiFzcgV

Jak na razie dobrze! Teraz moim problemem jest znalezienie sposobu na równoległe generowanie fragmentów IDAT zawierających skompresowane dane obrazu. Zwykle funkcja libpng png_write_row jest wywoływana w pętli for ze wskaźnikiem do struktury, która zawiera wszystkie informacje o pliku PNG i wskaźnik wiersza z danymi piksela pojedynczego wiersza obrazu.

(Linia 114-117 w pliku Pastebin)

//Loop through image
for (i = 0, rp = info_ptr->row_pointers; i < png_ptr->height; i++, rp++) {
    png_write_row(png_ptr, *rp);
}

Libpng następnie kompresuje jeden rząd po drugim i wypełnia wewnętrzny bufor skompresowanymi danymi. Po zapełnieniu bufora skompresowane dane są usuwane w kawałku IDAT do pliku obrazu.

Moim podejściem było podzielenie obrazu na wiele części i pozwolenie, aby jeden wątek kompresował wiersz 1 do 10, a drugi wątek 11 do 20 i tak dalej. Ale ponieważ libpng używa wewnętrznego bufora, nie jest to tak proste, jak myślałem wcześniej :) W jakiś sposób muszę sprawić, by libpng zapisywał skompresowane dane do osobnego bufora dla każdego wątku. Następnie potrzebuję sposobu na połączenie buforów we właściwej kolejności, dzięki czemu będę mógł zapisać je wszystkie razem w wyjściowym pliku obrazu.

Czy ktoś ma pomysł, jak mogę to zrobić za pomocą OpenMP i niektórych zmian w libpng? Dziękuję Ci bardzo!