mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (c) 2016 The WebM project authors. All Rights Reserved.
 | 
						|
//
 | 
						|
// Use of this source code is governed by a BSD-style license
 | 
						|
// that can be found in the LICENSE file in the root of the source
 | 
						|
// tree. An additional intellectual property rights grant can be found
 | 
						|
// in the file PATENTS.  All contributing project authors may
 | 
						|
// be found in the AUTHORS file in the root of the source tree.
 | 
						|
#ifndef LIBWEBM_COMMON_VP9_HEADER_PARSER_H_
 | 
						|
#define LIBWEBM_COMMON_VP9_HEADER_PARSER_H_
 | 
						|
 | 
						|
#include <stddef.h>
 | 
						|
#include <stdint.h>
 | 
						|
 | 
						|
namespace vp9_parser {
 | 
						|
 | 
						|
const int kVp9FrameMarker = 2;
 | 
						|
const int kMinTileWidthB64 = 4;
 | 
						|
const int kMaxTileWidthB64 = 64;
 | 
						|
const int kRefFrames = 8;
 | 
						|
const int kRefsPerFrame = 3;
 | 
						|
const int kRefFrames_LOG2 = 3;
 | 
						|
const int kVpxCsBt601 = 1;
 | 
						|
const int kVpxCsSrgb = 7;
 | 
						|
const int kVpxCrStudioRange = 0;
 | 
						|
const int kVpxCrFullRange = 1;
 | 
						|
const int kMiSizeLog2 = 3;
 | 
						|
 | 
						|
// Class to parse the header of a VP9 frame.
 | 
						|
class Vp9HeaderParser {
 | 
						|
 public:
 | 
						|
  Vp9HeaderParser()
 | 
						|
      : frame_(NULL),
 | 
						|
        frame_size_(0),
 | 
						|
        bit_offset_(0),
 | 
						|
        profile_(-1),
 | 
						|
        show_existing_frame_(0),
 | 
						|
        key_(0),
 | 
						|
        altref_(0),
 | 
						|
        error_resilient_mode_(0),
 | 
						|
        intra_only_(0),
 | 
						|
        reset_frame_context_(0),
 | 
						|
        bit_depth_(0),
 | 
						|
        color_space_(0),
 | 
						|
        color_range_(0),
 | 
						|
        subsampling_x_(0),
 | 
						|
        subsampling_y_(0),
 | 
						|
        refresh_frame_flags_(0),
 | 
						|
        width_(0),
 | 
						|
        height_(0),
 | 
						|
        row_tiles_(0),
 | 
						|
        column_tiles_(0),
 | 
						|
        frame_parallel_mode_(0) {}
 | 
						|
 | 
						|
  // Parse the VP9 uncompressed header. The return values of the remaining
 | 
						|
  // functions are only valid on success.
 | 
						|
  bool ParseUncompressedHeader(const uint8_t* frame, size_t length);
 | 
						|
 | 
						|
  size_t frame_size() const { return frame_size_; }
 | 
						|
  int profile() const { return profile_; }
 | 
						|
  int key() const { return key_; }
 | 
						|
  int altref() const { return altref_; }
 | 
						|
  int error_resilient_mode() const { return error_resilient_mode_; }
 | 
						|
  int bit_depth() const { return bit_depth_; }
 | 
						|
  int color_space() const { return color_space_; }
 | 
						|
  int width() const { return width_; }
 | 
						|
  int height() const { return height_; }
 | 
						|
  int display_width() const { return display_width_; }
 | 
						|
  int display_height() const { return display_height_; }
 | 
						|
  int refresh_frame_flags() const { return refresh_frame_flags_; }
 | 
						|
  int row_tiles() const { return row_tiles_; }
 | 
						|
  int column_tiles() const { return column_tiles_; }
 | 
						|
  int frame_parallel_mode() const { return frame_parallel_mode_; }
 | 
						|
 | 
						|
 private:
 | 
						|
  // Set the compressed VP9 frame.
 | 
						|
  bool SetFrame(const uint8_t* frame, size_t length);
 | 
						|
 | 
						|
  // Returns the next bit of the frame.
 | 
						|
  int ReadBit();
 | 
						|
 | 
						|
  // Returns the next |bits| of the frame.
 | 
						|
  int VpxReadLiteral(int bits);
 | 
						|
 | 
						|
  // Returns true if the vp9 sync code is valid.
 | 
						|
  bool ValidateVp9SyncCode();
 | 
						|
 | 
						|
  // Parses bit_depth_, color_space_, subsampling_x_, subsampling_y_, and
 | 
						|
  // color_range_.
 | 
						|
  void ParseColorSpace();
 | 
						|
 | 
						|
  // Parses width and height of the frame.
 | 
						|
  void ParseFrameResolution();
 | 
						|
 | 
						|
  // Parses frame_parallel_mode_. This function skips over some features.
 | 
						|
  void ParseFrameParallelMode();
 | 
						|
 | 
						|
  // Parses row and column tiles. This function skips over some features.
 | 
						|
  void ParseTileInfo();
 | 
						|
  void SkipDeltaQ();
 | 
						|
  int AlignPowerOfTwo(int value, int n);
 | 
						|
 | 
						|
  const uint8_t* frame_;
 | 
						|
  size_t frame_size_;
 | 
						|
  size_t bit_offset_;
 | 
						|
  int profile_;
 | 
						|
  int show_existing_frame_;
 | 
						|
  int key_;
 | 
						|
  int altref_;
 | 
						|
  int error_resilient_mode_;
 | 
						|
  int intra_only_;
 | 
						|
  int reset_frame_context_;
 | 
						|
  int bit_depth_;
 | 
						|
  int color_space_;
 | 
						|
  int color_range_;
 | 
						|
  int subsampling_x_;
 | 
						|
  int subsampling_y_;
 | 
						|
  int refresh_frame_flags_;
 | 
						|
  int width_;
 | 
						|
  int height_;
 | 
						|
  int display_width_;
 | 
						|
  int display_height_;
 | 
						|
  int row_tiles_;
 | 
						|
  int column_tiles_;
 | 
						|
  int frame_parallel_mode_;
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace vp9_parser
 | 
						|
 | 
						|
#endif  // LIBWEBM_COMMON_VP9_HEADER_PARSER_H_
 |