remove \r
[extl.git] / extl / media / ts / adaptation_field_header.h
blobfbe8a91fbe2d9125613ee435576ca6e9c046181d
1 /* ///////////////////////////////////////////////////////////////////////
2 * File: adaptation_field_header.h
4 * Created: 09.03.05
5 * Updated: 09.03.05
7 * Brief: the adaptation_field_header class
9 * [<Home>]
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
19 #ifndef __cplusplus
20 # error adaptation_field_header.h need be supported by c++.
21 #endif
23 /* ///////////////////////////////////////////////////////////////////////
24 * Includes
26 #include "prefix.h"
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
38 * \code
39 * // program clock reference
40 * struct adaptation_field_header
42 length : 8 ;
43 discontinuity_indicator : 1 ;
44 random_access_indicator : 1 ;
45 elementary_stream_priority_indicator : 1 ;
46 pcr_flag : 1 ;
47 opcr_flag : 1 ;
48 splicing_point_flag : 1 ;
49 private_data_flag : 1 ;
50 extension_flag : 1 ;
52 * \endcode
54 * \param Pck the packet type
56 template<typename_param_k Ada>
57 class adaptation_field_header
59 /// \name Public Types
60 /// @{
61 public:
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;
73 /// @}
75 /// \name Member Type
76 /// @{
77 private:
78 // program_clock_reference
79 // base + base1 + reseved + pcr_extension
80 // |=> 33bit <=| 6 9
81 struct members_type
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
95 /// @}
97 /// \name Constants
98 /// @{
99 public:
100 enum { en_header_size = 2 };
101 /// @}
103 /// \name Private Accessors
104 /// @{
105 private:
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()); }
111 /// @}
113 /// \name Public Accessors
114 /// @{
115 public:
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); }
145 /// @}
147 /// \name Attributes
148 /// @{
149 public:
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(); }
155 /// @}
158 /* ///////////////////////////////////////////////////////////////////////
159 * ::extl::media::ts namespace
161 EXTL_MEDIA_TS_END_WHOLE_NAMESPACE
163 /* //////////////////////////////////////////////////////////////////// */
164 #endif /* EXTL_MEDIA_TS_ADAPTATION_FIELD_HEADER_H */
165 /* //////////////////////////////////////////////////////////////////// */