Lines Matching refs:enc
43 static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) { in InitPassStats() argument
44 const uint64_t target_size = (uint64_t)enc->config_->target_size; in InitPassStats()
46 const float target_PSNR = enc->config_->target_PSNR; in InitPassStats()
50 s->q = s->last_q = enc->config_->quality; in InitPassStats()
94 static void ResetStats(VP8Encoder* const enc) { in ResetStats() argument
95 VP8EncProba* const proba = &enc->proba_; in ResetStats()
110 static int FinalizeSkipProba(VP8Encoder* const enc) { in FinalizeSkipProba() argument
111 VP8EncProba* const proba = &enc->proba_; in FinalizeSkipProba()
112 const int nb_mbs = enc->mb_w_ * enc->mb_h_; in FinalizeSkipProba()
138 static void ResetTokenStats(VP8Encoder* const enc) { in ResetTokenStats() argument
139 VP8EncProba* const proba = &enc->proba_; in ResetTokenStats()
188 static void ResetSegments(VP8Encoder* const enc) { in ResetSegments() argument
190 for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) { in ResetSegments()
191 enc->mb_info_[n].segment_ = 0; in ResetSegments()
195 static void SetSegmentProbas(VP8Encoder* const enc) { in SetSegmentProbas() argument
199 for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) { in SetSegmentProbas()
200 const VP8MBInfo* const mb = &enc->mb_info_[n]; in SetSegmentProbas()
204 if (enc->pic_->stats != NULL) { in SetSegmentProbas()
206 enc->pic_->stats->segment_size[n] = p[n]; in SetSegmentProbas()
210 if (enc->segment_hdr_.num_segments_ > 1) { in SetSegmentProbas()
211 uint8_t* const probas = enc->proba_.segments_; in SetSegmentProbas()
216 enc->segment_hdr_.update_map_ = in SetSegmentProbas()
218 if (!enc->segment_hdr_.update_map_) ResetSegments(enc); in SetSegmentProbas()
219 enc->segment_hdr_.size_ = in SetSegmentProbas()
225 enc->segment_hdr_.update_map_ = 0; in SetSegmentProbas()
226 enc->segment_hdr_.size_ = 0; in SetSegmentProbas()
313 VP8Encoder* const enc = it->enc_; in CodeResiduals() local
319 VP8InitResidual(0, 1, enc, &res); in CodeResiduals()
323 VP8InitResidual(1, 0, enc, &res); in CodeResiduals()
325 VP8InitResidual(0, 3, enc, &res); in CodeResiduals()
339 VP8InitResidual(0, 2, enc, &res); in CodeResiduals()
364 VP8Encoder* const enc = it->enc_; in RecordResiduals() local
369 VP8InitResidual(0, 1, enc, &res); in RecordResiduals()
373 VP8InitResidual(1, 0, enc, &res); in RecordResiduals()
375 VP8InitResidual(0, 3, enc, &res); in RecordResiduals()
388 VP8InitResidual(0, 2, enc, &res); in RecordResiduals()
412 VP8Encoder* const enc = it->enc_; in RecordTokens() local
417 VP8InitResidual(0, 1, enc, &res); in RecordTokens()
421 VP8InitResidual(1, 0, enc, &res); in RecordTokens()
423 VP8InitResidual(0, 3, enc, &res); in RecordTokens()
437 VP8InitResidual(0, 2, enc, &res); in RecordTokens()
469 static void ResetSSE(VP8Encoder* const enc) { in ResetSSE() argument
470 enc->sse_[0] = 0; in ResetSSE()
471 enc->sse_[1] = 0; in ResetSSE()
472 enc->sse_[2] = 0; in ResetSSE()
474 enc->sse_count_ = 0; in ResetSSE()
478 VP8Encoder* const enc = it->enc_; in StoreSSE() local
482 enc->sse_[0] += VP8SSE16x16(in + Y_OFF_ENC, out + Y_OFF_ENC); in StoreSSE()
483 enc->sse_[1] += VP8SSE8x8(in + U_OFF_ENC, out + U_OFF_ENC); in StoreSSE()
484 enc->sse_[2] += VP8SSE8x8(in + V_OFF_ENC, out + V_OFF_ENC); in StoreSSE()
485 enc->sse_count_ += 16 * 16; in StoreSSE()
489 VP8Encoder* const enc = it->enc_; in StoreSideInfo() local
491 WebPPicture* const pic = enc->pic_; in StoreSideInfo()
495 enc->block_count_[0] += (mb->type_ == 0); in StoreSideInfo()
496 enc->block_count_[1] += (mb->type_ == 1); in StoreSideInfo()
497 enc->block_count_[2] += (mb->skip_ != 0); in StoreSideInfo()
501 uint8_t* const info = &pic->extra_info[it->x_ + it->y_ * enc->mb_w_]; in StoreSideInfo()
505 case 3: *info = enc->dqm_[mb->segment_].quant_; break; in StoreSideInfo()
524 VP8Encoder* const enc = it->enc_; in ResetSideInfo() local
525 WebPPicture* const pic = enc->pic_; in ResetSideInfo()
527 memset(enc->block_count_, 0, sizeof(enc->block_count_)); in ResetSideInfo()
529 ResetSSE(enc); in ResetSideInfo()
532 static void ResetSSE(VP8Encoder* const enc) { in ResetSSE() argument
533 (void)enc; in ResetSSE()
536 VP8Encoder* const enc = it->enc_; in StoreSideInfo() local
537 WebPPicture* const pic = enc->pic_; in StoreSideInfo()
541 enc->mb_w_ * enc->mb_h_ * sizeof(*pic->extra_info)); in StoreSideInfo()
560 static void SetLoopParams(VP8Encoder* const enc, float q) { in SetLoopParams() argument
564 VP8SetSegmentParams(enc, q); // setup segment quantizations and filters in SetLoopParams()
565 SetSegmentProbas(enc); // compute segment probabilities in SetLoopParams()
567 ResetStats(enc); in SetLoopParams()
568 ResetSSE(enc); in SetLoopParams()
571 static uint64_t OneStatPass(VP8Encoder* const enc, VP8RDLevel rd_opt, in OneStatPass() argument
580 VP8IteratorInit(enc, &it); in OneStatPass()
581 SetLoopParams(enc, s->q); in OneStatPass()
587 ++enc->proba_.nb_skip_; in OneStatPass()
599 size_p0 += enc->segment_hdr_.size_; in OneStatPass()
601 size += FinalizeSkipProba(enc); in OneStatPass()
602 size += FinalizeTokenProbas(&enc->proba_); in OneStatPass()
611 static int StatLoop(VP8Encoder* const enc) { in StatLoop() argument
612 const int method = enc->method_; in StatLoop()
613 const int do_search = enc->do_search_; in StatLoop()
615 int num_pass_left = enc->config_->pass; in StatLoop()
619 const int final_percent = enc->percent_ + task_percent; in StatLoop()
622 int nb_mbs = enc->mb_w_ * enc->mb_h_; in StatLoop()
625 InitPassStats(enc, &stats); in StatLoop()
626 ResetTokenStats(enc); in StatLoop()
640 (enc->max_i4_header_bits_ == 0); in StatLoop()
642 OneStatPass(enc, rd_opt, nb_mbs, percent_per_pass, &stats); in StatLoop()
648 if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) { in StatLoop()
650 enc->max_i4_header_bits_ >>= 1; // strengthen header bit limitation... in StatLoop()
664 FinalizeSkipProba(enc); in StatLoop()
665 FinalizeTokenProbas(&enc->proba_); in StatLoop()
667 VP8CalculateLevelCosts(&enc->proba_); // finalize costs in StatLoop()
668 return WebPReportProgress(enc->pic_, final_percent, &enc->percent_); in StatLoop()
677 static int PreLoopInitialize(VP8Encoder* const enc) { in PreLoopInitialize() argument
680 const int average_bytes_per_MB = kAverageBytesPerMB[enc->base_quant_ >> 4]; in PreLoopInitialize()
682 enc->mb_w_ * enc->mb_h_ * average_bytes_per_MB / enc->num_parts_; in PreLoopInitialize()
684 for (p = 0; ok && p < enc->num_parts_; ++p) { in PreLoopInitialize()
685 ok = VP8BitWriterInit(enc->parts_ + p, bytes_per_parts); in PreLoopInitialize()
688 VP8EncFreeBitWriters(enc); // malloc error occurred in PreLoopInitialize()
689 WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); in PreLoopInitialize()
695 VP8Encoder* const enc = it->enc_; in PostLoopFinalize() local
698 for (p = 0; p < enc->num_parts_; ++p) { in PostLoopFinalize()
699 VP8BitWriterFinish(enc->parts_ + p); in PostLoopFinalize()
700 ok &= !enc->parts_[p].error_; in PostLoopFinalize()
706 if (enc->pic_->stats != NULL) { // finalize byte counters... in PostLoopFinalize()
710 enc->residual_bytes_[i][s] = (int)((it->bit_count_[s][i] + 7) >> 3); in PostLoopFinalize()
718 VP8EncFreeBitWriters(enc); in PostLoopFinalize()
735 int VP8EncLoop(VP8Encoder* const enc) { in VP8EncLoop() argument
737 int ok = PreLoopInitialize(enc); in VP8EncLoop()
740 StatLoop(enc); // stats-collection loop in VP8EncLoop()
742 VP8IteratorInit(enc, &it); in VP8EncLoop()
746 const int dont_use_skip = !enc->proba_.use_skip_proba_; in VP8EncLoop()
747 const VP8RDLevel rd_opt = enc->rd_opt_level_; in VP8EncLoop()
774 int VP8EncTokenLoop(VP8Encoder* const enc) { in VP8EncTokenLoop() argument
776 int max_count = (enc->mb_w_ * enc->mb_h_) >> 3; in VP8EncTokenLoop()
777 int num_pass_left = enc->config_->pass; in VP8EncTokenLoop()
778 const int do_search = enc->do_search_; in VP8EncTokenLoop()
780 VP8EncProba* const proba = &enc->proba_; in VP8EncTokenLoop()
781 const VP8RDLevel rd_opt = enc->rd_opt_level_; in VP8EncTokenLoop()
782 const uint64_t pixel_count = enc->mb_w_ * enc->mb_h_ * 384; in VP8EncTokenLoop()
786 InitPassStats(enc, &stats); in VP8EncTokenLoop()
787 ok = PreLoopInitialize(enc); in VP8EncTokenLoop()
792 assert(enc->num_parts_ == 1); in VP8EncTokenLoop()
793 assert(enc->use_tokens_); in VP8EncTokenLoop()
801 (enc->max_i4_header_bits_ == 0); in VP8EncTokenLoop()
805 VP8IteratorInit(enc, &it); in VP8EncTokenLoop()
806 SetLoopParams(enc, stats.q); in VP8EncTokenLoop()
808 ResetTokenStats(enc); in VP8EncTokenLoop()
811 VP8TBufferClear(&enc->tokens_); in VP8EncTokenLoop()
821 ok = RecordTokens(&it, &info, &enc->tokens_); in VP8EncTokenLoop()
823 WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); in VP8EncTokenLoop()
838 size_p0 += enc->segment_hdr_.size_; in VP8EncTokenLoop()
840 uint64_t size = FinalizeTokenProbas(&enc->proba_); in VP8EncTokenLoop()
841 size += VP8EstimateTokenSize(&enc->tokens_, in VP8EncTokenLoop()
855 if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) { in VP8EncTokenLoop()
857 enc->max_i4_header_bits_ >>= 1; // strengthen header bit limitation... in VP8EncTokenLoop()
872 FinalizeTokenProbas(&enc->proba_); in VP8EncTokenLoop()
874 ok = VP8EmitTokens(&enc->tokens_, enc->parts_ + 0, in VP8EncTokenLoop()
877 ok = ok && WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_); in VP8EncTokenLoop()
883 int VP8EncTokenLoop(VP8Encoder* const enc) { in VP8EncTokenLoop() argument
884 (void)enc; in VP8EncTokenLoop()