1*09537850SAkhilesh Sanikop /* 2*09537850SAkhilesh Sanikop * Copyright 2019 The libgav1 Authors 3*09537850SAkhilesh Sanikop * 4*09537850SAkhilesh Sanikop * Licensed under the Apache License, Version 2.0 (the "License"); 5*09537850SAkhilesh Sanikop * you may not use this file except in compliance with the License. 6*09537850SAkhilesh Sanikop * You may obtain a copy of the License at 7*09537850SAkhilesh Sanikop * 8*09537850SAkhilesh Sanikop * http://www.apache.org/licenses/LICENSE-2.0 9*09537850SAkhilesh Sanikop * 10*09537850SAkhilesh Sanikop * Unless required by applicable law or agreed to in writing, software 11*09537850SAkhilesh Sanikop * distributed under the License is distributed on an "AS IS" BASIS, 12*09537850SAkhilesh Sanikop * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*09537850SAkhilesh Sanikop * See the License for the specific language governing permissions and 14*09537850SAkhilesh Sanikop * limitations under the License. 15*09537850SAkhilesh Sanikop */ 16*09537850SAkhilesh Sanikop 17*09537850SAkhilesh Sanikop #ifndef LIBGAV1_SRC_UTILS_BIT_READER_H_ 18*09537850SAkhilesh Sanikop #define LIBGAV1_SRC_UTILS_BIT_READER_H_ 19*09537850SAkhilesh Sanikop 20*09537850SAkhilesh Sanikop #include <cstdint> 21*09537850SAkhilesh Sanikop 22*09537850SAkhilesh Sanikop namespace libgav1 { 23*09537850SAkhilesh Sanikop 24*09537850SAkhilesh Sanikop class BitReader { 25*09537850SAkhilesh Sanikop public: 26*09537850SAkhilesh Sanikop virtual ~BitReader() = default; 27*09537850SAkhilesh Sanikop 28*09537850SAkhilesh Sanikop virtual int ReadBit() = 0; 29*09537850SAkhilesh Sanikop // |num_bits| has to be <= 32. The function returns a value in the range [0, 30*09537850SAkhilesh Sanikop // 2^num_bits - 1] (inclusive) on success and -1 on failure. 31*09537850SAkhilesh Sanikop virtual int64_t ReadLiteral(int num_bits) = 0; 32*09537850SAkhilesh Sanikop 33*09537850SAkhilesh Sanikop bool DecodeSignedSubexpWithReference(int low, int high, int reference, 34*09537850SAkhilesh Sanikop int control, int* value); // 5.9.26. 35*09537850SAkhilesh Sanikop // Decodes a nonnegative integer with maximum number of values |n| (i.e., 36*09537850SAkhilesh Sanikop // output in range 0..n-1) by following the process specified in Section 37*09537850SAkhilesh Sanikop // 4.10.7 ns(n) and Section 4.10.10 NS(n) of the spec. 38*09537850SAkhilesh Sanikop bool DecodeUniform(int n, int* value); 39*09537850SAkhilesh Sanikop 40*09537850SAkhilesh Sanikop private: 41*09537850SAkhilesh Sanikop // Helper functions for DecodeSignedSubexpWithReference. 42*09537850SAkhilesh Sanikop bool DecodeUnsignedSubexpWithReference(int mx, int reference, int control, 43*09537850SAkhilesh Sanikop int* value); // 5.9.27. 44*09537850SAkhilesh Sanikop bool DecodeSubexp(int num_symbols, int control, int* value); // 5.9.28. 45*09537850SAkhilesh Sanikop }; 46*09537850SAkhilesh Sanikop 47*09537850SAkhilesh Sanikop } // namespace libgav1 48*09537850SAkhilesh Sanikop 49*09537850SAkhilesh Sanikop #endif // LIBGAV1_SRC_UTILS_BIT_READER_H_ 50