vp9_compressed_header_parser.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_FILTERS_VP9_COMPRESSED_HEADER_PARSER_H_
  5. #define MEDIA_FILTERS_VP9_COMPRESSED_HEADER_PARSER_H_
  6. #include "media/filters/vp9_bool_decoder.h"
  7. #include "media/filters/vp9_parser.h"
  8. namespace media {
  9. class Vp9CompressedHeaderParser {
  10. public:
  11. Vp9CompressedHeaderParser();
  12. Vp9CompressedHeaderParser(const Vp9CompressedHeaderParser&) = delete;
  13. Vp9CompressedHeaderParser& operator=(const Vp9CompressedHeaderParser&) =
  14. delete;
  15. // Parses VP9 compressed header in |stream| with |frame_size| into |fhdr|.
  16. // Returns true if no error.
  17. bool Parse(const uint8_t* stream, off_t frame_size, Vp9FrameHeader* fhdr);
  18. // Similar to Parse() but will store the deltaProb in the context instead of
  19. // updating existing probabilities. (see 6.3.3 Diff update prob syntax)
  20. bool ParseNoContext(const uint8_t* stream,
  21. off_t frame_size,
  22. Vp9FrameHeader* fhdr);
  23. private:
  24. bool ParseInternal(const uint8_t* stream,
  25. off_t frame_size,
  26. Vp9FrameHeader* fhdr);
  27. void ReadTxMode(Vp9FrameHeader* fhdr);
  28. uint8_t DecodeTermSubexp();
  29. void DiffUpdateProb(Vp9Prob* prob);
  30. template <int N>
  31. void DiffUpdateProbArray(Vp9Prob (&prob_array)[N]);
  32. void ReadTxModeProbs(Vp9FrameContext* frame_context);
  33. void ReadCoefProbs(Vp9FrameHeader* fhdr);
  34. void ReadSkipProb(Vp9FrameContext* frame_context);
  35. void ReadInterModeProbs(Vp9FrameContext* frame_context);
  36. void ReadInterpFilterProbs(Vp9FrameContext* frame_context);
  37. void ReadIsInterProbs(Vp9FrameContext* frame_context);
  38. void ReadFrameReferenceMode(Vp9FrameHeader* fhdr);
  39. void ReadFrameReferenceModeProbs(Vp9FrameHeader* fhdr);
  40. void ReadYModeProbs(Vp9FrameContext* frame_context);
  41. void ReadPartitionProbs(Vp9FrameContext* frame_context);
  42. void ReadMvProbs(bool allow_high_precision_mv,
  43. Vp9FrameContext* frame_context);
  44. void UpdateMvProb(Vp9Prob* prob);
  45. template <int N>
  46. void UpdateMvProbArray(Vp9Prob (&prob_array)[N]);
  47. // Bool decoder for compressed frame header.
  48. Vp9BoolDecoder reader_;
  49. // Used to change behaviour when parsing without previous frame context. Set
  50. // by Parse()/ParseNoContext()
  51. bool have_frame_context_ = true;
  52. };
  53. } // namespace media
  54. #endif // MEDIA_FILTERS_VP9_COMPRESSED_HEADER_PARSER_H_