MythTV master
rtpdatapacket.h
Go to the documentation of this file.
1/* -*- Mode: c++ -*-
2 * Copyright (c) 2012 Digital Nirvana, Inc.
3 * Distributed as part of MythTV under GPL v2 and later.
4 */
5
6#ifndef RTP_DATA_PACKET_H
7#define RTP_DATA_PACKET_H
8
9#include <limits> // workaround QTBUG-90395
10
11#include <QtEndian>
12
13#include "libmythtv/mythtvexp.h"
14#include "udppacket.h"
15
29{
30 public:
31 RTPDataPacket(const RTPDataPacket&) = default;
32 explicit RTPDataPacket(const UDPPacket &o) : UDPPacket(o), m_off(0) { }
33 explicit RTPDataPacket(uint64_t key) : UDPPacket(key), m_off(0) { }
34 RTPDataPacket(void) : UDPPacket(0ULL) { }
35
37
38 bool IsValid(void) const override; // UDPPacket
39
40 uint GetVersion(void) const { return (m_data[0] >> 6) & 0x3; }
41 bool HasPadding(void) const { return (m_data[0] >> 5) & 0x1; }
42 bool HasExtension(void) const { return (m_data[0] >> 4) & 0x1; }
43 uint GetCSRCCount(void) const { return m_data[0] & 0xf; }
44
45 enum {
46 kPayLoadTypePCMAudio = 8,
47 kPayLoadTypeMPEGAudio = 12,
48 kPayLoadTypeH261Video = 31,
49 kPayLoadTypeMPEG2Video = 32,
50 kPayLoadTypeTS = 33,
51 kPayLoadTypeH263Video = 34,
52 };
53
54 uint GetPayloadType(void) const
55 {
56 return m_data[1] & 0x7f;
57 }
58
60 {
61 return qFromBigEndian(*reinterpret_cast<const uint16_t*>(m_data.data()+2));
62 }
63
64 uint GetTimeStamp(void) const
65 {
66 return qFromBigEndian(*reinterpret_cast<const uint32_t*>(m_data.data()+4));
67 }
68
70 {
71 return qFromBigEndian(*reinterpret_cast<const uint32_t*>(m_data.data()+8));
72 }
73
75 {
76 const uint32_t tmp =
77 *reinterpret_cast<const uint32_t*>(m_data.data() + 12 + 4 * i);
78 return qFromBigEndian(tmp);
79 }
80
81 uint GetPayloadOffset(void) const { return m_off; }
82
83 uint GetPaddingSize(void) const
84 {
85 if (!HasPadding())
86 return 0;
87 return m_data[m_data.size()-1];
88 }
89
90 protected:
91 mutable uint m_off { 0 };
92};
93
94#endif // RTP_DATA_PACKET_H
RTP Data Packet.
Definition: rtpdatapacket.h:29
uint GetSynchronizationSource(void) const
Definition: rtpdatapacket.h:69
uint GetCSRCCount(void) const
Definition: rtpdatapacket.h:43
uint GetTimeStamp(void) const
Definition: rtpdatapacket.h:64
uint GetPayloadType(void) const
Definition: rtpdatapacket.h:54
uint GetContributingSource(uint i) const
Definition: rtpdatapacket.h:74
bool HasExtension(void) const
Definition: rtpdatapacket.h:42
RTPDataPacket(const RTPDataPacket &)=default
uint GetSequenceNumber(void) const
Definition: rtpdatapacket.h:59
RTPDataPacket(const UDPPacket &o)
Definition: rtpdatapacket.h:32
uint GetPaddingSize(void) const
Definition: rtpdatapacket.h:83
RTPDataPacket & operator=(const RTPDataPacket &)=default
uint GetPayloadOffset(void) const
Definition: rtpdatapacket.h:81
bool HasPadding(void) const
Definition: rtpdatapacket.h:41
RTPDataPacket(void)
Definition: rtpdatapacket.h:34
RTPDataPacket(uint64_t key)
Definition: rtpdatapacket.h:33
uint GetVersion(void) const
Definition: rtpdatapacket.h:40
UDP Packet.
Definition: udppacket.h:21
virtual bool IsValid(void) const
IsValid() must return true before any data access methods are called, other than GetDataReference() a...
Definition: udppacket.h:32
unsigned int uint
Definition: compat.h:60
static uint32_t * tmp
Definition: goom_core.cpp:28
unsigned short uint16_t
Definition: iso6937tables.h:3
#define MTV_PUBLIC
Definition: mythtvexp.h:8