1 /** HEVC video helper functions
2 
3    mkvmerge -- utility for splicing together matroska files
4    from component media subtypes
5 
6    Distributed under the GPL v2
7    see the file COPYING for details
8    or visit https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
9 
10    \file
11 
12 */
13 
14 #pragma once
15 
16 #include "common/common_pch.h"
17 
18 #include "common/dovi_meta.h"
19 #include "common/hevc/types.h"
20 
21 namespace mtx::hevc {
22 
23 struct par_extraction_t {
24   memory_cptr new_hevcc;
25   unsigned int numerator, denominator;
26   bool successful;
27 
28   bool is_valid() const;
29 };
30 
31 bool parse_vps(memory_cptr const &buffer, vps_info_t &vps);
32 memory_cptr parse_sps(memory_cptr const &buffer, sps_info_t &sps, std::vector<vps_info_t> &vps_info_list, bool keep_ar_info = false);
33 bool parse_pps(memory_cptr const &buffer, pps_info_t &pps);
34 bool parse_sei(memory_cptr const &buffer, user_data_t &user_data);
35 bool handle_sei_payload(mm_mem_io_c &byte_reader, unsigned int sei_payload_type, unsigned int sei_payload_size, user_data_t &user_data);
36 
37 bool parse_dovi_rpu(memory_cptr const &buffer, mtx::dovi::dovi_rpu_data_header_t &dovi_rpu_data_header);
38 
39 par_extraction_t extract_par(memory_cptr const &buffer);
40 bool is_fourcc(const char *fourcc);
41 memory_cptr hevcc_to_nalus(const unsigned char *buffer, size_t size);
42 
43 }                              // namespace mtx::hevc
44