Home | History | Annotate | Download | only in enc

Lines Matching refs:it

22 static void InitLeft(VP8EncIterator* const it) {
23 it->y_left_[-1] = it->u_left_[-1] = it->v_left_[-1] =
24 (it->y_ > 0) ? 129 : 127;
25 memset(it->y_left_, 129, 16);
26 memset(it->u_left_, 129, 8);
27 memset(it->v_left_, 129, 8);
28 it->left_nz_[8] = 0;
31 static void InitTop(VP8EncIterator* const it) {
32 const VP8Encoder* const enc = it->enc_;
38 void VP8IteratorSetRow(VP8EncIterator* const it, int y) {
39 VP8Encoder* const enc = it->enc_;
40 it->x_ = 0;
41 it->y_ = y;
42 it->bw_ = &enc->parts_[y & (enc->num_parts_ - 1)];
43 it->preds_ = enc->preds_ + y * 4 * enc->preds_w_;
44 it->nz_ = enc->nz_;
45 it->mb_ = enc->mb_info_ + y * enc->mb_w_;
46 it->y_top_ = enc->y_top_;
47 it->uv_top_ = enc->uv_top_;
48 InitLeft(it);
51 void VP8IteratorReset(VP8EncIterator* const it) {
52 VP8Encoder* const enc = it->enc_;
53 VP8IteratorSetRow(it, 0);
54 VP8IteratorSetCountDown(it, enc->mb_w_ * enc->mb_h_); // default
55 InitTop(it);
56 memset(it->bit_count_, 0, sizeof(it->bit_count_));
57 it->do_trellis_ = 0;
60 void VP8IteratorSetCountDown(VP8EncIterator* const it, int count_down) {
61 it->count_down_ = it->count_down0_ = count_down;
64 int VP8IteratorIsDone(const VP8EncIterator* const it) {
65 return (it->count_down_ <= 0);
68 void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it) {
69 it->enc_ = enc;
70 it->yuv_in_ = (uint8_t*)WEBP_ALIGN(it->yuv_mem_);
71 it->yuv_out_ = it->yuv_in_ + YUV_SIZE_ENC;
72 it->yuv_out2_ = it->yuv_out_ + YUV_SIZE_ENC;
73 it->yuv_p_ = it->yuv_out2_ + YUV_SIZE_ENC;
74 it->lf_stats_ = enc->lf_stats_;
75 it->percent0_ = enc->percent_;
76 it->y_left_ = (uint8_t*)WEBP_ALIGN(it->yuv_left_mem_ + 1);
77 it->u_left_ = it->y_left_ + 16 + 16;
78 it->v_left_ = it->u_left_ + 16;
79 VP8IteratorReset(it);
82 int VP8IteratorProgress(const VP8EncIterator* const it, int delta) {
83 VP8Encoder* const enc = it->enc_;
85 const int done = it->count_down0_ - it->count_down_;
86 const int percent = (it->count_down0_ <= 0)
87 ? it->percent0_
88 : it->percent0_ + delta * done / it->count_down0_;
124 void VP8IteratorImport(VP8EncIterator* const it, uint8_t* tmp_32) {
125 const VP8Encoder* const enc = it->enc_;
126 const int x = it->x_, y = it->y_;
136 ImportBlock(ysrc, pic->y_stride, it->yuv_in_ + Y_OFF_ENC, w, h, 16);
137 ImportBlock(usrc, pic->uv_stride, it->yuv_in_ + U_OFF_ENC, uv_w, uv_h, 8);
138 ImportBlock(vsrc, pic->uv_stride, it->yuv_in_ + V_OFF_ENC, uv_w, uv_h, 8);
144 InitLeft(it);
147 it->y_left_[-1] = it->u_left_[-1] = it->v_left_[-1] = 127;
149 it->y_left_[-1] = ysrc[- 1 - pic->y_stride];
150 it->u_left_[-1] = usrc[- 1 - pic->uv_stride];
151 it->v_left_[-1] = vsrc[- 1 - pic->uv_stride];
153 ImportLine(ysrc - 1, pic->y_stride, it->y_left_, h, 16);
154 ImportLine(usrc - 1, pic->uv_stride, it->u_left_, uv_h, 8);
155 ImportLine(vsrc - 1, pic->uv_stride, it->v_left_, uv_h, 8);
158 it->y_top_ = tmp_32 + 0;
159 it->uv_top_ = tmp_32 + 16;
181 void VP8IteratorExport(const VP8EncIterator* const it) {
182 const VP8Encoder* const enc = it->enc_;
184 const int x = it->x_, y = it->y_;
185 const uint8_t* const ysrc = it->yuv_out_ + Y_OFF_ENC;
186 const uint8_t* const usrc = it->yuv_out_ + U_OFF_ENC;
187 const uint8_t* const vsrc = it->yuv_out_ + V_OFF_ENC;
227 void VP8IteratorNzToBytes(VP8EncIterator* const it) {
228 const int tnz = it->nz_[0], lnz = it->nz_[-1];
229 int* const top_nz = it->top_nz_;
230 int* const left_nz = it->left_nz_;
260 void VP8IteratorBytesToNz(VP8EncIterator* const it) {
262 const int* const top_nz = it->top_nz_;
263 const int* const left_nz = it->left_nz_;
275 *it->nz_ = nz;
283 void VP8IteratorSaveBoundary(VP8EncIterator* const it) {
284 VP8Encoder* const enc = it->enc_;
285 const int x = it->x_, y = it->y_;
286 const uint8_t* const ysrc = it->yuv_out_ + Y_OFF_ENC;
287 const uint8_t* const uvsrc = it->yuv_out_ + U_OFF_ENC;
291 it->y_left_[i] = ysrc[15 + i * BPS];
294 it->u_left_[i] = uvsrc[7 + i * BPS];
295 it->v_left_[i] = uvsrc[15 + i * BPS];
298 it->y_left_[-1] = it->y_top_[15];
299 it->u_left_[-1] = it->uv_top_[0 + 7];
300 it->v_left_[-1] = it->uv_top_[8 + 7];
303 memcpy(it->y_top_, ysrc + 15 * BPS, 16);
304 memcpy(it->uv_top_, uvsrc + 7 * BPS, 8 + 8);
308 int VP8IteratorNext(VP8EncIterator* const it) {
309 if (++it->x_ == it->enc_->mb_w_) {
310 VP8IteratorSetRow(it, ++it->y_);
312 it->preds_ += 4;
313 it->mb_ += 1;
314 it->nz_ += 1;
315 it->y_top_ += 16;
316 it->uv_top_ += 16;
318 return (0 < --it->count_down_);
324 void VP8SetIntra16Mode(const VP8EncIterator* const it, int mode) {
325 uint8_t* preds = it->preds_;
329 preds += it->enc_->preds_w_;
331 it->mb_->type_ = 1;
334 void VP8SetIntra4Mode(const VP8EncIterator* const it, const uint8_t* modes) {
335 uint8_t* preds = it->preds_;
339 preds += it->enc_->preds_w_;
342 it->mb_->type_ = 0;
345 void VP8SetIntraUVMode(const VP8EncIterator* const it, int mode) {
346 it->mb_->uv_mode_ = mode;
349 void VP8SetSkip(const VP8EncIterator* const it, int skip) {
350 it->mb_->skip_ = skip;
353 void VP8SetSegment(const VP8EncIterator* const it, int segment) {
354 it->mb_->segment_ = segment;
396 void VP8IteratorStartI4(VP8EncIterator* const it) {
397 const VP8Encoder* const enc = it->enc_;
400 it->i4_ = 0; // first 4x4 sub-block
401 it->i4_top_ = it->i4_boundary_ + VP8TopLeftI4[0];
405 it->i4_boundary_[i] = it->y_left_[15 - i];
408 it->i4_boundary_[17 + i] = it->y_top_[i];
411 if (it->x_ < enc->mb_w_ - 1) {
413 it->i4_boundary_[17 + i] = it->y_top_[i];
417 it->i4_boundary_[17 + i] = it->i4_boundary_[17 + 15];
420 VP8IteratorNzToBytes(it); // import the non-zero context
423 int VP8IteratorRotateI4(VP8EncIterator* const it,
425 const uint8_t* const blk = yuv_out + VP8Scan[it->i4_];
426 uint8_t* const top = it->i4_top_;
433 if ((it->i4_ & 3) != 3) { // if not on the right sub-blocks #3, #7, #11, #15
443 ++it->i4_;
444 if (it->i4_ == 16) { // we're done
448 it->i4_top_ = it->i4_boundary_ + VP8TopLeftI4[it->i4_];