15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/*
25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle
35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2011 Google Inc.
45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without
65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met:
75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer.
105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer in the documentation
125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     and/or other materials provided with the distribution.
135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  3. The name of the author may not be used to endorse or promote products
145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     derived from this software without specific prior written permission.
155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */
275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/flags.h"
295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/videoframe_unittest.h"
305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/webrtc/webrtcvideoframe.h"
315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgextern int FLAG_yuvconverter_repeat;  // From lmivideoframe_unittest.cc.
335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass WebRtcVideoFrameTest : public VideoFrameTest<cricket::WebRtcVideoFrame> {
355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  WebRtcVideoFrameTest() {
375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    repeat_ = FLAG_yuvconverter_repeat;
385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void TestInit(int cropped_width, int cropped_height) {
415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    const int frame_width = 1920;
425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    const int frame_height = 1080;
435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    // Build the CapturedFrame.
455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    cricket::CapturedFrame captured_frame;
465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.fourcc = cricket::FOURCC_I420;
475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.pixel_width = 1;
485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.pixel_height = 1;
495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.elapsed_time = 1234;
505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.time_stamp = 5678;
515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.rotation = 0;
525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.width = frame_width;
535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.height = frame_height;
545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.data_size = (frame_width * frame_height) +
555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        ((frame_width + 1) / 2) * ((frame_height + 1) / 2) * 2;
56582fe818e571fa2571267f5e369715188472f352wu@webrtc.org    talk_base::scoped_ptr<uint8[]> captured_frame_buffer(
575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        new uint8[captured_frame.data_size]);
585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    captured_frame.data = captured_frame_buffer.get();
595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    // Create the new frame from the CapturedFrame.
615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    cricket::WebRtcVideoFrame frame;
625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_TRUE(frame.Init(&captured_frame, cropped_width, cropped_height));
635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    // Verify the new frame.
655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(1u, frame.GetPixelWidth());
665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(1u, frame.GetPixelHeight());
675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(1234, frame.GetElapsedTime());
685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(5678, frame.GetTimeStamp());
695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(0, frame.GetRotation());
705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    // The size of the new frame should have been cropped to multiple of 4.
715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(static_cast<size_t>(cropped_width & ~3), frame.GetWidth());
725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    EXPECT_EQ(static_cast<size_t>(cropped_height & ~3), frame.GetHeight());
735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#define TEST_WEBRTCVIDEOFRAME(X) TEST_F(WebRtcVideoFrameTest, X) { \
775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  VideoFrameTest<cricket::WebRtcVideoFrame>::X(); \
785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420)
815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI422)
825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYuy2)
835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYuy2Unaligned)
845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYuy2Wide)
855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYV12)
865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructUyvy)
875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructM420)
885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructQ420)
895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV21)
905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV12)
915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructABGR)
925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructARGB)
935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructARGBWide)
945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructBGRA)
955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(Construct24BG)
965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructRaw)
975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructRGB565)
985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructARGB1555)
995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructARGB4444)
1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420Mirror)
1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420Rotate0)
1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420Rotate90)
1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420Rotate180)
1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420Rotate270)
1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYV12Rotate0)
1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYV12Rotate90)
1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYV12Rotate180)
1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYV12Rotate270)
1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV12Rotate0)
1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV12Rotate90)
1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV12Rotate180)
1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV12Rotate270)
1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV21Rotate0)
1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV21Rotate90)
1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV21Rotate180)
1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructNV21Rotate270)
1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructUYVYRotate0)
1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructUYVYRotate90)
1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructUYVYRotate180)
1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructUYVYRotate270)
1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYUY2Rotate0)
1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYUY2Rotate90)
1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYUY2Rotate180)
1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructYUY2Rotate270)
1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI4201Pixel)
1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI4205Pixel)
1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TODO(juberti): WebRtcVideoFrame does not support horizontal crop.
1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Re-evaluate once it supports 3 independent planes, since we might want to
1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// just Init normally and then crop by adjusting pointers.
1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructI420CropHorizontal)
1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructI420CropVertical)
1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TODO(juberti): WebRtcVideoFrame is not currently refcounted.
1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructCopy)
1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructCopyIsRef)
1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConstructBlack)
1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TODO(fbarchard): Implement Jpeg
1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructMjpgI420)
1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructMjpgI422)
1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructMjpgI444)
1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructMjpgI411)
1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructMjpgI400)
1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateMjpgI420)
1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateMjpgI422)
1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateMjpgI444)
1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateMjpgI411)
1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateMjpgI400)
1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ValidateI420)
1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ValidateI420SmallSize)
1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ValidateI420LargeSize)
1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ValidateI420HugeSize)
1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateMjpgI420InvalidSize)
1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ValidateI420InvalidSize)
1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TODO(fbarchard): WebRtcVideoFrame does not support odd sizes.
1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Re-evaluate once WebRTC switches to libyuv
1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructYuy2AllSizes)
1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructARGBAllSizes)
1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(Reset)
1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToABGRBuffer)
1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToABGRBufferStride)
1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToABGRBufferInverted)
1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGB1555Buffer)
1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGB1555BufferStride)
1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGB1555BufferInverted)
1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGB4444Buffer)
1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGB4444BufferStride)
1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGB4444BufferInverted)
1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGBBuffer)
1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGBBufferStride)
1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToARGBBufferInverted)
1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBGRABuffer)
1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBGRABufferStride)
1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBGRABufferInverted)
1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRAWBuffer)
1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRAWBufferStride)
1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRAWBufferInverted)
1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRGB24Buffer)
1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRGB24BufferStride)
1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRGB24BufferInverted)
1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRGB565Buffer)
1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRGB565BufferStride)
1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToRGB565BufferInverted)
1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerBGGRBuffer)
1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerBGGRBufferStride)
1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerBGGRBufferInverted)
1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerGRBGBuffer)
1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerGRBGBufferStride)
1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerGRBGBufferInverted)
1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerGBRGBuffer)
1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerGBRGBufferStride)
1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerGBRGBufferInverted)
1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerRGGBBuffer)
1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerRGGBBufferStride)
1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToBayerRGGBBufferInverted)
1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToI400Buffer)
1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToI400BufferStride)
1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToI400BufferInverted)
1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToYUY2Buffer)
2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToYUY2BufferStride)
2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToYUY2BufferInverted)
2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToUYVYBuffer)
2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToUYVYBufferStride)
2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertToUYVYBufferInverted)
2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromABGRBuffer)
2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromABGRBufferStride)
2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromABGRBufferInverted)
2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGB1555Buffer)
2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGB1555BufferStride)
2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGB1555BufferInverted)
2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGB4444Buffer)
2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGB4444BufferStride)
2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGB4444BufferInverted)
2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGBBuffer)
2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGBBufferStride)
2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromARGBBufferInverted)
2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBGRABuffer)
2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBGRABufferStride)
2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBGRABufferInverted)
2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRAWBuffer)
2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRAWBufferStride)
2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRAWBufferInverted)
2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRGB24Buffer)
2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRGB24BufferStride)
2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRGB24BufferInverted)
2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRGB565Buffer)
2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRGB565BufferStride)
2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromRGB565BufferInverted)
2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerBGGRBuffer)
2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerBGGRBufferStride)
2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerBGGRBufferInverted)
2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerGRBGBuffer)
2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerGRBGBufferStride)
2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerGRBGBufferInverted)
2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerGBRGBuffer)
2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerGBRGBufferStride)
2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerGBRGBufferInverted)
2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerRGGBBuffer)
2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerRGGBBufferStride)
2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromBayerRGGBBufferInverted)
2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromI400Buffer)
2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromI400BufferStride)
2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromI400BufferInverted)
2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromYUY2Buffer)
2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromYUY2BufferStride)
2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromYUY2BufferInverted)
2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromUYVYBuffer)
2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromUYVYBufferStride)
2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertFromUYVYBufferInverted)
2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConvertToI422Buffer)
2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertARGBToBayerGRBG)
2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertARGBToBayerGBRG)
2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertARGBToBayerBGGR)
2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(ConvertARGBToBayerRGGB)
2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(CopyToBuffer)
2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(CopyToFrame)
2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(Write)
2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(CopyToBuffer1Pixel)
2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// TEST_WEBRTCVIDEOFRAME(ConstructARGBBlackWhitePixel)
2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(StretchToFrame)
2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(Copy)
2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(CopyIsRef)
2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_WEBRTCVIDEOFRAME(MakeExclusive)
2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// These functions test implementation-specific details.
267a10b9ec8e87a37dbe0ce2f676aaf94a91e376f9ewu@webrtc.orgTEST_F(WebRtcVideoFrameTest, Alias) {
2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::WebRtcVideoFrame frame1, frame2;
2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
270a10b9ec8e87a37dbe0ce2f676aaf94a91e376f9ewu@webrtc.org  const int64 time_stamp = INT64_C(0x7FFFFFFFFFFFFFF0);
2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  frame1.SetTimeStamp(time_stamp);
2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(time_stamp, frame1.GetTimeStamp());
273a10b9ec8e87a37dbe0ce2f676aaf94a91e376f9ewu@webrtc.org  frame2.Alias(frame1.frame()->Buffer(), frame1.frame()->Size(),
274a10b9ec8e87a37dbe0ce2f676aaf94a91e376f9ewu@webrtc.org               kWidth, kHeight, 1, 1,
275a10b9ec8e87a37dbe0ce2f676aaf94a91e376f9ewu@webrtc.org               frame1.GetElapsedTime(), frame1.GetTimeStamp(), 0);
2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(IsEqual(frame1, frame2, 0));
2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
2785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Tests the Init function with different cropped size.
2805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(WebRtcVideoFrameTest, InitEvenSize) {
2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  TestInit(640, 360);
2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(WebRtcVideoFrameTest, InitOddWidth) {
2855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  TestInit(601, 480);
2865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
2875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(WebRtcVideoFrameTest, InitOddHeight) {
2895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  TestInit(360, 765);
2905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
2915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(WebRtcVideoFrameTest, InitOddWidthHeight) {
2935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  TestInit(355, 1021);
2945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
295