Lines Matching refs:enc
25 static int IsVP8XNeeded(const VP8Encoder* const enc) { in IsVP8XNeeded() argument
26 return !!enc->has_alpha_; // Currently the only case when VP8X is needed. in IsVP8XNeeded()
39 static WebPEncodingError PutRIFFHeader(const VP8Encoder* const enc, in PutRIFFHeader() argument
41 const WebPPicture* const pic = enc->pic_; in PutRIFFHeader()
53 static WebPEncodingError PutVP8XHeader(const VP8Encoder* const enc) { in PutVP8XHeader() argument
54 const WebPPicture* const pic = enc->pic_; in PutVP8XHeader()
60 assert(IsVP8XNeeded(enc)); in PutVP8XHeader()
64 if (enc->has_alpha_) { in PutVP8XHeader()
78 static WebPEncodingError PutAlphaChunk(const VP8Encoder* const enc) { in PutAlphaChunk() argument
79 const WebPPicture* const pic = enc->pic_; in PutAlphaChunk()
84 assert(enc->has_alpha_); in PutAlphaChunk()
87 PutLE32(alpha_chunk_hdr + TAG_SIZE, enc->alpha_data_size_); in PutAlphaChunk()
93 if (!pic->writer(enc->alpha_data_, enc->alpha_data_size_, pic)) { in PutAlphaChunk()
98 if ((enc->alpha_data_size_ & 1) && !PutPaddingByte(pic)) { in PutAlphaChunk()
151 static int PutWebPHeaders(const VP8Encoder* const enc, size_t size0, in PutWebPHeaders() argument
153 WebPPicture* const pic = enc->pic_; in PutWebPHeaders()
157 err = PutRIFFHeader(enc, riff_size); in PutWebPHeaders()
161 if (IsVP8XNeeded(enc)) { in PutWebPHeaders()
162 err = PutVP8XHeader(enc); in PutWebPHeaders()
167 if (enc->has_alpha_) { in PutWebPHeaders()
168 err = PutAlphaChunk(enc); in PutWebPHeaders()
177 err = PutVP8FrameHeader(pic, enc->profile_, size0); in PutWebPHeaders()
190 const VP8Encoder* const enc) { in PutSegmentHeader() argument
191 const VP8SegmentHeader* const hdr = &enc->segment_hdr_; in PutSegmentHeader()
192 const VP8Proba* const proba = &enc->proba_; in PutSegmentHeader()
202 VP8PutSignedValue(bw, enc->dqm_[s].quant_, 7); in PutSegmentHeader()
205 VP8PutSignedValue(bw, enc->dqm_[s].fstrength_, 6); in PutSegmentHeader()
240 const VP8Encoder* const enc) { in PutQuant() argument
241 VP8PutValue(bw, enc->base_quant_, 7); in PutQuant()
242 VP8PutSignedValue(bw, enc->dq_y1_dc_, 4); in PutQuant()
243 VP8PutSignedValue(bw, enc->dq_y2_dc_, 4); in PutQuant()
244 VP8PutSignedValue(bw, enc->dq_y2_ac_, 4); in PutQuant()
245 VP8PutSignedValue(bw, enc->dq_uv_dc_, 4); in PutQuant()
246 VP8PutSignedValue(bw, enc->dq_uv_ac_, 4); in PutQuant()
250 static int EmitPartitionsSize(const VP8Encoder* const enc, in EmitPartitionsSize() argument
254 for (p = 0; p < enc->num_parts_ - 1; ++p) { in EmitPartitionsSize()
255 const size_t part_size = VP8BitWriterSize(enc->parts_ + p); in EmitPartitionsSize()
272 static int WriteExtensions(VP8Encoder* const enc) { in WriteExtensions() argument
274 VP8BitWriter* const bw = &enc->bw_; in WriteExtensions()
275 WebPPicture* const pic = enc->pic_; in WriteExtensions()
278 PutLE24(buffer + 0, enc->layer_data_size_); in WriteExtensions()
279 buffer[3] = enc->pic_->colorspace & WEBP_CSP_UV_MASK; in WriteExtensions()
280 if (enc->layer_data_size_ > 0) { in WriteExtensions()
281 assert(enc->use_layer_); in WriteExtensions()
283 if (!VP8BitWriterAppend(&enc->parts_[enc->num_parts_ - 1], in WriteExtensions()
284 enc->layer_data_, enc->layer_data_size_)) { in WriteExtensions()
300 static size_t GeneratePartition0(VP8Encoder* const enc) { in GeneratePartition0() argument
301 VP8BitWriter* const bw = &enc->bw_; in GeneratePartition0()
302 const int mb_size = enc->mb_w_ * enc->mb_h_; in GeneratePartition0()
305 const int need_extensions = enc->use_layer_; in GeneratePartition0()
317 PutSegmentHeader(bw, enc); in GeneratePartition0()
318 PutFilterHeader(bw, &enc->filter_hdr_); in GeneratePartition0()
319 VP8PutValue(bw, enc->num_parts_ == 8 ? 3 : in GeneratePartition0()
320 enc->num_parts_ == 4 ? 2 : in GeneratePartition0()
321 enc->num_parts_ == 2 ? 1 : 0, 2); in GeneratePartition0()
322 PutQuant(bw, enc); in GeneratePartition0()
324 VP8WriteProbas(bw, &enc->proba_); in GeneratePartition0()
326 VP8CodeIntraModes(enc); in GeneratePartition0()
330 if (need_extensions && !WriteExtensions(enc)) { in GeneratePartition0()
337 if (enc->pic_->stats) { in GeneratePartition0()
338 enc->pic_->stats->header_bytes[0] = (int)((pos2 - pos1 + 7) >> 3); in GeneratePartition0()
339 enc->pic_->stats->header_bytes[1] = (int)((pos3 - pos2 + 7) >> 3); in GeneratePartition0()
340 enc->pic_->stats->alpha_data_size = (int)enc->alpha_data_size_; in GeneratePartition0()
341 enc->pic_->stats->layer_data_size = (int)enc->layer_data_size_; in GeneratePartition0()
346 void VP8EncFreeBitWriters(VP8Encoder* const enc) { in VP8EncFreeBitWriters() argument
348 VP8BitWriterWipeOut(&enc->bw_); in VP8EncFreeBitWriters()
349 for (p = 0; p < enc->num_parts_; ++p) { in VP8EncFreeBitWriters()
350 VP8BitWriterWipeOut(enc->parts_ + p); in VP8EncFreeBitWriters()
354 int VP8EncWrite(VP8Encoder* const enc) { in VP8EncWrite() argument
355 WebPPicture* const pic = enc->pic_; in VP8EncWrite()
356 VP8BitWriter* const bw = &enc->bw_; in VP8EncWrite()
358 const int percent_per_part = task_percent / enc->num_parts_; in VP8EncWrite()
359 const int final_percent = enc->percent_ + task_percent; in VP8EncWrite()
365 ok = !!GeneratePartition0(enc); in VP8EncWrite()
370 3 * (enc->num_parts_ - 1); in VP8EncWrite()
371 for (p = 0; p < enc->num_parts_; ++p) { in VP8EncWrite()
372 vp8_size += VP8BitWriterSize(enc->parts_ + p); in VP8EncWrite()
380 if (IsVP8XNeeded(enc)) { // Add size for: VP8X header + data. in VP8EncWrite()
383 if (enc->has_alpha_) { // Add size for: ALPH header + data. in VP8EncWrite()
384 const uint32_t padded_alpha_size = enc->alpha_data_size_ + in VP8EncWrite()
385 (enc->alpha_data_size_ & 1); in VP8EncWrite()
397 ok = ok && PutWebPHeaders(enc, size0, vp8_size, riff_size) in VP8EncWrite()
399 && EmitPartitionsSize(enc, pic); in VP8EncWrite()
404 for (p = 0; p < enc->num_parts_; ++p) { in VP8EncWrite()
405 const uint8_t* const buf = VP8BitWriterBuf(enc->parts_ + p); in VP8EncWrite()
406 const size_t size = VP8BitWriterSize(enc->parts_ + p); in VP8EncWrite()
409 VP8BitWriterWipeOut(enc->parts_ + p); // will free the internal buffer. in VP8EncWrite()
410 ok = ok && WebPReportProgress(pic, enc->percent_ + percent_per_part, in VP8EncWrite()
411 &enc->percent_); in VP8EncWrite()
419 enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size); in VP8EncWrite()
420 ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_); in VP8EncWrite()