ABitReader.h revision cda17c606b0fe3ccda4dc68a6d43882410ea2462
1cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber/* 2cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * 4cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * you may not use this file except in compliance with the License. 6cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * You may obtain a copy of the License at 7cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * 8cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * 10cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * Unless required by applicable law or agreed to in writing, software 11cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * See the License for the specific language governing permissions and 14cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber * limitations under the License. 15cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber */ 16cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 17cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#ifndef A_BIT_READER_H_ 18cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#define A_BIT_READER_H_ 20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/foundation/ABase.h> 22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <sys/types.h> 24cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <stdint.h> 25cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 26cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Hubernamespace android { 27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 28cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct ABitReader { 29cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber ABitReader(const uint8_t *data, size_t size); 30cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 31cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber uint32_t getBits(size_t n); 32cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber void skipBits(size_t n); 33cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 34cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber size_t numBitsLeft() const; 35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber const uint8_t *data() const; 37cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate: 39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber const uint8_t *mData; 40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber size_t mSize; 41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber uint32_t mReservoir; // left-aligned bits 43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber size_t mNumBitsLeft; 44cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 45cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber void fillReservoir(); 46cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber void putBits(uint32_t x, size_t n); 47cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 48cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ABitReader); 49cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}; 50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 51cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber} // namespace android 52cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 53cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif // A_BIT_READER_H_ 54