1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Utility parser for rtp packetizer unittests
6#ifndef MEDIA_CAST_NET_RTP_RTP_HEADER_PARSER_H_
7#define MEDIA_CAST_NET_RTP_RTP_HEADER_PARSER_H_
8
9#include "base/basictypes.h"
10#include "media/cast/net/cast_transport_defines.h"
11
12namespace media {
13namespace cast {
14
15// TODO(miu): Kill this and use RtpCastHeader instead.
16struct RtpCastTestHeader {
17  RtpCastTestHeader();
18  ~RtpCastTestHeader();
19  // Cast specific.
20  bool is_key_frame;
21  uint32 frame_id;
22  uint16 packet_id;
23  uint16 max_packet_id;
24  bool is_reference;  // Set to true if the previous frame is not available,
25                      // and the reference frame id  is available.
26  uint32 reference_frame_id;
27
28  // Rtp Generic.
29  bool marker;
30  uint16 sequence_number;
31  uint32 rtp_timestamp;
32  uint32 ssrc;
33  int payload_type;
34  uint8 num_csrcs;
35  uint8 audio_num_energy;
36  int header_length;
37};
38
39// TODO(miu): Kill this and use RtpParser instead.
40class RtpHeaderParser {
41 public:
42  RtpHeaderParser(const uint8* rtpData, size_t rtpDataLength);
43  ~RtpHeaderParser();
44
45  bool Parse(RtpCastTestHeader* parsed_packet) const;
46
47 private:
48  bool ParseCommon(RtpCastTestHeader* parsed_packet) const;
49  bool ParseCast(RtpCastTestHeader* parsed_packet) const;
50  const uint8* const rtp_data_begin_;
51  size_t length_;
52
53  mutable FrameIdWrapHelper frame_id_wrap_helper_;
54  mutable FrameIdWrapHelper reference_frame_id_wrap_helper_;
55
56  DISALLOW_COPY_AND_ASSIGN(RtpHeaderParser);
57};
58
59}  // namespace cast
60}  // namespace media
61
62#endif  // MEDIA_CAST_NET_RTP_RTP_HEADER_PARSER_H_
63