Index: media/cast/framer/framer.h |
diff --git a/media/cast/framer/framer.h b/media/cast/framer/framer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..604a4aad3f5c86c91226a13d28ce0099588421e0 |
--- /dev/null |
+++ b/media/cast/framer/framer.h |
@@ -0,0 +1,83 @@ |
+// Copyright 2013 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 MEDIA_CAST_FRAMER_FRAMER_H_ |
+#define MEDIA_CAST_FRAMER_FRAMER_H_ |
+ |
+#include <map> |
+ |
+#include "base/basictypes.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/time/default_tick_clock.h" |
+#include "base/time/tick_clock.h" |
+#include "base/time/time.h" |
+#include "media/cast/framer/cast_message_builder.h" |
+#include "media/cast/framer/frame_buffer.h" |
+#include "media/cast/framer/frame_id_map.h" |
+#include "media/cast/rtcp/rtcp.h" |
+#include "media/cast/rtp_common/rtp_defines.h" |
+ |
+namespace media { |
+namespace cast { |
+ |
+typedef std::map<uint8, FrameBuffer*> FrameList; |
Alpha Left Google
2013/08/28 00:27:31
This should be linked_ptr<FrameBuffer> instead of
pwestin
2013/08/28 16:40:44
Done.
|
+ |
+class Framer { |
+ public: |
+ Framer(RtpPayloadFeedback* incoming_payload_feedback, |
+ uint32 ssrc, |
+ bool decoder_faster_than_max_frame_rate, |
+ int max_unacked_frames); |
+ ~Framer(); |
+ |
+ void InsertPacket(const uint8* payload_data, |
+ int payload_size, |
+ const RtpCastHeader& rtp_header); |
+ |
+ // Extracts a complete encoded frame - will only return a complete continuous |
+ // frame. |
+ // Returns false if the frame does not exist or if the frame is not complete |
+ // within the given time frame. |
+ bool GetEncodedVideoFrame(const base::TimeTicks& timeout, |
+ EncodedVideoFrame* video_frame, |
+ uint32* rtp_timestamp, |
+ bool* next_frame); |
+ |
+ bool GetEncodedAudioFrame(const base::TimeTicks& timeout, |
+ EncodedAudioFrame* audio_frame, |
+ uint32* rtp_timestamp, |
+ bool* next_frame); |
+ |
+ void ReleaseFrame(uint8 frame_id); |
+ |
+ // Reset framer state to original state and flush all pending buffers. |
+ void Reset(); |
+ bool TimeToSendNextCastMessage(base::TimeTicks* time_to_send); |
+ void SendCastMessage(); |
+ |
+ void set_clock(base::TickClock* clock) { |
+ clock_ = clock; |
+ cast_msg_builder_->set_clock(clock); |
+ } |
+ |
+ private: |
+ // Return true if we should wait. |
+ bool WaitForNextFrame(const base::TimeTicks& timeout) const; |
+ |
+ const bool decoder_faster_than_max_frame_rate_; |
+ FrameList frames_; |
+ FrameIdMap frame_id_map_; |
+ |
+ CastMessageBuilder* cast_msg_builder_; |
Alpha Left Google
2013/08/28 00:27:31
Use scoped_ptr<>.
pwestin
2013/08/28 16:40:44
Done.
|
+ |
+ scoped_ptr<base::TickClock> default_tick_clock_; |
+ base::TickClock* clock_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(Framer); |
+}; |
+ |
+} // namespace cast |
+} // namespace media |
+ |
+#endif // MEDIA_CAST_FRAMER_FRAMER_H_ |