Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: third_party/libwebp/enc/syntax.c

Issue 1546003002: libwebp: update to 0.5.0 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase around clang-cl fix Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 Google Inc. All Rights Reserved. 1 // Copyright 2011 Google Inc. All Rights Reserved.
2 // 2 //
3 // Use of this source code is governed by a BSD-style license 3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the COPYING file in the root of the source 4 // that can be found in the COPYING file in the root of the source
5 // tree. An additional intellectual property rights grant can be found 5 // tree. An additional intellectual property rights grant can be found
6 // in the file PATENTS. All contributing project authors may 6 // in the file PATENTS. All contributing project authors may
7 // be found in the AUTHORS file in the root of the source tree. 7 // be found in the AUTHORS file in the root of the source tree.
8 // ----------------------------------------------------------------------------- 8 // -----------------------------------------------------------------------------
9 // 9 //
10 // Header syntax writing 10 // Header syntax writing
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 return 1; 179 return 1;
180 180
181 // Error. 181 // Error.
182 Error: 182 Error:
183 return WebPEncodingSetError(pic, err); 183 return WebPEncodingSetError(pic, err);
184 } 184 }
185 185
186 // Segmentation header 186 // Segmentation header
187 static void PutSegmentHeader(VP8BitWriter* const bw, 187 static void PutSegmentHeader(VP8BitWriter* const bw,
188 const VP8Encoder* const enc) { 188 const VP8Encoder* const enc) {
189 const VP8SegmentHeader* const hdr = &enc->segment_hdr_; 189 const VP8EncSegmentHeader* const hdr = &enc->segment_hdr_;
190 const VP8Proba* const proba = &enc->proba_; 190 const VP8EncProba* const proba = &enc->proba_;
191 if (VP8PutBitUniform(bw, (hdr->num_segments_ > 1))) { 191 if (VP8PutBitUniform(bw, (hdr->num_segments_ > 1))) {
192 // We always 'update' the quant and filter strength values 192 // We always 'update' the quant and filter strength values
193 const int update_data = 1; 193 const int update_data = 1;
194 int s; 194 int s;
195 VP8PutBitUniform(bw, hdr->update_map_); 195 VP8PutBitUniform(bw, hdr->update_map_);
196 if (VP8PutBitUniform(bw, update_data)) { 196 if (VP8PutBitUniform(bw, update_data)) {
197 // we always use absolute values, not relative ones 197 // we always use absolute values, not relative ones
198 VP8PutBitUniform(bw, 1); // (segment_feature_mode = 1. Paragraph 9.3.) 198 VP8PutBitUniform(bw, 1); // (segment_feature_mode = 1. Paragraph 9.3.)
199 for (s = 0; s < NUM_MB_SEGMENTS; ++s) { 199 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
200 VP8PutSignedValue(bw, enc->dqm_[s].quant_, 7); 200 VP8PutSignedBits(bw, enc->dqm_[s].quant_, 7);
201 } 201 }
202 for (s = 0; s < NUM_MB_SEGMENTS; ++s) { 202 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
203 VP8PutSignedValue(bw, enc->dqm_[s].fstrength_, 6); 203 VP8PutSignedBits(bw, enc->dqm_[s].fstrength_, 6);
204 } 204 }
205 } 205 }
206 if (hdr->update_map_) { 206 if (hdr->update_map_) {
207 for (s = 0; s < 3; ++s) { 207 for (s = 0; s < 3; ++s) {
208 if (VP8PutBitUniform(bw, (proba->segments_[s] != 255u))) { 208 if (VP8PutBitUniform(bw, (proba->segments_[s] != 255u))) {
209 VP8PutValue(bw, proba->segments_[s], 8); 209 VP8PutBits(bw, proba->segments_[s], 8);
210 } 210 }
211 } 211 }
212 } 212 }
213 } 213 }
214 } 214 }
215 215
216 // Filtering parameters header 216 // Filtering parameters header
217 static void PutFilterHeader(VP8BitWriter* const bw, 217 static void PutFilterHeader(VP8BitWriter* const bw,
218 const VP8FilterHeader* const hdr) { 218 const VP8EncFilterHeader* const hdr) {
219 const int use_lf_delta = (hdr->i4x4_lf_delta_ != 0); 219 const int use_lf_delta = (hdr->i4x4_lf_delta_ != 0);
220 VP8PutBitUniform(bw, hdr->simple_); 220 VP8PutBitUniform(bw, hdr->simple_);
221 VP8PutValue(bw, hdr->level_, 6); 221 VP8PutBits(bw, hdr->level_, 6);
222 VP8PutValue(bw, hdr->sharpness_, 3); 222 VP8PutBits(bw, hdr->sharpness_, 3);
223 if (VP8PutBitUniform(bw, use_lf_delta)) { 223 if (VP8PutBitUniform(bw, use_lf_delta)) {
224 // '0' is the default value for i4x4_lf_delta_ at frame #0. 224 // '0' is the default value for i4x4_lf_delta_ at frame #0.
225 const int need_update = (hdr->i4x4_lf_delta_ != 0); 225 const int need_update = (hdr->i4x4_lf_delta_ != 0);
226 if (VP8PutBitUniform(bw, need_update)) { 226 if (VP8PutBitUniform(bw, need_update)) {
227 // we don't use ref_lf_delta => emit four 0 bits 227 // we don't use ref_lf_delta => emit four 0 bits
228 VP8PutValue(bw, 0, 4); 228 VP8PutBits(bw, 0, 4);
229 // we use mode_lf_delta for i4x4 229 // we use mode_lf_delta for i4x4
230 VP8PutSignedValue(bw, hdr->i4x4_lf_delta_, 6); 230 VP8PutSignedBits(bw, hdr->i4x4_lf_delta_, 6);
231 VP8PutValue(bw, 0, 3); // all others unused 231 VP8PutBits(bw, 0, 3); // all others unused
232 } 232 }
233 } 233 }
234 } 234 }
235 235
236 // Nominal quantization parameters 236 // Nominal quantization parameters
237 static void PutQuant(VP8BitWriter* const bw, 237 static void PutQuant(VP8BitWriter* const bw,
238 const VP8Encoder* const enc) { 238 const VP8Encoder* const enc) {
239 VP8PutValue(bw, enc->base_quant_, 7); 239 VP8PutBits(bw, enc->base_quant_, 7);
240 VP8PutSignedValue(bw, enc->dq_y1_dc_, 4); 240 VP8PutSignedBits(bw, enc->dq_y1_dc_, 4);
241 VP8PutSignedValue(bw, enc->dq_y2_dc_, 4); 241 VP8PutSignedBits(bw, enc->dq_y2_dc_, 4);
242 VP8PutSignedValue(bw, enc->dq_y2_ac_, 4); 242 VP8PutSignedBits(bw, enc->dq_y2_ac_, 4);
243 VP8PutSignedValue(bw, enc->dq_uv_dc_, 4); 243 VP8PutSignedBits(bw, enc->dq_uv_dc_, 4);
244 VP8PutSignedValue(bw, enc->dq_uv_ac_, 4); 244 VP8PutSignedBits(bw, enc->dq_uv_ac_, 4);
245 } 245 }
246 246
247 // Partition sizes 247 // Partition sizes
248 static int EmitPartitionsSize(const VP8Encoder* const enc, 248 static int EmitPartitionsSize(const VP8Encoder* const enc,
249 WebPPicture* const pic) { 249 WebPPicture* const pic) {
250 uint8_t buf[3 * (MAX_NUM_PARTITIONS - 1)]; 250 uint8_t buf[3 * (MAX_NUM_PARTITIONS - 1)];
251 int p; 251 int p;
252 for (p = 0; p < enc->num_parts_ - 1; ++p) { 252 for (p = 0; p < enc->num_parts_ - 1; ++p) {
253 const size_t part_size = VP8BitWriterSize(enc->parts_ + p); 253 const size_t part_size = VP8BitWriterSize(enc->parts_ + p);
254 if (part_size >= VP8_MAX_PARTITION_SIZE) { 254 if (part_size >= VP8_MAX_PARTITION_SIZE) {
(...skipping 15 matching lines...) Expand all
270 270
271 pos1 = VP8BitWriterPos(bw); 271 pos1 = VP8BitWriterPos(bw);
272 if (!VP8BitWriterInit(bw, mb_size * 7 / 8)) { // ~7 bits per macroblock 272 if (!VP8BitWriterInit(bw, mb_size * 7 / 8)) { // ~7 bits per macroblock
273 return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); 273 return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY);
274 } 274 }
275 VP8PutBitUniform(bw, 0); // colorspace 275 VP8PutBitUniform(bw, 0); // colorspace
276 VP8PutBitUniform(bw, 0); // clamp type 276 VP8PutBitUniform(bw, 0); // clamp type
277 277
278 PutSegmentHeader(bw, enc); 278 PutSegmentHeader(bw, enc);
279 PutFilterHeader(bw, &enc->filter_hdr_); 279 PutFilterHeader(bw, &enc->filter_hdr_);
280 VP8PutValue(bw, enc->num_parts_ == 8 ? 3 : 280 VP8PutBits(bw, enc->num_parts_ == 8 ? 3 :
281 enc->num_parts_ == 4 ? 2 : 281 enc->num_parts_ == 4 ? 2 :
282 enc->num_parts_ == 2 ? 1 : 0, 2); 282 enc->num_parts_ == 2 ? 1 : 0, 2);
283 PutQuant(bw, enc); 283 PutQuant(bw, enc);
284 VP8PutBitUniform(bw, 0); // no proba update 284 VP8PutBitUniform(bw, 0); // no proba update
285 VP8WriteProbas(bw, &enc->proba_); 285 VP8WriteProbas(bw, &enc->proba_);
286 pos2 = VP8BitWriterPos(bw); 286 pos2 = VP8BitWriterPos(bw);
287 VP8CodeIntraModes(enc); 287 VP8CodeIntraModes(enc);
288 VP8BitWriterFinish(bw); 288 VP8BitWriterFinish(bw);
289 289
290 pos3 = VP8BitWriterPos(bw); 290 pos3 = VP8BitWriterPos(bw);
291 291
292 if (enc->pic_->stats) { 292 if (enc->pic_->stats) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 ok = PutPaddingByte(pic); 374 ok = PutPaddingByte(pic);
375 } 375 }
376 376
377 enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size); 377 enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size);
378 ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_); 378 ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_);
379 return ok; 379 return ok;
380 } 380 }
381 381
382 //------------------------------------------------------------------------------ 382 //------------------------------------------------------------------------------
383 383
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698