Lines Matching refs:enc

68 static void ResetSegmentHeader(VP8Encoder* const enc) {
69 VP8SegmentHeader* const hdr = &enc->segment_hdr_;
70 hdr->num_segments_ = enc->config_->segments;
75 static void ResetFilterHeader(VP8Encoder* const enc) {
76 VP8FilterHeader* const hdr = &enc->filter_hdr_;
83 static void ResetBoundaryPredictions(VP8Encoder* const enc) {
87 uint8_t* const top = enc->preds_ - enc->preds_w_;
88 uint8_t* const left = enc->preds_ - 1;
89 for (i = -1; i < 4 * enc->mb_w_; ++i) {
92 for (i = 0; i < 4 * enc->mb_h_; ++i) {
93 left[i * enc->preds_w_] = B_DC_PRED;
95 enc->nz_[-1] = 0; // constant
121 static void MapConfigToTools(VP8Encoder* const enc) {
122 const WebPConfig* const config = enc->config_;
125 enc->method_ = method;
126 enc->rd_opt_level_ = (method >= 6) ? RD_OPT_TRELLIS_ALL
130 enc->max_i4_header_bits_ =
134 enc->thread_level_ = config->thread_level;
136 enc->do_search_ = (config->target_size > 0 || config->target_PSNR > 0);
139 enc->use_tokens_ = (method >= 3) && !enc->do_search_;
141 if (enc->use_tokens_) {
142 enc->num_parts_ = 1; // doesn't work with multi-partition
187 VP8Encoder* enc;
229 enc = (VP8Encoder*)mem;
230 mem = (uint8_t*)DO_ALIGN(mem + sizeof(*enc));
231 memset(enc, 0, sizeof(*enc));
232 enc->num_parts_ = 1 << config->partitions;
233 enc->mb_w_ = mb_w;
234 enc->mb_h_ = mb_h;
235 enc->preds_w_ = preds_w;
236 enc->yuv_in_ = (uint8_t*)mem;
238 enc->yuv_out_ = (uint8_t*)mem;
240 enc->yuv_out2_ = (uint8_t*)mem;
242 enc->yuv_p_ = (uint8_t*)mem;
244 enc->mb_info_ = (VP8MBInfo*)mem;
246 enc->preds_ = ((uint8_t*)mem) + 1 + enc->preds_w_;
248 enc->nz_ = 1 + (uint32_t*)mem;
250 enc->lf_stats_ = lf_stats_size ? (LFStats*)DO_ALIGN(mem) : NULL;
255 enc->y_top_ = (uint8_t*)mem;
256 enc->uv_top_ = enc->y_top_ + top_stride;
259 enc->y_left_ = (uint8_t*)mem;
261 enc->u_left_ = (uint8_t*)mem;
263 enc->v_left_ = (uint8_t*)mem;
266 enc->config_ = config;
267 enc->profile_ = use_filter ? ((config->filter_type == 1) ? 0 : 1) : 2;
268 enc->pic_ = picture;
269 enc->percent_ = 0;
271 MapConfigToTools(enc);
273 VP8DefaultProbas(enc);
274 ResetSegmentHeader(enc);
275 ResetFilterHeader(enc);
276 ResetBoundaryPredictions(enc);
278 VP8EncInitAlpha(enc);
280 VP8EncInitLayer(enc);
283 VP8TBufferInit(&enc->tokens_);
284 return enc;
287 static int DeleteVP8Encoder(VP8Encoder* enc) {
289 if (enc != NULL) {
290 ok = VP8EncDeleteAlpha(enc);
292 VP8EncDeleteLayer(enc);
294 VP8TBufferClear(&enc->tokens_);
295 free(enc);
306 static void FinalizePSNR(const VP8Encoder* const enc) {
307 WebPAuxStats* stats = enc->pic_->stats;
308 const uint64_t size = enc->sse_count_;
309 const uint64_t* const sse = enc->sse_;
317 static void StoreStats(VP8Encoder* const enc) {
318 WebPAuxStats* const stats = enc->pic_->stats;
322 stats->segment_level[i] = enc->dqm_[i].fstrength_;
323 stats->segment_quant[i] = enc->dqm_[i].quant_;
325 stats->residual_bytes[s][i] = enc->residual_bytes_[s][i];
328 FinalizePSNR(enc);
329 stats->coded_size = enc->coded_size_;
331 stats->block_count[i] = enc->block_count_[i];
334 WebPReportProgress(enc->pic_, 100, &enc->percent_); // done!
377 VP8Encoder* enc = NULL;
383 enc = InitVP8Encoder(config, pic);
384 if (enc == NULL) return 0; // pic->error is already set.
386 ok = VP8EncAnalyze(enc);
389 ok = ok && VP8EncStartAlpha(enc); // possibly done in parallel
390 if (!enc->use_tokens_) {
391 ok = ok && VP8EncLoop(enc);
393 ok = ok && VP8EncTokenLoop(enc);
395 ok = ok && VP8EncFinishAlpha(enc);
397 ok = ok && VP8EncFinishLayer(enc);
400 ok = ok && VP8EncWrite(enc);
401 StoreStats(enc);
403 VP8EncFreeBitWriters(enc);
405 ok &= DeleteVP8Encoder(enc); // must always be called, even if !ok