xref: /aosp_15_r20/external/webrtc/modules/rtp_rtcp/source/video_rtp_depacketizer_generic_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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