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

Side by Side Diff: source/planar_functions.cc

Issue 1398623002: fix jpeg and bt.709 yuvconstants for neon64. (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « source/convert_from.cc ('k') | source/row_any.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. 2 * Copyright 2011 The LibYuv 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 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 int I422ToBGRA(const uint8* src_y, int src_stride_y, 770 int I422ToBGRA(const uint8* src_y, int src_stride_y,
771 const uint8* src_u, int src_stride_u, 771 const uint8* src_u, int src_stride_u,
772 const uint8* src_v, int src_stride_v, 772 const uint8* src_v, int src_stride_v,
773 uint8* dst_bgra, int dst_stride_bgra, 773 uint8* dst_bgra, int dst_stride_bgra,
774 int width, int height) { 774 int width, int height) {
775 int y; 775 int y;
776 void (*I422ToBGRARow)(const uint8* y_buf, 776 void (*I422ToBGRARow)(const uint8* y_buf,
777 const uint8* u_buf, 777 const uint8* u_buf,
778 const uint8* v_buf, 778 const uint8* v_buf,
779 uint8* rgb_buf, 779 uint8* rgb_buf,
780 struct YuvConstants* yuvconstants, 780 const struct YuvConstants* yuvconstants,
781 int width) = I422ToBGRARow_C; 781 int width) = I422ToBGRARow_C;
782 if (!src_y || !src_u || !src_v || 782 if (!src_y || !src_u || !src_v ||
783 !dst_bgra || 783 !dst_bgra ||
784 width <= 0 || height == 0) { 784 width <= 0 || height == 0) {
785 return -1; 785 return -1;
786 } 786 }
787 // Negative height means invert the image. 787 // Negative height means invert the image.
788 if (height < 0) { 788 if (height < 0) {
789 height = -height; 789 height = -height;
790 dst_bgra = dst_bgra + (height - 1) * dst_stride_bgra; 790 dst_bgra = dst_bgra + (height - 1) * dst_stride_bgra;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 if (TestCpuFlag(kCpuHasMIPS_DSPR2) && IS_ALIGNED(width, 4) && 827 if (TestCpuFlag(kCpuHasMIPS_DSPR2) && IS_ALIGNED(width, 4) &&
828 IS_ALIGNED(src_y, 4) && IS_ALIGNED(src_stride_y, 4) && 828 IS_ALIGNED(src_y, 4) && IS_ALIGNED(src_stride_y, 4) &&
829 IS_ALIGNED(src_u, 2) && IS_ALIGNED(src_stride_u, 2) && 829 IS_ALIGNED(src_u, 2) && IS_ALIGNED(src_stride_u, 2) &&
830 IS_ALIGNED(src_v, 2) && IS_ALIGNED(src_stride_v, 2) && 830 IS_ALIGNED(src_v, 2) && IS_ALIGNED(src_stride_v, 2) &&
831 IS_ALIGNED(dst_bgra, 4) && IS_ALIGNED(dst_stride_bgra, 4)) { 831 IS_ALIGNED(dst_bgra, 4) && IS_ALIGNED(dst_stride_bgra, 4)) {
832 I422ToBGRARow = I422ToBGRARow_MIPS_DSPR2; 832 I422ToBGRARow = I422ToBGRARow_MIPS_DSPR2;
833 } 833 }
834 #endif 834 #endif
835 835
836 for (y = 0; y < height; ++y) { 836 for (y = 0; y < height; ++y) {
837 I422ToBGRARow(src_y, src_u, src_v, dst_bgra, &kYuvConstants, width); 837 I422ToBGRARow(src_y, src_u, src_v, dst_bgra, &kYuvIConstants, width);
838 dst_bgra += dst_stride_bgra; 838 dst_bgra += dst_stride_bgra;
839 src_y += src_stride_y; 839 src_y += src_stride_y;
840 src_u += src_stride_u; 840 src_u += src_stride_u;
841 src_v += src_stride_v; 841 src_v += src_stride_v;
842 } 842 }
843 return 0; 843 return 0;
844 } 844 }
845 845
846 // Convert I422 to ABGR. 846 // Convert I422 to ABGR.
847 LIBYUV_API 847 LIBYUV_API
848 int I422ToABGR(const uint8* src_y, int src_stride_y, 848 int I422ToABGR(const uint8* src_y, int src_stride_y,
849 const uint8* src_u, int src_stride_u, 849 const uint8* src_u, int src_stride_u,
850 const uint8* src_v, int src_stride_v, 850 const uint8* src_v, int src_stride_v,
851 uint8* dst_abgr, int dst_stride_abgr, 851 uint8* dst_abgr, int dst_stride_abgr,
852 int width, int height) { 852 int width, int height) {
853 int y; 853 int y;
854 void (*I422ToABGRRow)(const uint8* y_buf, 854 void (*I422ToABGRRow)(const uint8* y_buf,
855 const uint8* u_buf, 855 const uint8* u_buf,
856 const uint8* v_buf, 856 const uint8* v_buf,
857 uint8* rgb_buf, 857 uint8* rgb_buf,
858 struct YuvConstants* yuvconstants, 858 const struct YuvConstants* yuvconstants,
859 int width) = I422ToABGRRow_C; 859 int width) = I422ToABGRRow_C;
860 if (!src_y || !src_u || !src_v || 860 if (!src_y || !src_u || !src_v ||
861 !dst_abgr || 861 !dst_abgr ||
862 width <= 0 || height == 0) { 862 width <= 0 || height == 0) {
863 return -1; 863 return -1;
864 } 864 }
865 // Negative height means invert the image. 865 // Negative height means invert the image.
866 if (height < 0) { 866 if (height < 0) {
867 height = -height; 867 height = -height;
868 dst_abgr = dst_abgr + (height - 1) * dst_stride_abgr; 868 dst_abgr = dst_abgr + (height - 1) * dst_stride_abgr;
(...skipping 27 matching lines...) Expand all
896 #if defined(HAS_I422TOABGRROW_AVX2) 896 #if defined(HAS_I422TOABGRROW_AVX2)
897 if (TestCpuFlag(kCpuHasAVX2)) { 897 if (TestCpuFlag(kCpuHasAVX2)) {
898 I422ToABGRRow = I422ToABGRRow_Any_AVX2; 898 I422ToABGRRow = I422ToABGRRow_Any_AVX2;
899 if (IS_ALIGNED(width, 16)) { 899 if (IS_ALIGNED(width, 16)) {
900 I422ToABGRRow = I422ToABGRRow_AVX2; 900 I422ToABGRRow = I422ToABGRRow_AVX2;
901 } 901 }
902 } 902 }
903 #endif 903 #endif
904 904
905 for (y = 0; y < height; ++y) { 905 for (y = 0; y < height; ++y) {
906 I422ToABGRRow(src_y, src_u, src_v, dst_abgr, &kYuvConstants, width); 906 I422ToABGRRow(src_y, src_u, src_v, dst_abgr, &kYuvIConstants, width);
907 dst_abgr += dst_stride_abgr; 907 dst_abgr += dst_stride_abgr;
908 src_y += src_stride_y; 908 src_y += src_stride_y;
909 src_u += src_stride_u; 909 src_u += src_stride_u;
910 src_v += src_stride_v; 910 src_v += src_stride_v;
911 } 911 }
912 return 0; 912 return 0;
913 } 913 }
914 914
915 // Convert I422 to RGBA. 915 // Convert I422 to RGBA.
916 LIBYUV_API 916 LIBYUV_API
917 int I422ToRGBA(const uint8* src_y, int src_stride_y, 917 int I422ToRGBA(const uint8* src_y, int src_stride_y,
918 const uint8* src_u, int src_stride_u, 918 const uint8* src_u, int src_stride_u,
919 const uint8* src_v, int src_stride_v, 919 const uint8* src_v, int src_stride_v,
920 uint8* dst_rgba, int dst_stride_rgba, 920 uint8* dst_rgba, int dst_stride_rgba,
921 int width, int height) { 921 int width, int height) {
922 int y; 922 int y;
923 void (*I422ToRGBARow)(const uint8* y_buf, 923 void (*I422ToRGBARow)(const uint8* y_buf,
924 const uint8* u_buf, 924 const uint8* u_buf,
925 const uint8* v_buf, 925 const uint8* v_buf,
926 uint8* rgb_buf, 926 uint8* rgb_buf,
927 struct YuvConstants* yuvconstants, 927 const struct YuvConstants* yuvconstants,
928 int width) = I422ToRGBARow_C; 928 int width) = I422ToRGBARow_C;
929 if (!src_y || !src_u || !src_v || 929 if (!src_y || !src_u || !src_v ||
930 !dst_rgba || 930 !dst_rgba ||
931 width <= 0 || height == 0) { 931 width <= 0 || height == 0) {
932 return -1; 932 return -1;
933 } 933 }
934 // Negative height means invert the image. 934 // Negative height means invert the image.
935 if (height < 0) { 935 if (height < 0) {
936 height = -height; 936 height = -height;
937 dst_rgba = dst_rgba + (height - 1) * dst_stride_rgba; 937 dst_rgba = dst_rgba + (height - 1) * dst_stride_rgba;
(...skipping 27 matching lines...) Expand all
965 #if defined(HAS_I422TORGBAROW_AVX2) 965 #if defined(HAS_I422TORGBAROW_AVX2)
966 if (TestCpuFlag(kCpuHasAVX2)) { 966 if (TestCpuFlag(kCpuHasAVX2)) {
967 I422ToRGBARow = I422ToRGBARow_Any_AVX2; 967 I422ToRGBARow = I422ToRGBARow_Any_AVX2;
968 if (IS_ALIGNED(width, 16)) { 968 if (IS_ALIGNED(width, 16)) {
969 I422ToRGBARow = I422ToRGBARow_AVX2; 969 I422ToRGBARow = I422ToRGBARow_AVX2;
970 } 970 }
971 } 971 }
972 #endif 972 #endif
973 973
974 for (y = 0; y < height; ++y) { 974 for (y = 0; y < height; ++y) {
975 I422ToRGBARow(src_y, src_u, src_v, dst_rgba, &kYuvConstants, width); 975 I422ToRGBARow(src_y, src_u, src_v, dst_rgba, &kYuvIConstants, width);
976 dst_rgba += dst_stride_rgba; 976 dst_rgba += dst_stride_rgba;
977 src_y += src_stride_y; 977 src_y += src_stride_y;
978 src_u += src_stride_u; 978 src_u += src_stride_u;
979 src_v += src_stride_v; 979 src_v += src_stride_v;
980 } 980 }
981 return 0; 981 return 0;
982 } 982 }
983 983
984 // Convert NV12 to RGB565. 984 // Convert NV12 to RGB565.
985 LIBYUV_API 985 LIBYUV_API
986 int NV12ToRGB565(const uint8* src_y, int src_stride_y, 986 int NV12ToRGB565(const uint8* src_y, int src_stride_y,
987 const uint8* src_uv, int src_stride_uv, 987 const uint8* src_uv, int src_stride_uv,
988 uint8* dst_rgb565, int dst_stride_rgb565, 988 uint8* dst_rgb565, int dst_stride_rgb565,
989 int width, int height) { 989 int width, int height) {
990 int y; 990 int y;
991 void (*NV12ToRGB565Row)(const uint8* y_buf, 991 void (*NV12ToRGB565Row)(const uint8* y_buf,
992 const uint8* uv_buf, 992 const uint8* uv_buf,
993 uint8* rgb_buf, 993 uint8* rgb_buf,
994 struct YuvConstants* yuvconstants, 994 const struct YuvConstants* yuvconstants,
995 int width) = NV12ToRGB565Row_C; 995 int width) = NV12ToRGB565Row_C;
996 if (!src_y || !src_uv || !dst_rgb565 || 996 if (!src_y || !src_uv || !dst_rgb565 ||
997 width <= 0 || height == 0) { 997 width <= 0 || height == 0) {
998 return -1; 998 return -1;
999 } 999 }
1000 // Negative height means invert the image. 1000 // Negative height means invert the image.
1001 if (height < 0) { 1001 if (height < 0) {
1002 height = -height; 1002 height = -height;
1003 dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565; 1003 dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565;
1004 dst_stride_rgb565 = -dst_stride_rgb565; 1004 dst_stride_rgb565 = -dst_stride_rgb565;
(...skipping 17 matching lines...) Expand all
1022 #if defined(HAS_NV12TORGB565ROW_NEON) 1022 #if defined(HAS_NV12TORGB565ROW_NEON)
1023 if (TestCpuFlag(kCpuHasNEON)) { 1023 if (TestCpuFlag(kCpuHasNEON)) {
1024 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON; 1024 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON;
1025 if (IS_ALIGNED(width, 8)) { 1025 if (IS_ALIGNED(width, 8)) {
1026 NV12ToRGB565Row = NV12ToRGB565Row_NEON; 1026 NV12ToRGB565Row = NV12ToRGB565Row_NEON;
1027 } 1027 }
1028 } 1028 }
1029 #endif 1029 #endif
1030 1030
1031 for (y = 0; y < height; ++y) { 1031 for (y = 0; y < height; ++y) {
1032 NV12ToRGB565Row(src_y, src_uv, dst_rgb565, &kYuvConstants, width); 1032 NV12ToRGB565Row(src_y, src_uv, dst_rgb565, &kYuvIConstants, width);
1033 dst_rgb565 += dst_stride_rgb565; 1033 dst_rgb565 += dst_stride_rgb565;
1034 src_y += src_stride_y; 1034 src_y += src_stride_y;
1035 if (y & 1) { 1035 if (y & 1) {
1036 src_uv += src_stride_uv; 1036 src_uv += src_stride_uv;
1037 } 1037 }
1038 } 1038 }
1039 return 0; 1039 return 0;
1040 } 1040 }
1041 1041
1042 LIBYUV_API 1042 LIBYUV_API
(...skipping 1441 matching lines...) Expand 10 before | Expand all | Expand 10 after
2484 } 2484 }
2485 free_aligned_buffer_64(rows); 2485 free_aligned_buffer_64(rows);
2486 } 2486 }
2487 return 0; 2487 return 0;
2488 } 2488 }
2489 2489
2490 #ifdef __cplusplus 2490 #ifdef __cplusplus
2491 } // extern "C" 2491 } // extern "C"
2492 } // namespace libyuv 2492 } // namespace libyuv
2493 #endif 2493 #endif
OLDNEW
« no previous file with comments | « source/convert_from.cc ('k') | source/row_any.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698