Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: webrtc/media/base/videoframe_unittest.h

Issue 2287233002: Delete cricket::VideoFrame::ConvertToRgbBuffer. (Closed)
Patch Set: Replace calls to ConvertFromI420 with more specific libyuv conversion. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 ASSERT_TRUE(ms.get() != NULL); 761 ASSERT_TRUE(ms.get() != NULL);
762 std::unique_ptr<T> frame1 = ConvertRgb(ms.get(), cricket::FOURCC_RAW, 762 std::unique_ptr<T> frame1 = ConvertRgb(ms.get(), cricket::FOURCC_RAW,
763 kWidth, kHeight); 763 kWidth, kHeight);
764 ASSERT_TRUE(frame1); 764 ASSERT_TRUE(frame1);
765 T frame2; 765 T frame2;
766 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_RAW, 766 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_RAW,
767 kWidth, kHeight, &frame2)); 767 kWidth, kHeight, &frame2));
768 EXPECT_TRUE(IsEqual(*frame1, frame2, 2)); 768 EXPECT_TRUE(IsEqual(*frame1, frame2, 2));
769 } 769 }
770 770
771 // Test constructing an image from a RGB565 buffer
772 void ConstructRGB565() {
773 T frame1, frame2;
774 size_t out_size = kWidth * kHeight * 2;
775 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
776 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
777 T frame;
778 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
779 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_RGBP,
780 out,
781 out_size, kWidth * 2));
782 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_RGBP,
783 kWidth, kHeight, &frame2));
784 EXPECT_TRUE(IsEqual(frame1, frame2, 20));
785 }
786
787 // Test constructing an image from a ARGB1555 buffer
788 void ConstructARGB1555() {
789 T frame1, frame2;
790 size_t out_size = kWidth * kHeight * 2;
791 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
792 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
793 T frame;
794 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
795 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_RGBO,
796 out,
797 out_size, kWidth * 2));
798 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_RGBO,
799 kWidth, kHeight, &frame2));
800 EXPECT_TRUE(IsEqual(frame1, frame2, 20));
801 }
802
803 // Test constructing an image from a ARGB4444 buffer
804 void ConstructARGB4444() {
805 T frame1, frame2;
806 size_t out_size = kWidth * kHeight * 2;
807 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
808 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
809 T frame;
810 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
811 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_R444,
812 out,
813 out_size, kWidth * 2));
814 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_R444,
815 kWidth, kHeight, &frame2));
816 EXPECT_TRUE(IsEqual(frame1, frame2, 20));
817 }
818
819 // Macro to help test different rotations 771 // Macro to help test different rotations
820 #define TEST_MIRROR(FOURCC, BPP) \ 772 #define TEST_MIRROR(FOURCC, BPP) \
821 void Construct##FOURCC##Mirror() { \ 773 void Construct##FOURCC##Mirror() { \
822 T frame1, frame2, frame3; \ 774 T frame1, frame2, frame3; \
823 std::unique_ptr<rtc::MemoryStream> ms( \ 775 std::unique_ptr<rtc::MemoryStream> ms( \
824 CreateYuvSample(kWidth, kHeight, BPP)); \ 776 CreateYuvSample(kWidth, kHeight, BPP)); \
825 ASSERT_TRUE(ms.get() != NULL); \ 777 ASSERT_TRUE(ms.get() != NULL); \
826 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_##FOURCC, kWidth, \ 778 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_##FOURCC, kWidth, \
827 -kHeight, kWidth, kHeight, \ 779 -kHeight, kWidth, kHeight, \
828 webrtc::kVideoRotation_180, &frame1)); \ 780 webrtc::kVideoRotation_180, &frame1)); \
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 sizeof(pixels5x5), 0, 956 sizeof(pixels5x5), 0,
1005 webrtc::kVideoRotation_0)); 957 webrtc::kVideoRotation_0));
1006 } 958 }
1007 EXPECT_EQ(5, frame.width()); 959 EXPECT_EQ(5, frame.width());
1008 EXPECT_EQ(5, frame.height()); 960 EXPECT_EQ(5, frame.height());
1009 EXPECT_EQ(5, frame.video_frame_buffer()->StrideY()); 961 EXPECT_EQ(5, frame.video_frame_buffer()->StrideY());
1010 EXPECT_EQ(3, frame.video_frame_buffer()->StrideU()); 962 EXPECT_EQ(3, frame.video_frame_buffer()->StrideU());
1011 EXPECT_EQ(3, frame.video_frame_buffer()->StrideV()); 963 EXPECT_EQ(3, frame.video_frame_buffer()->StrideV());
1012 } 964 }
1013 965
1014 // Test 1 pixel edge case image ARGB buffer.
1015 void ConstructARGB1Pixel() {
1016 T frame;
1017 uint8_t pixel[4] = {64, 128, 192, 255};
1018 for (int i = 0; i < repeat_; ++i) {
1019 EXPECT_TRUE(frame.Init(cricket::FOURCC_ARGB, 1, 1, 1, 1, pixel,
1020 sizeof(pixel), 0,
1021 webrtc::kVideoRotation_0));
1022 }
1023 // Convert back to ARGB.
1024 size_t out_size = 4;
1025 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
1026 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
1027
1028 EXPECT_EQ(out_size, frame.ConvertToRgbBuffer(cricket::FOURCC_ARGB,
1029 out,
1030 out_size, // buffer size
1031 out_size)); // stride
1032 #ifdef USE_LMI_CONVERT
1033 // TODO(fbarchard): Expected to fail, but not crash.
1034 EXPECT_FALSE(IsPlaneEqual("argb", pixel, 4, out, 4, 3, 1, 2));
1035 #else
1036 // TODO(fbarchard): Check for overwrite.
1037 EXPECT_TRUE(IsPlaneEqual("argb", pixel, 4, out, 4, 3, 1, 2));
1038 #endif
1039 }
1040
1041 // Test Black, White and Grey pixels.
1042 void ConstructARGBBlackWhitePixel() {
1043 T frame;
1044 uint8_t pixel[10 * 4] = {0, 0, 0, 255, // Black.
1045 0, 0, 0, 255, // Black.
1046 64, 64, 64, 255, // Dark Grey.
1047 64, 64, 64, 255, // Dark Grey.
1048 128, 128, 128, 255, // Grey.
1049 128, 128, 128, 255, // Grey.
1050 196, 196, 196, 255, // Light Grey.
1051 196, 196, 196, 255, // Light Grey.
1052 255, 255, 255, 255, // White.
1053 255, 255, 255, 255}; // White.
1054
1055 for (int i = 0; i < repeat_; ++i) {
1056 EXPECT_TRUE(frame.Init(cricket::FOURCC_ARGB, 10, 1, 10, 1, pixel,
1057 sizeof(pixel), 1, 1, 0,
1058 webrtc::kVideoRotation_0));
1059 }
1060 // Convert back to ARGB
1061 size_t out_size = 10 * 4;
1062 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
1063 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
1064
1065 EXPECT_EQ(out_size, frame.ConvertToRgbBuffer(cricket::FOURCC_ARGB,
1066 out,
1067 out_size, // buffer size.
1068 out_size)); // stride.
1069 EXPECT_TRUE(IsPlaneEqual("argb", pixel, out_size,
1070 out, out_size,
1071 out_size, 1, 2));
1072 }
1073
1074 // Test constructing an image from an I420 buffer with horizontal cropping. 966 // Test constructing an image from an I420 buffer with horizontal cropping.
1075 void ConstructI420CropHorizontal() { 967 void ConstructI420CropHorizontal() {
1076 T frame1, frame2; 968 T frame1, frame2;
1077 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 969 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
1078 ASSERT_TRUE(LoadFrame(kImageFilename, kYuvExtension, 970 ASSERT_TRUE(LoadFrame(kImageFilename, kYuvExtension,
1079 cricket::FOURCC_I420, kWidth, kHeight, 971 cricket::FOURCC_I420, kWidth, kHeight,
1080 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0, 972 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0,
1081 &frame2)); 973 &frame2));
1082 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 0)); 974 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 0));
1083 } 975 }
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 kOddWidth + i, kOddHeight + j, &frame2)); 1324 kOddWidth + i, kOddHeight + j, &frame2));
1433 EXPECT_TRUE(IsEqual(*frame1, frame2, 64)); 1325 EXPECT_TRUE(IsEqual(*frame1, frame2, 64));
1434 } 1326 }
1435 } 1327 }
1436 } 1328 }
1437 1329
1438 ////////////////////// 1330 //////////////////////
1439 // Conversion tests // 1331 // Conversion tests //
1440 ////////////////////// 1332 //////////////////////
1441 1333
1442 enum ToFrom { TO, FROM };
1443
1444 // Helper function for test converting from I420 to packed formats.
1445 inline void ConvertToBuffer(int bpp,
1446 int rowpad,
1447 bool invert,
1448 ToFrom to_from,
1449 int error,
1450 uint32_t fourcc,
1451 int (*RGBToI420)(const uint8_t* src_frame,
1452 int src_stride_frame,
1453 uint8_t* dst_y,
1454 int dst_stride_y,
1455 uint8_t* dst_u,
1456 int dst_stride_u,
1457 uint8_t* dst_v,
1458 int dst_stride_v,
1459 int width,
1460 int height)) {
1461 T frame1, frame2;
1462 int repeat_to = (to_from == TO) ? repeat_ : 1;
1463 int repeat_from = (to_from == FROM) ? repeat_ : 1;
1464
1465 int astride = kWidth * bpp + rowpad;
1466 size_t out_size = astride * kHeight;
1467 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment + 1]);
1468 memset(outbuf.get(), 0, out_size + kAlignment + 1);
1469 uint8_t* outtop = ALIGNP(outbuf.get(), kAlignment);
1470 uint8_t* out = outtop;
1471 int stride = astride;
1472 if (invert) {
1473 out += (kHeight - 1) * stride; // Point to last row.
1474 stride = -stride;
1475 }
1476 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
1477
1478 for (int i = 0; i < repeat_to; ++i) {
1479 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(fourcc,
1480 out,
1481 out_size, stride));
1482 }
1483 frame2.InitToEmptyBuffer(kWidth, kHeight);
1484 for (int i = 0; i < repeat_from; ++i) {
1485 EXPECT_EQ(0, RGBToI420(out, stride,
1486 frame2.video_frame_buffer()->MutableDataY(),
1487 frame2.video_frame_buffer()->StrideY(),
1488 frame2.video_frame_buffer()->MutableDataU(),
1489 frame2.video_frame_buffer()->StrideU(),
1490 frame2.video_frame_buffer()->MutableDataV(),
1491 frame2.video_frame_buffer()->StrideV(),
1492 kWidth, kHeight));
1493 }
1494 if (rowpad) {
1495 EXPECT_EQ(0, outtop[kWidth * bpp]); // Ensure stride skipped end of row.
1496 EXPECT_NE(0, outtop[astride]); // Ensure pixel at start of 2nd row.
1497 } else {
1498 EXPECT_NE(0, outtop[kWidth * bpp]); // Expect something to be here.
1499 }
1500 EXPECT_EQ(0, outtop[out_size]); // Ensure no overrun.
1501 EXPECT_TRUE(IsEqual(frame1, frame2, error));
1502 }
1503
1504 static const int kError = 20;
1505 static const int kErrorHigh = 40;
1506 static const int kOddStride = 23;
1507
1508 // Tests ConvertToRGBBuffer formats.
1509 void ConvertToARGBBuffer() {
1510 ConvertToBuffer(4, 0, false, TO, kError,
1511 cricket::FOURCC_ARGB, libyuv::ARGBToI420);
1512 }
1513 void ConvertToBGRABuffer() {
1514 ConvertToBuffer(4, 0, false, TO, kError,
1515 cricket::FOURCC_BGRA, libyuv::BGRAToI420);
1516 }
1517 void ConvertToABGRBuffer() {
1518 ConvertToBuffer(4, 0, false, TO, kError,
1519 cricket::FOURCC_ABGR, libyuv::ABGRToI420);
1520 }
1521 void ConvertToRGB24Buffer() {
1522 ConvertToBuffer(3, 0, false, TO, kError,
1523 cricket::FOURCC_24BG, libyuv::RGB24ToI420);
1524 }
1525 void ConvertToRAWBuffer() {
1526 ConvertToBuffer(3, 0, false, TO, kError,
1527 cricket::FOURCC_RAW, libyuv::RAWToI420);
1528 }
1529 void ConvertToRGB565Buffer() {
1530 ConvertToBuffer(2, 0, false, TO, kError,
1531 cricket::FOURCC_RGBP, libyuv::RGB565ToI420);
1532 }
1533 void ConvertToARGB1555Buffer() {
1534 ConvertToBuffer(2, 0, false, TO, kError,
1535 cricket::FOURCC_RGBO, libyuv::ARGB1555ToI420);
1536 }
1537 void ConvertToARGB4444Buffer() {
1538 ConvertToBuffer(2, 0, false, TO, kError,
1539 cricket::FOURCC_R444, libyuv::ARGB4444ToI420);
1540 }
1541 void ConvertToI400Buffer() {
1542 ConvertToBuffer(1, 0, false, TO, 128,
1543 cricket::FOURCC_I400, libyuv::I400ToI420);
1544 }
1545 void ConvertToYUY2Buffer() {
1546 ConvertToBuffer(2, 0, false, TO, kError,
1547 cricket::FOURCC_YUY2, libyuv::YUY2ToI420);
1548 }
1549 void ConvertToUYVYBuffer() {
1550 ConvertToBuffer(2, 0, false, TO, kError,
1551 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1552 }
1553
1554 // Tests ConvertToRGBBuffer formats with odd stride.
1555 void ConvertToARGBBufferStride() {
1556 ConvertToBuffer(4, kOddStride, false, TO, kError,
1557 cricket::FOURCC_ARGB, libyuv::ARGBToI420);
1558 }
1559 void ConvertToBGRABufferStride() {
1560 ConvertToBuffer(4, kOddStride, false, TO, kError,
1561 cricket::FOURCC_BGRA, libyuv::BGRAToI420);
1562 }
1563 void ConvertToABGRBufferStride() {
1564 ConvertToBuffer(4, kOddStride, false, TO, kError,
1565 cricket::FOURCC_ABGR, libyuv::ABGRToI420);
1566 }
1567 void ConvertToRGB24BufferStride() {
1568 ConvertToBuffer(3, kOddStride, false, TO, kError,
1569 cricket::FOURCC_24BG, libyuv::RGB24ToI420);
1570 }
1571 void ConvertToRAWBufferStride() {
1572 ConvertToBuffer(3, kOddStride, false, TO, kError,
1573 cricket::FOURCC_RAW, libyuv::RAWToI420);
1574 }
1575 void ConvertToRGB565BufferStride() {
1576 ConvertToBuffer(2, kOddStride, false, TO, kError,
1577 cricket::FOURCC_RGBP, libyuv::RGB565ToI420);
1578 }
1579 void ConvertToARGB1555BufferStride() {
1580 ConvertToBuffer(2, kOddStride, false, TO, kError,
1581 cricket::FOURCC_RGBO, libyuv::ARGB1555ToI420);
1582 }
1583 void ConvertToARGB4444BufferStride() {
1584 ConvertToBuffer(2, kOddStride, false, TO, kError,
1585 cricket::FOURCC_R444, libyuv::ARGB4444ToI420);
1586 }
1587 void ConvertToI400BufferStride() {
1588 ConvertToBuffer(1, kOddStride, false, TO, 128,
1589 cricket::FOURCC_I400, libyuv::I400ToI420);
1590 }
1591 void ConvertToYUY2BufferStride() {
1592 ConvertToBuffer(2, kOddStride, false, TO, kError,
1593 cricket::FOURCC_YUY2, libyuv::YUY2ToI420);
1594 }
1595 void ConvertToUYVYBufferStride() {
1596 ConvertToBuffer(2, kOddStride, false, TO, kError,
1597 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1598 }
1599
1600 // Tests ConvertToRGBBuffer formats with negative stride to invert image.
1601 void ConvertToARGBBufferInverted() {
1602 ConvertToBuffer(4, 0, true, TO, kError,
1603 cricket::FOURCC_ARGB, libyuv::ARGBToI420);
1604 }
1605 void ConvertToBGRABufferInverted() {
1606 ConvertToBuffer(4, 0, true, TO, kError,
1607 cricket::FOURCC_BGRA, libyuv::BGRAToI420);
1608 }
1609 void ConvertToABGRBufferInverted() {
1610 ConvertToBuffer(4, 0, true, TO, kError,
1611 cricket::FOURCC_ABGR, libyuv::ABGRToI420);
1612 }
1613 void ConvertToRGB24BufferInverted() {
1614 ConvertToBuffer(3, 0, true, TO, kError,
1615 cricket::FOURCC_24BG, libyuv::RGB24ToI420);
1616 }
1617 void ConvertToRAWBufferInverted() {
1618 ConvertToBuffer(3, 0, true, TO, kError,
1619 cricket::FOURCC_RAW, libyuv::RAWToI420);
1620 }
1621 void ConvertToRGB565BufferInverted() {
1622 ConvertToBuffer(2, 0, true, TO, kError,
1623 cricket::FOURCC_RGBP, libyuv::RGB565ToI420);
1624 }
1625 void ConvertToARGB1555BufferInverted() {
1626 ConvertToBuffer(2, 0, true, TO, kError,
1627 cricket::FOURCC_RGBO, libyuv::ARGB1555ToI420);
1628 }
1629 void ConvertToARGB4444BufferInverted() {
1630 ConvertToBuffer(2, 0, true, TO, kError,
1631 cricket::FOURCC_R444, libyuv::ARGB4444ToI420);
1632 }
1633 void ConvertToI400BufferInverted() {
1634 ConvertToBuffer(1, 0, true, TO, 128,
1635 cricket::FOURCC_I400, libyuv::I400ToI420);
1636 }
1637 void ConvertToYUY2BufferInverted() {
1638 ConvertToBuffer(2, 0, true, TO, kError,
1639 cricket::FOURCC_YUY2, libyuv::YUY2ToI420);
1640 }
1641 void ConvertToUYVYBufferInverted() {
1642 ConvertToBuffer(2, 0, true, TO, kError,
1643 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1644 }
1645
1646 // Tests ConvertFrom formats.
1647 void ConvertFromARGBBuffer() {
1648 ConvertToBuffer(4, 0, false, FROM, kError,
1649 cricket::FOURCC_ARGB, libyuv::ARGBToI420);
1650 }
1651 void ConvertFromBGRABuffer() {
1652 ConvertToBuffer(4, 0, false, FROM, kError,
1653 cricket::FOURCC_BGRA, libyuv::BGRAToI420);
1654 }
1655 void ConvertFromABGRBuffer() {
1656 ConvertToBuffer(4, 0, false, FROM, kError,
1657 cricket::FOURCC_ABGR, libyuv::ABGRToI420);
1658 }
1659 void ConvertFromRGB24Buffer() {
1660 ConvertToBuffer(3, 0, false, FROM, kError,
1661 cricket::FOURCC_24BG, libyuv::RGB24ToI420);
1662 }
1663 void ConvertFromRAWBuffer() {
1664 ConvertToBuffer(3, 0, false, FROM, kError,
1665 cricket::FOURCC_RAW, libyuv::RAWToI420);
1666 }
1667 void ConvertFromRGB565Buffer() {
1668 ConvertToBuffer(2, 0, false, FROM, kError,
1669 cricket::FOURCC_RGBP, libyuv::RGB565ToI420);
1670 }
1671 void ConvertFromARGB1555Buffer() {
1672 ConvertToBuffer(2, 0, false, FROM, kError,
1673 cricket::FOURCC_RGBO, libyuv::ARGB1555ToI420);
1674 }
1675 void ConvertFromARGB4444Buffer() {
1676 ConvertToBuffer(2, 0, false, FROM, kError,
1677 cricket::FOURCC_R444, libyuv::ARGB4444ToI420);
1678 }
1679 void ConvertFromI400Buffer() {
1680 ConvertToBuffer(1, 0, false, FROM, 128,
1681 cricket::FOURCC_I400, libyuv::I400ToI420);
1682 }
1683 void ConvertFromYUY2Buffer() {
1684 ConvertToBuffer(2, 0, false, FROM, kError,
1685 cricket::FOURCC_YUY2, libyuv::YUY2ToI420);
1686 }
1687 void ConvertFromUYVYBuffer() {
1688 ConvertToBuffer(2, 0, false, FROM, kError,
1689 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1690 }
1691
1692 // Tests ConvertFrom formats with odd stride.
1693 void ConvertFromARGBBufferStride() {
1694 ConvertToBuffer(4, kOddStride, false, FROM, kError,
1695 cricket::FOURCC_ARGB, libyuv::ARGBToI420);
1696 }
1697 void ConvertFromBGRABufferStride() {
1698 ConvertToBuffer(4, kOddStride, false, FROM, kError,
1699 cricket::FOURCC_BGRA, libyuv::BGRAToI420);
1700 }
1701 void ConvertFromABGRBufferStride() {
1702 ConvertToBuffer(4, kOddStride, false, FROM, kError,
1703 cricket::FOURCC_ABGR, libyuv::ABGRToI420);
1704 }
1705 void ConvertFromRGB24BufferStride() {
1706 ConvertToBuffer(3, kOddStride, false, FROM, kError,
1707 cricket::FOURCC_24BG, libyuv::RGB24ToI420);
1708 }
1709 void ConvertFromRAWBufferStride() {
1710 ConvertToBuffer(3, kOddStride, false, FROM, kError,
1711 cricket::FOURCC_RAW, libyuv::RAWToI420);
1712 }
1713 void ConvertFromRGB565BufferStride() {
1714 ConvertToBuffer(2, kOddStride, false, FROM, kError,
1715 cricket::FOURCC_RGBP, libyuv::RGB565ToI420);
1716 }
1717 void ConvertFromARGB1555BufferStride() {
1718 ConvertToBuffer(2, kOddStride, false, FROM, kError,
1719 cricket::FOURCC_RGBO, libyuv::ARGB1555ToI420);
1720 }
1721 void ConvertFromARGB4444BufferStride() {
1722 ConvertToBuffer(2, kOddStride, false, FROM, kError,
1723 cricket::FOURCC_R444, libyuv::ARGB4444ToI420);
1724 }
1725 void ConvertFromI400BufferStride() {
1726 ConvertToBuffer(1, kOddStride, false, FROM, 128,
1727 cricket::FOURCC_I400, libyuv::I400ToI420);
1728 }
1729 void ConvertFromYUY2BufferStride() {
1730 ConvertToBuffer(2, kOddStride, false, FROM, kError,
1731 cricket::FOURCC_YUY2, libyuv::YUY2ToI420);
1732 }
1733 void ConvertFromUYVYBufferStride() {
1734 ConvertToBuffer(2, kOddStride, false, FROM, kError,
1735 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1736 }
1737
1738 // Tests ConvertFrom formats with negative stride to invert image.
1739 void ConvertFromARGBBufferInverted() {
1740 ConvertToBuffer(4, 0, true, FROM, kError,
1741 cricket::FOURCC_ARGB, libyuv::ARGBToI420);
1742 }
1743 void ConvertFromBGRABufferInverted() {
1744 ConvertToBuffer(4, 0, true, FROM, kError,
1745 cricket::FOURCC_BGRA, libyuv::BGRAToI420);
1746 }
1747 void ConvertFromABGRBufferInverted() {
1748 ConvertToBuffer(4, 0, true, FROM, kError,
1749 cricket::FOURCC_ABGR, libyuv::ABGRToI420);
1750 }
1751 void ConvertFromRGB24BufferInverted() {
1752 ConvertToBuffer(3, 0, true, FROM, kError,
1753 cricket::FOURCC_24BG, libyuv::RGB24ToI420);
1754 }
1755 void ConvertFromRAWBufferInverted() {
1756 ConvertToBuffer(3, 0, true, FROM, kError,
1757 cricket::FOURCC_RAW, libyuv::RAWToI420);
1758 }
1759 void ConvertFromRGB565BufferInverted() {
1760 ConvertToBuffer(2, 0, true, FROM, kError,
1761 cricket::FOURCC_RGBP, libyuv::RGB565ToI420);
1762 }
1763 void ConvertFromARGB1555BufferInverted() {
1764 ConvertToBuffer(2, 0, true, FROM, kError,
1765 cricket::FOURCC_RGBO, libyuv::ARGB1555ToI420);
1766 }
1767 void ConvertFromARGB4444BufferInverted() {
1768 ConvertToBuffer(2, 0, true, FROM, kError,
1769 cricket::FOURCC_R444, libyuv::ARGB4444ToI420);
1770 }
1771 void ConvertFromI400BufferInverted() {
1772 ConvertToBuffer(1, 0, true, FROM, 128,
1773 cricket::FOURCC_I400, libyuv::I400ToI420);
1774 }
1775 void ConvertFromYUY2BufferInverted() {
1776 ConvertToBuffer(2, 0, true, FROM, kError,
1777 cricket::FOURCC_YUY2, libyuv::YUY2ToI420);
1778 }
1779 void ConvertFromUYVYBufferInverted() {
1780 ConvertToBuffer(2, 0, true, FROM, kError,
1781 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1782 }
1783
1784 // Test converting from I420 to I422. 1334 // Test converting from I420 to I422.
1785 void ConvertToI422Buffer() { 1335 void ConvertToI422Buffer() {
1786 T frame1, frame2; 1336 T frame1, frame2;
1787 size_t out_size = kWidth * kHeight * 2; 1337 size_t out_size = kWidth * kHeight * 2;
1788 std::unique_ptr<uint8_t[]> buf(new uint8_t[out_size + kAlignment]); 1338 std::unique_ptr<uint8_t[]> buf(new uint8_t[out_size + kAlignment]);
1789 uint8_t* y = ALIGNP(buf.get(), kAlignment); 1339 uint8_t* y = ALIGNP(buf.get(), kAlignment);
1790 uint8_t* u = y + kWidth * kHeight; 1340 uint8_t* u = y + kWidth * kHeight;
1791 uint8_t* v = u + (kWidth / 2) * kHeight; 1341 uint8_t* v = u + (kWidth / 2) * kHeight;
1792 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 1342 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
1793 for (int i = 0; i < repeat_; ++i) { 1343 for (int i = 0; i < repeat_; ++i) {
(...skipping 11 matching lines...) Expand all
1805 EXPECT_TRUE(frame2.Init(cricket::FOURCC_I422, kWidth, kHeight, kWidth, 1355 EXPECT_TRUE(frame2.Init(cricket::FOURCC_I422, kWidth, kHeight, kWidth,
1806 kHeight, y, out_size, 1, 1, 0, 1356 kHeight, y, out_size, 1, 1, 0,
1807 webrtc::kVideoRotation_0)); 1357 webrtc::kVideoRotation_0));
1808 EXPECT_TRUE(IsEqual(frame1, frame2, 1)); 1358 EXPECT_TRUE(IsEqual(frame1, frame2, 1));
1809 } 1359 }
1810 1360
1811 int repeat_; 1361 int repeat_;
1812 }; 1362 };
1813 1363
1814 #endif // WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_ 1364 #endif // WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698