Cogs.Core
MPEG_TS.h
1#pragma once
2
3#include "Base.h"
4
5#include <functional>
6#include <unordered_map>
7#include <vector>
8
9namespace Cogs::Core{
10
12 uint32_t table_id;
13 uint32_t section_syntax_indicator;
14 uint32_t section_length;
15 uint32_t transport_stream_id;
16 uint32_t version_number;
17 uint32_t current_next_indicator;
18 uint32_t section_number;
19 uint32_t last_section_number;
20
21 uint32_t program_number[44];
22 uint32_t PID[44]; // network_PID / program_map_PID
23
24 uint32_t CRC32;
25
26 bool HasPID(uint32_t pid, uint32_t &idx)
27 {
28 if(section_length <= 9) return false;
29 uint32_t N = (section_length-9)/4;
30 for(uint32_t i=0; i<N; i++){
31 if(PID[i] == pid){
32 idx = i;
33 return true;
34 }
35 }
36 return false;
37 }
38
39 void print();
40};
41
43 uint32_t stream_type;
44 uint32_t elementary_PID;
45 uint32_t ES_info_length;
46 // TODO Descriptors
47};
48
50 uint32_t table_id;
51 uint32_t section_syntax_indicator;
52 uint32_t section_length;
53 uint32_t program_number;
54 uint32_t version_number;
55 uint32_t current_next_indicator;
56 uint32_t section_number;
57 uint32_t last_section_number;
58 uint32_t PCR_PID;
59 uint32_t program_info_length;
60
61 // TODO Descriptors
62 std::vector<MPEGProgramMapEntity> entities;
63
64 uint32_t CRC32 = 0;
65
66 bool HasPID(uint32_t pid)
67 {
68 for(auto &tmp : entities){
69 if(tmp.elementary_PID == pid) return true;
70 }
71 return false;
72 }
73
74 void print();
75};
76
78 bool HasPID(uint32_t /*pid*/)
79 {
80 return false;
81 }
82};
83
85 uint32_t discontinuity_indicator;
86 uint32_t random_access_indicator;
87 uint32_t elementary_stream_priority_indicator;
88 uint32_t PCR_flag;
89 uint32_t OPCR_flag;
90 uint32_t splicing_point_flag;
91 uint32_t transport_private_data_flag;
92 uint32_t adaptation_field_extension_flag;
93 uint64_t program_clock_reference_base;
94 uint32_t program_clock_reference_extension;
95 uint64_t original_program_clock_reference_base;
96 uint32_t original_program_clock_reference_extension;
97 uint32_t splice_countdown;
98 uint32_t transport_private_data_length;
99 uint32_t private_data_byte[184];
100 uint32_t adaptation_field_extension_length;
101 uint32_t ltw_flag;
102 uint32_t piecewise_rate_flag;
103 uint32_t seamless_splice_flag;
104 uint32_t ltw_valid_flag;
105 uint32_t ltw_offset;
106 uint32_t piecewise_rate;
107 uint32_t Splice_type;
108 uint64_t DTS_next_AU;
109
110 void print();
111};
112
114 uint32_t transport_error_indicator = 0;
115 uint32_t payload_unit_start_indicator = 0;
116 uint32_t transport_priority = 0;
117 uint32_t PID = 0;
118 uint32_t transport_scrambling_control = 0;
119 uint32_t adaptation_field_control = 0;
120 uint32_t continuity_counter = 0;
121
122 void print();
123};
124
125struct PES_Sinc{
126 std::vector<uint8_t> data;
127};
128
130{
131 uint8_t *data;
132 size_t size;
133 uint64_t timestamp;
134};
135typedef std::function<void(TSCallbackData&)> TSCallback ;
136
140
144
145 std::unordered_map<uint32_t, PES_Sinc> pes_sinc;
146
147 TSCallback callback;
148};
149
150void COGSCORE_DLL_API parse_mpeg_ts(MPEGTransportStreamData &parse, uint8_t *data, size_t size);
151
152}// namespace ...
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....