1 /*
2 * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "modules/rtp_rtcp/source/video_rtp_depacketizer_generic.h"
12
13 #include <stdint.h>
14
15 #include "absl/types/optional.h"
16 #include "rtc_base/copy_on_write_buffer.h"
17 #include "test/gmock.h"
18 #include "test/gtest.h"
19
20 namespace webrtc {
21 namespace {
22
23 using ::testing::SizeIs;
24
TEST(VideoRtpDepacketizerGeneric,NonExtendedHeaderNoFrameId)25 TEST(VideoRtpDepacketizerGeneric, NonExtendedHeaderNoFrameId) {
26 const size_t kRtpPayloadSize = 10;
27 const uint8_t kPayload[kRtpPayloadSize] = {0x01};
28 rtc::CopyOnWriteBuffer rtp_payload(kPayload);
29
30 VideoRtpDepacketizerGeneric depacketizer;
31 absl::optional<VideoRtpDepacketizer::ParsedRtpPayload> parsed =
32 depacketizer.Parse(rtp_payload);
33
34 ASSERT_TRUE(parsed);
35 EXPECT_EQ(parsed->video_header.generic, absl::nullopt);
36 EXPECT_THAT(parsed->video_payload, SizeIs(kRtpPayloadSize - 1));
37 }
38
TEST(VideoRtpDepacketizerGeneric,ExtendedHeaderParsesFrameId)39 TEST(VideoRtpDepacketizerGeneric, ExtendedHeaderParsesFrameId) {
40 const size_t kRtpPayloadSize = 10;
41 const uint8_t kPayload[kRtpPayloadSize] = {0x05, 0x13, 0x37};
42 rtc::CopyOnWriteBuffer rtp_payload(kPayload);
43
44 VideoRtpDepacketizerGeneric depacketizer;
45 absl::optional<VideoRtpDepacketizer::ParsedRtpPayload> parsed =
46 depacketizer.Parse(rtp_payload);
47
48 ASSERT_TRUE(parsed);
49 const auto* generic_header = absl::get_if<RTPVideoHeaderLegacyGeneric>(
50 &parsed->video_header.video_type_header);
51 ASSERT_TRUE(generic_header);
52 EXPECT_EQ(generic_header->picture_id, 0x1337);
53 EXPECT_THAT(parsed->video_payload, SizeIs(kRtpPayloadSize - 3));
54 }
55
TEST(VideoRtpDepacketizerGeneric,PassRtpPayloadAsVideoPayload)56 TEST(VideoRtpDepacketizerGeneric, PassRtpPayloadAsVideoPayload) {
57 const uint8_t kPayload[] = {0x01, 0x25, 0x52};
58 rtc::CopyOnWriteBuffer rtp_payload(kPayload);
59
60 VideoRtpDepacketizerGeneric depacketizer;
61 absl::optional<VideoRtpDepacketizer::ParsedRtpPayload> parsed =
62 depacketizer.Parse(rtp_payload);
63
64 ASSERT_TRUE(parsed);
65 // Check there was no memcpy involved by verifying return and original buffers
66 // point to the same buffer.
67 EXPECT_EQ(parsed->video_payload.cdata(), rtp_payload.cdata() + 1);
68 }
69
70 } // namespace
71 } // namespace webrtc
72