Index: extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.h |
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.h b/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4201a58287daf9657a594cfcb6815f2e1c659e69 |
--- /dev/null |
+++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.h |
@@ -0,0 +1,72 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef EXTENSIONS_RENDERER_API_DISPLAY_SOURCE_WIFI_DISPLAY_WIFI_DISPLAY_ELEMENTARY_STREAM_PACKETIZER_H_ |
+#define EXTENSIONS_RENDERER_API_DISPLAY_SOURCE_WIFI_DISPLAY_WIFI_DISPLAY_ELEMENTARY_STREAM_PACKETIZER_H_ |
+ |
+#include "base/time/time.h" |
+#include "extensions/renderer/api/display_source/wifi_display/wifi_display_stream_packet_part.h" |
+ |
+namespace extensions { |
+ |
+// WiFi Display elementary stream packet represents a Packetized Elementary |
+// Stream (PES) packet containing WiFi Display elementary stream unit data. |
+class WiFiDisplayElementaryStreamPacket { |
+ public: |
+ using HeaderBuffer = uint8_t[19]; |
+ |
+ WiFiDisplayElementaryStreamPacket(const HeaderBuffer& header_data, |
+ size_t header_size, |
+ const uint8_t* unit_header_data, |
+ size_t unit_header_size, |
+ const uint8_t* unit_data, |
+ size_t unit_size); |
+ // WiFiDisplayElementaryStreamPacketizer::EncodeElementaryStreamUnit returns |
+ // WiFiDisplayElementaryStreamPacket so WiFiDisplayElementaryStreamPacket |
+ // must be move constructible (as it is not copy constructible). |
+ // A compiler should however use return value optimization and elide each |
+ // call to this move constructor. |
+ WiFiDisplayElementaryStreamPacket(WiFiDisplayElementaryStreamPacket&& other); |
+ |
+ const WiFiDisplayStreamPacketPart& header() const { return header_; } |
+ const WiFiDisplayStreamPacketPart& unit_header() const { |
+ return unit_header_; |
+ } |
+ const WiFiDisplayStreamPacketPart& unit() const { return unit_; } |
+ |
+ private: |
+ HeaderBuffer header_buffer_; |
+ WiFiDisplayStreamPacketPart header_; |
+ WiFiDisplayStreamPacketPart unit_header_; |
+ WiFiDisplayStreamPacketPart unit_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(WiFiDisplayElementaryStreamPacket); |
+}; |
+ |
+// The WiFi Display elementary stream packetizer packetizes unit buffers to |
+// Packetized Elementary Stream (PES) packets. |
+// It is used internally by a WiFi Display transport stream packetizer. |
+class WiFiDisplayElementaryStreamPacketizer { |
+ public: |
+ enum : uint8_t { |
+ kPrivateStream1Id = 0xBDu, |
+ kFirstAudioStreamId = 0xC0u, |
+ kLastAudioStreamId = 0xDFu, |
+ kFirstVideoStreamId = 0xE0u, |
+ kLastVideoStreamId = 0xEFu, |
+ }; |
+ |
+ static WiFiDisplayElementaryStreamPacket EncodeElementaryStreamUnit( |
+ uint8_t stream_id, |
+ const uint8_t* unit_header_data, |
+ size_t unit_header_size, |
+ const uint8_t* unit_data, |
+ size_t unit_size, |
+ const base::TimeTicks& pts, |
+ const base::TimeTicks& dts); |
+}; |
+ |
+} // namespace extensions |
+ |
+#endif // EXTENSIONS_RENDERER_API_DISPLAY_SOURCE_WIFI_DISPLAY_WIFI_DISPLAY_ELEMENTARY_STREAM_PACKETIZER_H_ |