Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1081)

Unified Diff: media/cast/rtp_receiver/rtp_parser/rtp_parser.cc

Issue 388663003: Cast: Reshuffle files under media/cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: missing includes Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/cast/rtp_receiver/rtp_parser/rtp_parser.cc
diff --git a/media/cast/rtp_receiver/rtp_parser/rtp_parser.cc b/media/cast/rtp_receiver/rtp_parser/rtp_parser.cc
deleted file mode 100644
index f44e82dac2bee8f4cadcb15eee309b594a6a1fab..0000000000000000000000000000000000000000
--- a/media/cast/rtp_receiver/rtp_parser/rtp_parser.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// 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.
-
-#include "media/cast/rtp_receiver/rtp_parser/rtp_parser.h"
-
-#include "base/big_endian.h"
-#include "base/logging.h"
-#include "media/cast/cast_defines.h"
-
-namespace media {
-namespace cast {
-
-static const size_t kRtpHeaderLength = 12;
-static const size_t kCastHeaderLength = 7;
-static const uint8 kRtpExtensionBitMask = 0x10;
-static const uint8 kRtpMarkerBitMask = 0x80;
-static const uint8 kCastKeyFrameBitMask = 0x80;
-static const uint8 kCastReferenceFrameIdBitMask = 0x40;
-
-RtpParser::RtpParser(uint32 expected_sender_ssrc, uint8 expected_payload_type)
- : expected_sender_ssrc_(expected_sender_ssrc),
- expected_payload_type_(expected_payload_type) {}
-
-RtpParser::~RtpParser() {}
-
-bool RtpParser::ParsePacket(const uint8* packet,
- size_t length,
- RtpCastHeader* header,
- const uint8** payload_data,
- size_t* payload_size) {
- DCHECK(packet);
- DCHECK(header);
- DCHECK(payload_data);
- DCHECK(payload_size);
-
- if (length < (kRtpHeaderLength + kCastHeaderLength))
- return false;
-
- base::BigEndianReader reader(reinterpret_cast<const char*>(packet), length);
-
- // Parse the RTP header. See
- // http://en.wikipedia.org/wiki/Real-time_Transport_Protocol for an
- // explanation of the standard RTP packet header.
- uint8 bits;
- if (!reader.ReadU8(&bits))
- return false;
- const uint8 version = bits >> 6;
- if (version != 2)
- return false;
- if (bits & kRtpExtensionBitMask)
- return false; // We lack the implementation to skip over an extension.
- if (!reader.ReadU8(&bits))
- return false;
- header->marker = !!(bits & kRtpMarkerBitMask);
- header->payload_type = bits & ~kRtpMarkerBitMask;
- if (header->payload_type != expected_payload_type_)
- return false; // Punt: Unexpected payload type.
- if (!reader.ReadU16(&header->sequence_number) ||
- !reader.ReadU32(&header->rtp_timestamp) ||
- !reader.ReadU32(&header->sender_ssrc)) {
- return false;
- }
- if (header->sender_ssrc != expected_sender_ssrc_)
- return false; // Punt: Sender's SSRC does not match the expected one.
-
- // Parse the Cast header. Note that, from the RTP protocol's perspective, the
- // Cast header is part of the payload (and not meant to be an extension
- // header).
- if (!reader.ReadU8(&bits))
- return false;
- header->is_key_frame = !!(bits & kCastKeyFrameBitMask);
- const bool includes_specific_frame_reference =
- !!(bits & kCastReferenceFrameIdBitMask);
- uint8 truncated_frame_id;
- if (!reader.ReadU8(&truncated_frame_id) ||
- !reader.ReadU16(&header->packet_id) ||
- !reader.ReadU16(&header->max_packet_id)) {
- return false;
- }
- // Sanity-check: Do the packet ID values make sense w.r.t. each other?
- if (header->max_packet_id < header->packet_id)
- return false;
- uint8 truncated_reference_frame_id;
- if (!includes_specific_frame_reference) {
- // By default, a key frame only references itself; and non-key frames
- // reference their direct predecessor.
- truncated_reference_frame_id = truncated_frame_id;
- if (!header->is_key_frame)
- --truncated_reference_frame_id;
- } else if (!reader.ReadU8(&truncated_reference_frame_id)) {
- return false;
- }
-
- // Only the lower 8 bits of the |frame_id| were serialized, so do some magic
- // to restore the upper 24 bits.
- //
- // Note: The call to |frame_id_wrap_helper_| has side effects, so we must not
- // call it until we know the entire deserialization will succeed.
- header->frame_id =
- frame_id_wrap_helper_.MapTo32bitsFrameId(truncated_frame_id);
- // When the upper 24 bits are restored to |reference_frame_id|, make sure
- // |reference_frame_id| will be strictly less than or equal to |frame_id|.
- if (truncated_reference_frame_id <= truncated_frame_id)
- header->reference_frame_id = header->frame_id & 0xffffff00;
- else
- header->reference_frame_id = (header->frame_id & 0xffffff00) - 0x00000100;
- header->reference_frame_id |= truncated_reference_frame_id;
-
- // All remaining data in the packet is the payload.
- *payload_data = reinterpret_cast<const uint8*>(reader.ptr());
- *payload_size = reader.remaining();
-
- return true;
-}
-
-} // namespace cast
-} // namespace media
« no previous file with comments | « media/cast/rtp_receiver/rtp_parser/rtp_parser.h ('k') | media/cast/rtp_receiver/rtp_parser/rtp_parser_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698