ABitReader.h revision cda17c606b0fe3ccda4dc68a6d43882410ea2462
14ababd922eac5931e0222862ff082dc29e012816Joe Onorato/*
24ababd922eac5931e0222862ff082dc29e012816Joe Onorato * Copyright (C) 2010 The Android Open Source Project
34ababd922eac5931e0222862ff082dc29e012816Joe Onorato *
44ababd922eac5931e0222862ff082dc29e012816Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
54ababd922eac5931e0222862ff082dc29e012816Joe Onorato * you may not use this file except in compliance with the License.
64ababd922eac5931e0222862ff082dc29e012816Joe Onorato * You may obtain a copy of the License at
74ababd922eac5931e0222862ff082dc29e012816Joe Onorato *
84ababd922eac5931e0222862ff082dc29e012816Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
94ababd922eac5931e0222862ff082dc29e012816Joe Onorato *
104ababd922eac5931e0222862ff082dc29e012816Joe Onorato * Unless required by applicable law or agreed to in writing, software
114ababd922eac5931e0222862ff082dc29e012816Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
124ababd922eac5931e0222862ff082dc29e012816Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134ababd922eac5931e0222862ff082dc29e012816Joe Onorato * See the License for the specific language governing permissions and
144ababd922eac5931e0222862ff082dc29e012816Joe Onorato * limitations under the License.
154ababd922eac5931e0222862ff082dc29e012816Joe Onorato */
164ababd922eac5931e0222862ff082dc29e012816Joe Onorato
174ababd922eac5931e0222862ff082dc29e012816Joe Onorato#ifndef A_BIT_READER_H_
184ababd922eac5931e0222862ff082dc29e012816Joe Onorato
194ababd922eac5931e0222862ff082dc29e012816Joe Onorato#define A_BIT_READER_H_
204ababd922eac5931e0222862ff082dc29e012816Joe Onorato
214ababd922eac5931e0222862ff082dc29e012816Joe Onorato#include <media/stagefright/foundation/ABase.h>
224ababd922eac5931e0222862ff082dc29e012816Joe Onorato
234ababd922eac5931e0222862ff082dc29e012816Joe Onorato#include <sys/types.h>
244ababd922eac5931e0222862ff082dc29e012816Joe Onorato#include <stdint.h>
254ababd922eac5931e0222862ff082dc29e012816Joe Onorato
264ababd922eac5931e0222862ff082dc29e012816Joe Onoratonamespace android {
274ababd922eac5931e0222862ff082dc29e012816Joe Onorato
284ababd922eac5931e0222862ff082dc29e012816Joe Onoratostruct ABitReader {
294ababd922eac5931e0222862ff082dc29e012816Joe Onorato    ABitReader(const uint8_t *data, size_t size);
304ababd922eac5931e0222862ff082dc29e012816Joe Onorato
314ababd922eac5931e0222862ff082dc29e012816Joe Onorato    uint32_t getBits(size_t n);
324ababd922eac5931e0222862ff082dc29e012816Joe Onorato    void skipBits(size_t n);
334ababd922eac5931e0222862ff082dc29e012816Joe Onorato
344ababd922eac5931e0222862ff082dc29e012816Joe Onorato    size_t numBitsLeft() const;
354ababd922eac5931e0222862ff082dc29e012816Joe Onorato
364ababd922eac5931e0222862ff082dc29e012816Joe Onorato    const uint8_t *data() const;
374ababd922eac5931e0222862ff082dc29e012816Joe Onorato
384ababd922eac5931e0222862ff082dc29e012816Joe Onoratoprivate:
394ababd922eac5931e0222862ff082dc29e012816Joe Onorato    const uint8_t *mData;
404ababd922eac5931e0222862ff082dc29e012816Joe Onorato    size_t mSize;
414ababd922eac5931e0222862ff082dc29e012816Joe Onorato
424ababd922eac5931e0222862ff082dc29e012816Joe Onorato    uint32_t mReservoir;  // left-aligned bits
434ababd922eac5931e0222862ff082dc29e012816Joe Onorato    size_t mNumBitsLeft;
444ababd922eac5931e0222862ff082dc29e012816Joe Onorato
454ababd922eac5931e0222862ff082dc29e012816Joe Onorato    void fillReservoir();
464ababd922eac5931e0222862ff082dc29e012816Joe Onorato    void putBits(uint32_t x, size_t n);
474ababd922eac5931e0222862ff082dc29e012816Joe Onorato
484ababd922eac5931e0222862ff082dc29e012816Joe Onorato    DISALLOW_EVIL_CONSTRUCTORS(ABitReader);
494ababd922eac5931e0222862ff082dc29e012816Joe Onorato};
504ababd922eac5931e0222862ff082dc29e012816Joe Onorato
51a3804cf77f0edd93f6247a055cdafb856b117eecElliott Hughes}  // namespace android
524ababd922eac5931e0222862ff082dc29e012816Joe Onorato
534ababd922eac5931e0222862ff082dc29e012816Joe Onorato#endif  // A_BIT_READER_H_
544ababd922eac5931e0222862ff082dc29e012816Joe Onorato