WebPReportProgress: use non-encoder specific params

Take picture and percent value storage location instead of VP8Encoder.
This will allow reuse by the lossless encoder.

Change-Id: Ic49dbc800cc3e2df60d20f4ebac277f68ed6031b
This commit is contained in:
James Zern 2012-05-28 23:02:02 -07:00
parent 880fd98ca1
commit f18281ffa0
6 changed files with 16 additions and 13 deletions

View File

@ -311,7 +311,7 @@ int VP8EncFinishAlpha(VP8Encoder* enc) {
enc->alpha_data_size_ = (uint32_t)tmp_size; enc->alpha_data_size_ = (uint32_t)tmp_size;
enc->alpha_data_ = tmp_data; enc->alpha_data_ = tmp_data;
} }
return WebPReportProgress(enc, enc->percent_ + 20); return WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_);
} }
void VP8EncDeleteAlpha(VP8Encoder* enc) { void VP8EncDeleteAlpha(VP8Encoder* enc) {

View File

@ -929,7 +929,7 @@ int VP8StatLoop(VP8Encoder* const enc) {
} }
} }
} }
return WebPReportProgress(enc, final_percent); return WebPReportProgress(enc->pic_, final_percent, &enc->percent_);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View File

@ -70,9 +70,10 @@ void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it) {
} }
int VP8IteratorProgress(const VP8EncIterator* const it, int delta) { int VP8IteratorProgress(const VP8EncIterator* const it, int delta) {
if (delta && it->enc_->pic_->progress_hook) { VP8Encoder* const enc = it->enc_;
const int percent = it->percent0_ + delta * it->y_ / (it->enc_->mb_h_ - 1); if (delta && enc->pic_->progress_hook) {
return WebPReportProgress(it->enc_, percent); const int percent = it->percent0_ + delta * it->y_ / (enc->mb_h_ - 1);
return WebPReportProgress(enc->pic_, percent, &enc->percent_);
} }
return 1; return 1;
} }

View File

@ -416,7 +416,8 @@ int VP8EncWrite(VP8Encoder* const enc) {
if (size) if (size)
ok = ok && pic->writer(buf, size, pic); ok = ok && pic->writer(buf, size, pic);
VP8BitWriterWipeOut(enc->parts_ + p); // will free the internal buffer. VP8BitWriterWipeOut(enc->parts_ + p); // will free the internal buffer.
ok = ok && WebPReportProgress(enc, enc->percent_ + percent_per_part); ok = ok && WebPReportProgress(pic, enc->percent_ + percent_per_part,
&enc->percent_);
} }
// Padding byte // Padding byte
@ -425,7 +426,7 @@ int VP8EncWrite(VP8Encoder* const enc) {
} }
enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size); enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size);
ok = ok && WebPReportProgress(enc, final_percent); ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_);
return ok; return ok;
} }

View File

@ -474,7 +474,8 @@ int VP8StatLoop(VP8Encoder* const enc);
// in webpenc.c // in webpenc.c
// Assign an error code to a picture. Return false for convenience. // Assign an error code to a picture. Return false for convenience.
int WebPEncodingSetError(const WebPPicture* const pic, WebPEncodingError error); int WebPEncodingSetError(const WebPPicture* const pic, WebPEncodingError error);
int WebPReportProgress(VP8Encoder* const enc, int percent); int WebPReportProgress(const WebPPicture* const pic,
int percent, int* const percent_store);
// in analysis.c // in analysis.c
// Main analysis loop. Decides the segmentations and complexity. // Main analysis loop. Decides the segmentations and complexity.

View File

@ -303,7 +303,7 @@ static void StoreStats(VP8Encoder* const enc) {
stats->block_count[i] = enc->block_count_[i]; stats->block_count[i] = enc->block_count_[i];
} }
} }
WebPReportProgress(enc, 100); // done! WebPReportProgress(enc->pic_, 100, &enc->percent_); // done!
} }
int WebPEncodingSetError(const WebPPicture* const pic, int WebPEncodingSetError(const WebPPicture* const pic,
@ -314,10 +314,10 @@ int WebPEncodingSetError(const WebPPicture* const pic,
return 0; return 0;
} }
int WebPReportProgress(VP8Encoder* const enc, int percent) { int WebPReportProgress(const WebPPicture* const pic,
if (percent != enc->percent_) { int percent, int* const percent_store) {
WebPPicture* const pic = enc->pic_; if (percent_store != NULL && percent != *percent_store) {
enc->percent_ = percent; *percent_store = percent;
if (pic->progress_hook && !pic->progress_hook(percent, pic)) { if (pic->progress_hook && !pic->progress_hook(percent, pic)) {
// user abort requested // user abort requested
WebPEncodingSetError(pic, VP8_ENC_ERROR_USER_ABORT); WebPEncodingSetError(pic, VP8_ENC_ERROR_USER_ABORT);