1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_FILTERS_VP9_UNCOMPRESSED_HEADER_PARSER_H_
6 #define MEDIA_FILTERS_VP9_UNCOMPRESSED_HEADER_PARSER_H_
8 #include "base/memory/raw_ptr.h"
9 #include "media/filters/vp9_parser.h"
10 #include "media/filters/vp9_raw_bits_reader.h"
12 #include "media/base/media_export.h"
16 class MEDIA_EXPORT Vp9UncompressedHeaderParser {
18 Vp9UncompressedHeaderParser(Vp9Parser::Context* context);
20 Vp9UncompressedHeaderParser(const Vp9UncompressedHeaderParser&) = delete;
21 Vp9UncompressedHeaderParser& operator=(const Vp9UncompressedHeaderParser&) =
24 // Parses VP9 uncompressed header in |stream| with |frame_size| into |fhdr|.
25 // Returns true if no error.
26 bool Parse(const uint8_t* stream, off_t frame_size, Vp9FrameHeader* fhdr);
28 const Vp9FrameContext& GetVp9DefaultFrameContextForTesting() const;
31 friend class Vp9UncompressedHeaderParserTest;
33 uint8_t ReadProfile();
34 bool VerifySyncCode();
35 bool ReadColorConfig(Vp9FrameHeader* fhdr);
36 void ReadFrameSize(Vp9FrameHeader* fhdr);
37 bool ReadFrameSizeFromRefs(Vp9FrameHeader* fhdr);
38 void ReadRenderSize(Vp9FrameHeader* fhdr);
39 Vp9InterpolationFilter ReadInterpolationFilter();
40 void ResetLoopfilter();
41 void SetupPastIndependence(Vp9FrameHeader* fhdr);
42 void ReadLoopFilterParams();
43 void ReadQuantizationParams(Vp9QuantizationParams* quants);
46 bool ReadSegmentationParams();
47 bool ReadTileInfo(Vp9FrameHeader* fhdr);
49 // Raw bits reader for uncompressed frame header.
50 Vp9RawBitsReader reader_;
52 raw_ptr<Vp9Parser::Context> context_;
57 #endif // MEDIA_FILTERS_VP9_UNCOMPRESSED_HEADER_PARSER_H_