// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif /* * Copyright (c) 2010, The WebM Project authors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Google, nor the WebM Project, nor the names * of its contributors may be used to endorse or promote products * derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // This file is modified from the dboolhuff.{c,h} from the WebM's libvpx // project. (http://www.webmproject.org/code) // It is used to decode bits from a vp8 stream. #include "media/parsers/vp8_bool_decoder.h" #include <limits.h> #include <algorithm> #include "base/check_op.h" #include "base/numerics/safe_conversions.h" namespace media { #define VP8_BD_VALUE_BIT … static const int kDefaultProbability = …; // 0x80 / 256 = 0.5 // This is meant to be a large, positive constant that can still be efficiently // loaded as an immediate (on platforms like ARM, for example). Even relatively // modest values like 100 would work fine. #define VP8_LOTS_OF_BITS … // The number of leading zeros. static const unsigned char kVp8Norm[256] = …; Vp8BoolDecoder::Vp8BoolDecoder() : … { … } bool Vp8BoolDecoder::Initialize(const uint8_t* data, size_t size) { … } void Vp8BoolDecoder::FillDecoder() { … } int Vp8BoolDecoder::ReadBit(int probability) { … } bool Vp8BoolDecoder::ReadLiteral(size_t num_bits, int* out) { … } bool Vp8BoolDecoder::ReadBool(bool* out, uint8_t probability) { … } bool Vp8BoolDecoder::ReadBool(bool* out) { … } bool Vp8BoolDecoder::ReadLiteralWithSign(size_t num_bits, int* out) { … } size_t Vp8BoolDecoder::BitOffset() { … } uint8_t Vp8BoolDecoder::GetRange() { … } uint8_t Vp8BoolDecoder::GetBottom() { … } inline bool Vp8BoolDecoder::OutOfBuffer() { … } } // namespace media