1 /* ///////////////////////////////////////////////////////////////////////
2 * File: adaptation_field_header.h
7 * Brief: the adaptation_field_header class
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
13 #ifndef EXTL_MEDIA_TS_ADAPTATION_FIELD_HEADER_H
14 #define EXTL_MEDIA_TS_ADAPTATION_FIELD_HEADER_H
16 /*!\file adaptation_field_header.h
17 * \brief the adaptation_field_header class
20 # error adaptation_field_header.h need be supported by c++.
23 /* ///////////////////////////////////////////////////////////////////////
27 #include "../../memory/buffer.h"
29 /* ///////////////////////////////////////////////////////////////////////
30 * ::extl::media::ts namespace
32 EXTL_MEDIA_TS_BEGIN_WHOLE_NAMESPACE
34 /*!brief the adaptation_field_header class
36 * \ingroup extl_group_media
39 * // program clock reference
40 * struct adaptation_field_header
43 discontinuity_indicator : 1 ;
44 random_access_indicator : 1 ;
45 elementary_stream_priority_indicator : 1 ;
48 splicing_point_flag : 1 ;
49 private_data_flag : 1 ;
54 * \param Pck the packet type
56 template<typename_param_k Ada
>
57 class adaptation_field_header
59 /// \name Public Types
62 typedef Ada adaptation_type
;
63 typedef adaptation_field_header class_type
;
64 typedef e_byte_t byte_type
;
65 typedef e_uint16_t word_type
;
66 typedef e_uint32_t dword_type
;
67 typedef e_uint64_t qword_type
;
68 typedef byte_type
* pointer
;
69 typedef byte_type
const* const_pointer
;
70 typedef e_size_t size_type
;
71 typedef size_type index_type
;
72 typedef e_bool_t bool_type
;
78 // program_clock_reference
79 // base + base1 + reseved + pcr_extension
83 byte_type adaptation_length
;
85 // \note defined in reverse order by byte_type
86 byte_type extension_flag
: 1 ; //< low bit
87 byte_type private_data_flag
: 1 ;
88 byte_type splicing_point_flag
: 1 ;
89 byte_type opcr_flag
: 1 ;
90 byte_type pcr_flag
: 1 ;
91 byte_type elementary_stream_priority_indicator
: 1 ;
92 byte_type random_access_indicator
: 1 ;
93 byte_type discontinuity_indicator
: 1 ; //< high bit
100 enum { en_header_size
= 2 };
103 /// \name Private Accessors
106 adaptation_type
& adaptation() { return static_cast<adaptation_type
&>(*this); }
107 adaptation_type
const& adaptation() const { return static_cast<adaptation_type
const&>(*this); }
109 members_type
& members() { return *reinterpret_cast<members_type
*>(data()); }
110 members_type
const& members() const { return *reinterpret_cast<members_type
const*>(data()); }
113 /// \name Public Accessors
116 pointer
data() { return (adaptation().data()); }
117 const_pointer
data() const { return (adaptation().data()); }
119 size_type
adaptation_length() const { return static_cast<size_type
>(members().adaptation_length
); }
120 void adaptation_length(size_type value
) { members().adaptation_length
= static_cast<byte_type
>(value
); }
122 size_type
discontinuity_indicator() const { return static_cast<size_type
>(members().discontinuity_indicator
); }
123 void discontinuity_indicator(size_type value
) { members().discontinuity_indicator
= static_cast<byte_type
>(value
); }
125 size_type
random_access_indicator() const { return static_cast<size_type
>(members().random_access_indicator
); }
126 void random_access_indicator(size_type value
) { members().random_access_indicator
= static_cast<byte_type
>(value
); }
128 size_type
elementary_stream_priority_indicator() const { return static_cast<size_type
>(members().elementary_stream_priority_indicator
); }
129 void elementary_stream_priority_indicator(size_type value
) { members().elementary_stream_priority_indicator
= static_cast<byte_type
>(value
); }
131 size_type
pcr_flag() const { return static_cast<size_type
>(members().pcr_flag
); }
132 void pcr_flag(size_type value
) { members().pcr_flag
= static_cast<byte_type
>(value
); }
134 size_type
opcr_flag() const { return static_cast<size_type
>(members().opcr_flag
); }
135 void opcr_flag(size_type value
) { members().opcr_flag
= static_cast<byte_type
>(value
); }
137 size_type
splicing_point_flag() const { return static_cast<size_type
>(members().splicing_point_flag
); }
138 void splicing_point_flag(size_type value
) { members().splicing_point_flag
= static_cast<byte_type
>(value
); }
140 size_type
private_data_flag() const { return static_cast<size_type
>(members().private_data_flag
); }
141 void private_data_flag(size_type value
) { members().private_data_flag
= static_cast<byte_type
>(value
); }
143 size_type
extension_flag() const { return static_cast<size_type
>(members().extension_flag
); }
144 void extension_flag(size_type value
) { members().extension_flag
= static_cast<byte_type
>(value
); }
150 /// the adaptation_field_header size
151 size_type
size() const { return en_header_size
; }
153 /// return the offset at the packet
154 size_type
offset() const { return adaptation().offset(); }
158 /* ///////////////////////////////////////////////////////////////////////
159 * ::extl::media::ts namespace
161 EXTL_MEDIA_TS_END_WHOLE_NAMESPACE
163 /* //////////////////////////////////////////////////////////////////// */
164 #endif /* EXTL_MEDIA_TS_ADAPTATION_FIELD_HEADER_H */
165 /* //////////////////////////////////////////////////////////////////// */