// Dumps a picture as a PGM file using the IMC4 layout. static int DumpPicture(const WebPPicture* const picture, const char* PGM_name) { int y; const int uv_width = (picture->width + 1) / 2; const int uv_height = (picture->height + 1) / 2; const int stride = (picture->width + 1) & ~1; const int alpha_height = WebPPictureHasTransparency(picture) ? picture->height : 0; const int height = picture->height + uv_height + alpha_height; FILE* const f = fopen(PGM_name, "wb"); if (f == NULL) return 0; fprintf(f, "P5\n%d %d\n255\n", stride, height); for (y = 0; y < picture->height; ++y) { if (fwrite(picture->y + y * picture->y_stride, picture->width, 1, f) != 1) return 0; if (picture->width & 1) fputc(0, f); // pad } for (y = 0; y < uv_height; ++y) { if (fwrite(picture->u + y * picture->uv_stride, uv_width, 1, f) != 1) return 0; if (fwrite(picture->v + y * picture->uv_stride, uv_width, 1, f) != 1) return 0; } for (y = 0; y < alpha_height; ++y) { if (fwrite(picture->a + y * picture->a_stride, picture->width, 1, f) != 1) return 0; if (picture->width & 1) fputc(0, f); // pad } fclose(f); return 1; }
void VP8EncInitAlpha(VP8Encoder* const enc) { enc->has_alpha_ = WebPPictureHasTransparency(enc->pic_); enc->alpha_data_ = NULL; enc->alpha_data_size_ = 0; if (enc->thread_level_ > 0) { WebPWorker* const worker = &enc->alpha_worker_; WebPWorkerInit(worker); worker->data1 = enc; worker->data2 = NULL; worker->hook = (WebPWorkerHook)CompressAlphaJob; } }
void VP8EncInitAlpha(VP8Encoder* const enc) { enc->has_alpha_ = WebPPictureHasTransparency(enc->pic_); enc->alpha_data_ = NULL; enc->alpha_data_size_ = 0; }