Home | History | Annotate | Download | only in enc

Lines Matching refs:enc

57 static void ResetStats(VP8Encoder* const enc) {
58 VP8Proba* const proba = &enc->proba_;
73 static int FinalizeSkipProba(VP8Encoder* const enc) {
74 VP8Proba* const proba = &enc->proba_;
75 const int nb_mbs = enc->mb_w_ * enc->mb_h_;
92 static void ResetTokenStats(VP8Encoder* const enc) {
93 VP8Proba* const proba = &enc->proba_;
223 static void SetSegmentProbas(VP8Encoder* const enc) {
227 for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) {
228 const VP8MBInfo* const mb = &enc->mb_info_[n];
231 if (enc->pic_->stats != NULL) {
233 enc->pic_->stats->segment_size[n] = p[n];
236 if (enc->segment_hdr_.num_segments_ > 1) {
237 uint8_t* const probas = enc->proba_.segments_;
242 enc->segment_hdr_.update_map_ =
244 enc->segment_hdr_.size_ =
250 enc->segment_hdr_.update_map_ = 0;
251 enc->segment_hdr_.size_ = 0;
259 VP8Encoder* const enc, VP8Residual* const res) {
261 res->prob = enc->proba_.coeffs_[coeff_type];
262 res->stats = enc->proba_.stats_[coeff_type];
263 res->cost = enc->proba_.level_cost_[coeff_type];
332 VP8Encoder* const enc = it->enc_;
336 InitResidual(0, 3, enc, &res);
345 VP8Encoder* const enc = it->enc_;
352 InitResidual(0, 1, enc, &res);
357 InitResidual(1, 0, enc, &res);
371 VP8Encoder* const enc = it->enc_;
377 InitResidual(0, 2, enc, &res);
473 VP8Encoder* const enc = it->enc_;
479 InitResidual(0, 1, enc, &res);
483 InitResidual(1, 0, enc, &res);
485 InitResidual(0, 3, enc, &res);
499 InitResidual(0, 2, enc, &res);
524 VP8Encoder* const enc = it->enc_;
529 InitResidual(0, 1, enc, &res);
533 InitResidual(1, 0, enc
535 InitResidual(0, 3, enc, &res);
548 InitResidual(0, 2, enc, &res);
572 VP8Encoder* const enc = it->enc_;
577 InitResidual(0, 1, enc, &res);
583 InitResidual(1, 0, enc, &res);
585 InitResidual(0, 3, enc, &res);
601 InitResidual(0, 2, enc, &res);
632 static void ResetSSE(VP8Encoder* const enc) {
633 enc->sse_[0] = 0;
634 enc->sse_[1] = 0;
635 enc->sse_[2] = 0;
636 // Note: enc->sse_[3] is managed by alpha.c
637 enc->sse_count_ = 0;
641 VP8Encoder* const enc = it->enc_;
645 enc->sse_[0] += VP8SSE16x16(in + Y_OFF, out + Y_OFF);
646 enc->sse_[1] += VP8SSE8x8(in + U_OFF, out + U_OFF);
647 enc->sse_[2] += VP8SSE8x8(in + V_OFF, out + V_OFF);
648 enc->sse_count_ += 16 * 16;
652 VP8Encoder* const enc = it->enc_;
654 WebPPicture* const pic = enc->pic_;
658 enc->block_count_[0] += (mb->type_ == 0);
659 enc->block_count_[1] += (mb->type_ == 1);
660 enc->block_count_[2] += (mb->skip_ != 0);
664 uint8_t* const info = &pic->extra_info[it->x_ + it->y_ * enc->mb_w_];
668 case 3: *info = enc->dqm_[mb->segment_].quant_; break;
693 static void SetLoopParams(VP8Encoder* const enc, float q) {
701 VP8SetSegmentParams(enc, q); // setup segment quantizations and filters
702 SetSegmentProbas(enc); // compute segment probabilities
704 ResetStats(enc);
705 ResetTokenStats(enc);
707 ResetSSE(enc);
710 static int OneStatPass(VP8Encoder* const enc, float q, VP8RDLevel rd_opt,
717 SetLoopParams(enc, q);
719 VP8IteratorInit(enc, &it);
725 enc->proba_.nb_skip_++;
733 size += FinalizeSkipProba(enc);
734 size += FinalizeTokenProbas(&enc->proba_);
735 size += enc->segment_hdr_.size_;
747 static int StatLoop(VP8Encoder* const enc) {
748 const int method = enc->method_;
749 const int do_search = enc->do_search_;
751 float q = enc->config_->quality;
752 const int max_passes = enc->config_->pass;
755 const int final_percent = enc->percent_ + task_percent;
760 nb_mbs = enc->mb_w_ * enc->mb_h_;
773 if (!OneStatPass(enc, q, rd_opt, nb_mbs, NULL, percent_per_pass)) {
782 const int size = OneStatPass(enc, q, RD_OPT_BASIC, nb_mbs, &PSNR,
788 if (enc->config_->target_PSNR > 0) {
789 criterion = (PSNR < enc->config_->target_PSNR);
791 criterion = (size < enc->config_->target_size);
801 VP8CalculateLevelCosts(&enc->proba_); // finalize costs
802 return WebPReportProgress(enc->pic_, final_percent, &enc->percent_);
811 static int PreLoopInitialize(VP8Encoder* const enc) {
814 const int average_bytes_per_MB = kAverageBytesPerMB[enc->base_quant_ >> 4];
816 enc->mb_w_ * enc->mb_h_ * average_bytes_per_MB / enc->num_parts_;
818 for (p = 0; ok && p < enc->num_parts_; ++p) {
819 ok = VP8BitWriterInit(enc->parts_ + p, bytes_per_parts);
821 if (!ok) VP8EncFreeBitWriters(enc); // malloc error occurred
826 VP8Encoder* const enc = it->enc_;
829 for (p = 0; p < enc->num_parts_; ++p) {
830 VP8BitWriterFinish(enc->parts_ + p);
831 ok &= !enc->parts_[p].error_;
836 if (enc->pic_->stats) { // finalize byte counters...
840 enc->residual_bytes_[i][s] = (int)((it->bit_count_[s][i] + 7) >> 3);
847 VP8EncFreeBitWriters(enc);
864 int VP8EncLoop(VP8Encoder* const enc) {
866 int ok = PreLoopInitialize(enc);
869 StatLoop(enc); // stats-collection loop
871 VP8IteratorInit(enc, &it);
875 const int dont_use_skip = !enc->proba_.use_skip_proba_;
876 const VP8RDLevel rd_opt = enc->rd_opt_level_;
887 if (enc->use_layer_) {
904 int VP8EncTokenLoop(VP8Encoder* const enc) {
907 const int max_count = (enc->mb_w_ * enc->mb_h_) >> 3;
910 VP8Proba* const proba = &enc->proba_;
911 const VP8RDLevel rd_opt = enc->rd_opt_level_;
913 assert(enc->num_parts_ == 1);
914 assert(enc->use_tokens_);
917 assert(!enc->do_search_); // TODO(skal): handle pass and dichotomy
919 SetLoopParams(enc, enc->config_->quality);
921 ok = PreLoopInitialize(enc);
924 VP8IteratorInit(enc, &it);
935 RecordTokens(&it, &info, &enc->tokens_);
937 if (enc->use_layer_) {
947 ok = ok && WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_);
951 ok = VP8EmitTokens(&enc->tokens_, enc->parts_ + 0,
960 int VP8EncTokenLoop(VP8Encoder* const enc) {
961 (void)enc;