Lines Matching refs:it

53 static void PrintBlockInfo(const VP8EncIterator* const it,
56 const int is_i16 = (it->mb_->type_ == 1);
60 for (i = 0; i < 16; ++i) printf("%3d ", it->yuv_in_[i + j * BPS]);
62 for (i = 0; i < 16; ++i) printf("%3d ", it->yuv_out_[i + j * BPS]);
65 printf("%1d ", abs(it->yuv_out_[i + j * BPS] - it->yuv_in_[i + j * BPS]));
353 // Replicate the trailing segment infos (it's mostly cosmetics)
389 // We map it to the safe maximal range of MAX/MIN_DQ_UV for dq_uv.
394 // and make it safe.
427 void VP8MakeLuma16Preds(const VP8EncIterator* const it) {
428 const uint8_t* const left = it->x_ ? it->y_left_ : NULL;
429 const uint8_t* const top = it->y_ ? it->y_top_ : NULL;
430 VP8EncPredLuma16(it->yuv_p_, left, top);
433 void VP8MakeChroma8Preds(const VP8EncIterator* const it) {
434 const uint8_t* const left = it->x_ ? it->u_left_ : NULL;
435 const uint8_t* const top = it->y_ ? it->uv_top_ : NULL;
436 VP8EncPredChroma8(it->yuv_p_, left, top);
439 void VP8MakeIntra4Preds(const VP8EncIterator* const it) {
440 VP8EncPredLuma4(it->yuv_p_, it->i4_top_);
603 // note: it's important to take sign of the _original_ coeff,
654 // Examine node assuming it's a non-terminal one.
716 static int ReconstructIntra16(VP8EncIterator* const it,
720 const VP8Encoder* const enc = it->enc_;
721 const uint8_t* const ref = it->yuv_p_ + VP8I16ModeOffsets[mode];
722 const uint8_t* const src = it->yuv_in_ + Y_OFF;
723 const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
734 if (DO_TRELLIS_I16 && it->do_trellis_) {
736 VP8IteratorNzToBytes(it);
739 const int ctx = it->top_nz_[x] + it->left_nz_[y];
743 it->top_nz_[x] = it->left_nz_[y] = non_zero;
767 static int ReconstructIntra4(VP8EncIterator* const it,
772 const VP8Encoder* const enc = it->enc_;
773 const uint8_t* const ref = it->yuv_p_ + VP8I4ModeOffsets[mode];
774 const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
779 if (DO_TRELLIS_I4 && it->do_trellis_) {
780 const int x = it->i4_ & 3, y = it->i4_ >> 2;
781 const int ctx = it->top_nz_[x] + it->left_nz_[y];
791 static int ReconstructUV(VP8EncIterator* const it, VP8ModeScore* const rd,
793 const VP8Encoder* const enc = it->enc_;
794 const uint8_t* const ref = it->yuv_p_ + VP8UVModeOffsets[mode];
795 const uint8_t* const src = it->yuv_in_ + U_OFF;
796 const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
804 if (DO_TRELLIS_UV && it->do_trellis_) {
809 const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
813 it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = non_zero;
851 static void SwapOut(VP8EncIterator* const it) {
852 SwapPtr(&it->yuv_out_, &it->yuv_out2_);
868 static void PickBestIntra16(VP8EncIterator* const it, VP8ModeScore* const rd) {
870 VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_];
873 const uint8_t* const src = it->yuv_in_ + Y_OFF;
879 uint8_t* const tmp_dst = it->yuv_out2_ + Y_OFF; // scratch buffer
883 nz = ReconstructIntra16(it, &rd16, tmp_dst, mode);
890 rd16.R = VP8GetCostLuma16(it, &rd16);
905 SwapOut(it);
909 VP8SetIntra16Mode(it, rd->mode_i16);
922 static const uint16_t* GetCostModeI4(VP8EncIterator* const it,
924 const int preds_w = it->enc_->preds_w_;
925 const int x = (it->i4_ & 3), y = it->i4_ >> 2;
926 const int left = (x == 0) ? it->preds_[y * preds_w - 1] : modes[it->i4_ - 1];
927 const int top = (y == 0) ? it->preds_[-preds_w + x] : modes[it->i4_ - 4];
931 static int PickBestIntra4(VP8EncIterator* const it, VP8ModeScore* const rd) {
932 const VP8Encoder* const enc = it->enc_;
933 const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
936 const uint8_t* const src0 = it->yuv_in_ + Y_OFF;
937 uint8_t* const best_blocks = it->yuv_out2_ + Y_OFF;
948 VP8IteratorStartI4(it);
954 const uint8_t* const src = src0 + VP8Scan[it->i4_];
955 const uint16_t* const mode_costs = GetCostModeI4(it, rd->modes_i4);
956 uint8_t* best_block = best_blocks + VP8Scan[it->i4_];
957 uint8_t* tmp_dst = it->yuv_p_ + I4TMP; // scratch buffer.
960 VP8MakeIntra4Preds(it);
967 ReconstructIntra4(it, tmp_levels, src, tmp_dst, mode) << it->i4_;
975 rd_tmp.R = VP8GetCostLuma4(it, tmp_levels);
985 memcpy(rd_best.y_ac_levels[it->i4_], tmp_levels, sizeof(tmp_levels));
998 if (best_block != best_blocks + VP8Scan[it->i4_]) {
999 VP8Copy4x4(best_block, best_blocks + VP8Scan[it->i4_]);
1001 rd->modes_i4[it->i4_] = best_mode;
1002 it->top_nz_[it->i4_ & 3] = it->left_nz_[it->i4_ >> 2] = (rd_i4.nz ? 1 : 0);
1003 } while (VP8IteratorRotateI4(it, best_blocks));
1007 VP8SetIntra4Mode(it, rd->modes_i4);
1008 SwapOut(it);
1015 static void PickBestUV(VP8EncIterator* const it, VP8ModeScore* const rd) {
1017 const VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_];
1019 const uint8_t* const src = it->yuv_in_ + U_OFF;
1020 uint8_t* const tmp_dst = it->yuv_out2_ + U_OFF; // scratch buffer
1021 uint8_t* const dst0 = it->yuv_out_ + U_OFF;
1031 rd_uv.nz = ReconstructUV(it, &rd_uv, tmp_dst, mode);
1035 rd_uv.SD = 0; // TODO: should we call TDisto? it tends to flatten areas.
1037 rd_uv.R = VP8GetCostUV(it, &rd_uv);
1050 VP8SetIntraUVMode(it, rd->mode_uv);
1057 static void SimpleQuantize(VP8EncIterator* const it, VP8ModeScore* const rd) {
1058 const VP8Encoder* const enc = it->enc_;
1059 const int is_i16 = (it->mb_->type_ == 1);
1063 nz = ReconstructIntra16(it, rd, it->yuv_out_ + Y_OFF, it->preds_[0]);
1065 VP8IteratorStartI4(it);
1068 it->preds_[(it->i4_ & 3) + (it->i4_ >> 2) * enc->preds_w_];
1069 const uint8_t* const src = it->yuv_in_ + Y_OFF + VP8Scan[it->i4_];
1070 uint8_t* const dst = it->yuv_out_ + Y_OFF + VP8Scan[it->i4_];
1071 VP8MakeIntra4Preds(it);
1072 nz |= ReconstructIntra4(it, rd->y_ac_levels[it->i4_],
1073 src, dst, mode) << it->i4_;
1074 } while (VP8IteratorRotateI4(it, it->yuv_out_ + Y_OFF));
1077 nz |= ReconstructUV(it, rd, it->yuv_out_ + U_OFF, it->mb_->uv_mode_);
1082 static void DistoRefine(VP8EncIterator* const it, int try_both_i4_i16) {
1083 const int is_i16 = (it->mb_->type_ == 1);
1090 const uint8_t* const ref = it->yuv_p_ + VP8I16ModeOffsets[mode];
1091 const uint8_t* const src = it->yuv_in_ + Y_OFF;
1098 VP8SetIntra16Mode(it, best_mode);
1102 // We don't evaluate the rate here, but just account for it through a
1106 VP8IteratorStartI4(it);
1111 const uint8_t* const src = it->yuv_in_ + Y_OFF + VP8Scan[it->i4_];
1115 VP8MakeIntra4Preds(it);
1117 const uint8_t* const ref = it->yuv_p_ + VP8I4ModeOffsets[mode];
1124 modes_i4[it->i4_] = best_sub_mode;
1127 } while (VP8IteratorRotateI4(it, it->yuv_in_ + Y_OFF));
1129 VP8SetIntra4Mode(it, modes_i4);
1137 int VP8Decimate(VP8EncIterator* const it, VP8ModeScore* const rd,
1140 const int method = it->enc_->method_;
1146 VP8MakeLuma16Preds(it);
1147 VP8MakeChroma8Preds(it);
1150 it->do_trellis_ = (rd_opt >= RD_OPT_TRELLIS_ALL);
1151 PickBestIntra16(it, rd);
1153 PickBestIntra4(it, rd);
1155 PickBestUV(it, rd);
1157 it->do_trellis_ = 1;
1158 SimpleQuantize(it, rd);
1163 DistoRefine(it, (method >= 2));
1164 SimpleQuantize(it, rd);
1167 VP8SetSkip(it, is_skipped);