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

Side by Side Diff: source/planar_functions.cc

Issue 1363503002: yuvconstants for all YUV to RGB conversion functions. (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: mips dspr2 add constants parameter 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 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 // Convert YUY2 to I422. 281 // Convert YUY2 to I422.
282 LIBYUV_API 282 LIBYUV_API
283 int YUY2ToI422(const uint8* src_yuy2, int src_stride_yuy2, 283 int YUY2ToI422(const uint8* src_yuy2, int src_stride_yuy2,
284 uint8* dst_y, int dst_stride_y, 284 uint8* dst_y, int dst_stride_y,
285 uint8* dst_u, int dst_stride_u, 285 uint8* dst_u, int dst_stride_u,
286 uint8* dst_v, int dst_stride_v, 286 uint8* dst_v, int dst_stride_v,
287 int width, int height) { 287 int width, int height) {
288 int y; 288 int y;
289 void (*YUY2ToUV422Row)(const uint8* src_yuy2, 289 void (*YUY2ToUV422Row)(const uint8* src_yuy2,
290 uint8* dst_u, uint8* dst_v, int pix) = 290 uint8* dst_u, uint8* dst_v, int width) =
291 YUY2ToUV422Row_C; 291 YUY2ToUV422Row_C;
292 void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int pix) = 292 void (*YUY2ToYRow)(const uint8* src_yuy2, uint8* dst_y, int width) =
293 YUY2ToYRow_C; 293 YUY2ToYRow_C;
294 // Negative height means invert the image. 294 // Negative height means invert the image.
295 if (height < 0) { 295 if (height < 0) {
296 height = -height; 296 height = -height;
297 src_yuy2 = src_yuy2 + (height - 1) * src_stride_yuy2; 297 src_yuy2 = src_yuy2 + (height - 1) * src_stride_yuy2;
298 src_stride_yuy2 = -src_stride_yuy2; 298 src_stride_yuy2 = -src_stride_yuy2;
299 } 299 }
300 // Coalesce rows. 300 // Coalesce rows.
301 if (src_stride_yuy2 == width * 2 && 301 if (src_stride_yuy2 == width * 2 &&
302 dst_stride_y == width && 302 dst_stride_y == width &&
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 352
353 // Convert UYVY to I422. 353 // Convert UYVY to I422.
354 LIBYUV_API 354 LIBYUV_API
355 int UYVYToI422(const uint8* src_uyvy, int src_stride_uyvy, 355 int UYVYToI422(const uint8* src_uyvy, int src_stride_uyvy,
356 uint8* dst_y, int dst_stride_y, 356 uint8* dst_y, int dst_stride_y,
357 uint8* dst_u, int dst_stride_u, 357 uint8* dst_u, int dst_stride_u,
358 uint8* dst_v, int dst_stride_v, 358 uint8* dst_v, int dst_stride_v,
359 int width, int height) { 359 int width, int height) {
360 int y; 360 int y;
361 void (*UYVYToUV422Row)(const uint8* src_uyvy, 361 void (*UYVYToUV422Row)(const uint8* src_uyvy,
362 uint8* dst_u, uint8* dst_v, int pix) = 362 uint8* dst_u, uint8* dst_v, int width) =
363 UYVYToUV422Row_C; 363 UYVYToUV422Row_C;
364 void (*UYVYToYRow)(const uint8* src_uyvy, 364 void (*UYVYToYRow)(const uint8* src_uyvy,
365 uint8* dst_y, int pix) = UYVYToYRow_C; 365 uint8* dst_y, int width) = UYVYToYRow_C;
366 // Negative height means invert the image. 366 // Negative height means invert the image.
367 if (height < 0) { 367 if (height < 0) {
368 height = -height; 368 height = -height;
369 src_uyvy = src_uyvy + (height - 1) * src_stride_uyvy; 369 src_uyvy = src_uyvy + (height - 1) * src_stride_uyvy;
370 src_stride_uyvy = -src_stride_uyvy; 370 src_stride_uyvy = -src_stride_uyvy;
371 } 371 }
372 // Coalesce rows. 372 // Coalesce rows.
373 if (src_stride_uyvy == width * 2 && 373 if (src_stride_uyvy == width * 2 &&
374 dst_stride_y == width && 374 dst_stride_y == width &&
375 dst_stride_u * 2 == width && 375 dst_stride_u * 2 == width &&
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 int I422ToBGRA(const uint8* src_y, int src_stride_y, 783 int I422ToBGRA(const uint8* src_y, int src_stride_y,
784 const uint8* src_u, int src_stride_u, 784 const uint8* src_u, int src_stride_u,
785 const uint8* src_v, int src_stride_v, 785 const uint8* src_v, int src_stride_v,
786 uint8* dst_bgra, int dst_stride_bgra, 786 uint8* dst_bgra, int dst_stride_bgra,
787 int width, int height) { 787 int width, int height) {
788 int y; 788 int y;
789 void (*I422ToBGRARow)(const uint8* y_buf, 789 void (*I422ToBGRARow)(const uint8* y_buf,
790 const uint8* u_buf, 790 const uint8* u_buf,
791 const uint8* v_buf, 791 const uint8* v_buf,
792 uint8* rgb_buf, 792 uint8* rgb_buf,
793 struct YuvConstants* yuvconstants,
793 int width) = I422ToBGRARow_C; 794 int width) = I422ToBGRARow_C;
794 if (!src_y || !src_u || !src_v || 795 if (!src_y || !src_u || !src_v ||
795 !dst_bgra || 796 !dst_bgra ||
796 width <= 0 || height == 0) { 797 width <= 0 || height == 0) {
797 return -1; 798 return -1;
798 } 799 }
799 // Negative height means invert the image. 800 // Negative height means invert the image.
800 if (height < 0) { 801 if (height < 0) {
801 height = -height; 802 height = -height;
802 dst_bgra = dst_bgra + (height - 1) * dst_stride_bgra; 803 dst_bgra = dst_bgra + (height - 1) * dst_stride_bgra;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 if (TestCpuFlag(kCpuHasMIPS_DSPR2) && IS_ALIGNED(width, 4) && 840 if (TestCpuFlag(kCpuHasMIPS_DSPR2) && IS_ALIGNED(width, 4) &&
840 IS_ALIGNED(src_y, 4) && IS_ALIGNED(src_stride_y, 4) && 841 IS_ALIGNED(src_y, 4) && IS_ALIGNED(src_stride_y, 4) &&
841 IS_ALIGNED(src_u, 2) && IS_ALIGNED(src_stride_u, 2) && 842 IS_ALIGNED(src_u, 2) && IS_ALIGNED(src_stride_u, 2) &&
842 IS_ALIGNED(src_v, 2) && IS_ALIGNED(src_stride_v, 2) && 843 IS_ALIGNED(src_v, 2) && IS_ALIGNED(src_stride_v, 2) &&
843 IS_ALIGNED(dst_bgra, 4) && IS_ALIGNED(dst_stride_bgra, 4)) { 844 IS_ALIGNED(dst_bgra, 4) && IS_ALIGNED(dst_stride_bgra, 4)) {
844 I422ToBGRARow = I422ToBGRARow_MIPS_DSPR2; 845 I422ToBGRARow = I422ToBGRARow_MIPS_DSPR2;
845 } 846 }
846 #endif 847 #endif
847 848
848 for (y = 0; y < height; ++y) { 849 for (y = 0; y < height; ++y) {
849 I422ToBGRARow(src_y, src_u, src_v, dst_bgra, width); 850 I422ToBGRARow(src_y, src_u, src_v, dst_bgra, &kYuvConstants, width);
850 dst_bgra += dst_stride_bgra; 851 dst_bgra += dst_stride_bgra;
851 src_y += src_stride_y; 852 src_y += src_stride_y;
852 src_u += src_stride_u; 853 src_u += src_stride_u;
853 src_v += src_stride_v; 854 src_v += src_stride_v;
854 } 855 }
855 return 0; 856 return 0;
856 } 857 }
857 858
858 // Convert I422 to ABGR. 859 // Convert I422 to ABGR.
859 LIBYUV_API 860 LIBYUV_API
860 int I422ToABGR(const uint8* src_y, int src_stride_y, 861 int I422ToABGR(const uint8* src_y, int src_stride_y,
861 const uint8* src_u, int src_stride_u, 862 const uint8* src_u, int src_stride_u,
862 const uint8* src_v, int src_stride_v, 863 const uint8* src_v, int src_stride_v,
863 uint8* dst_abgr, int dst_stride_abgr, 864 uint8* dst_abgr, int dst_stride_abgr,
864 int width, int height) { 865 int width, int height) {
865 int y; 866 int y;
866 void (*I422ToABGRRow)(const uint8* y_buf, 867 void (*I422ToABGRRow)(const uint8* y_buf,
867 const uint8* u_buf, 868 const uint8* u_buf,
868 const uint8* v_buf, 869 const uint8* v_buf,
869 uint8* rgb_buf, 870 uint8* rgb_buf,
871 struct YuvConstants* yuvconstants,
870 int width) = I422ToABGRRow_C; 872 int width) = I422ToABGRRow_C;
871 if (!src_y || !src_u || !src_v || 873 if (!src_y || !src_u || !src_v ||
872 !dst_abgr || 874 !dst_abgr ||
873 width <= 0 || height == 0) { 875 width <= 0 || height == 0) {
874 return -1; 876 return -1;
875 } 877 }
876 // Negative height means invert the image. 878 // Negative height means invert the image.
877 if (height < 0) { 879 if (height < 0) {
878 height = -height; 880 height = -height;
879 dst_abgr = dst_abgr + (height - 1) * dst_stride_abgr; 881 dst_abgr = dst_abgr + (height - 1) * dst_stride_abgr;
(...skipping 27 matching lines...) Expand all
907 #if defined(HAS_I422TOABGRROW_AVX2) 909 #if defined(HAS_I422TOABGRROW_AVX2)
908 if (TestCpuFlag(kCpuHasAVX2)) { 910 if (TestCpuFlag(kCpuHasAVX2)) {
909 I422ToABGRRow = I422ToABGRRow_Any_AVX2; 911 I422ToABGRRow = I422ToABGRRow_Any_AVX2;
910 if (IS_ALIGNED(width, 16)) { 912 if (IS_ALIGNED(width, 16)) {
911 I422ToABGRRow = I422ToABGRRow_AVX2; 913 I422ToABGRRow = I422ToABGRRow_AVX2;
912 } 914 }
913 } 915 }
914 #endif 916 #endif
915 917
916 for (y = 0; y < height; ++y) { 918 for (y = 0; y < height; ++y) {
917 I422ToABGRRow(src_y, src_u, src_v, dst_abgr, width); 919 I422ToABGRRow(src_y, src_u, src_v, dst_abgr, &kYuvConstants, width);
918 dst_abgr += dst_stride_abgr; 920 dst_abgr += dst_stride_abgr;
919 src_y += src_stride_y; 921 src_y += src_stride_y;
920 src_u += src_stride_u; 922 src_u += src_stride_u;
921 src_v += src_stride_v; 923 src_v += src_stride_v;
922 } 924 }
923 return 0; 925 return 0;
924 } 926 }
925 927
926 // Convert I422 to RGBA. 928 // Convert I422 to RGBA.
927 LIBYUV_API 929 LIBYUV_API
928 int I422ToRGBA(const uint8* src_y, int src_stride_y, 930 int I422ToRGBA(const uint8* src_y, int src_stride_y,
929 const uint8* src_u, int src_stride_u, 931 const uint8* src_u, int src_stride_u,
930 const uint8* src_v, int src_stride_v, 932 const uint8* src_v, int src_stride_v,
931 uint8* dst_rgba, int dst_stride_rgba, 933 uint8* dst_rgba, int dst_stride_rgba,
932 int width, int height) { 934 int width, int height) {
933 int y; 935 int y;
934 void (*I422ToRGBARow)(const uint8* y_buf, 936 void (*I422ToRGBARow)(const uint8* y_buf,
935 const uint8* u_buf, 937 const uint8* u_buf,
936 const uint8* v_buf, 938 const uint8* v_buf,
937 uint8* rgb_buf, 939 uint8* rgb_buf,
940 struct YuvConstants* yuvconstants,
938 int width) = I422ToRGBARow_C; 941 int width) = I422ToRGBARow_C;
939 if (!src_y || !src_u || !src_v || 942 if (!src_y || !src_u || !src_v ||
940 !dst_rgba || 943 !dst_rgba ||
941 width <= 0 || height == 0) { 944 width <= 0 || height == 0) {
942 return -1; 945 return -1;
943 } 946 }
944 // Negative height means invert the image. 947 // Negative height means invert the image.
945 if (height < 0) { 948 if (height < 0) {
946 height = -height; 949 height = -height;
947 dst_rgba = dst_rgba + (height - 1) * dst_stride_rgba; 950 dst_rgba = dst_rgba + (height - 1) * dst_stride_rgba;
(...skipping 27 matching lines...) Expand all
975 #if defined(HAS_I422TORGBAROW_AVX2) 978 #if defined(HAS_I422TORGBAROW_AVX2)
976 if (TestCpuFlag(kCpuHasAVX2)) { 979 if (TestCpuFlag(kCpuHasAVX2)) {
977 I422ToRGBARow = I422ToRGBARow_Any_AVX2; 980 I422ToRGBARow = I422ToRGBARow_Any_AVX2;
978 if (IS_ALIGNED(width, 16)) { 981 if (IS_ALIGNED(width, 16)) {
979 I422ToRGBARow = I422ToRGBARow_AVX2; 982 I422ToRGBARow = I422ToRGBARow_AVX2;
980 } 983 }
981 } 984 }
982 #endif 985 #endif
983 986
984 for (y = 0; y < height; ++y) { 987 for (y = 0; y < height; ++y) {
985 I422ToRGBARow(src_y, src_u, src_v, dst_rgba, width); 988 I422ToRGBARow(src_y, src_u, src_v, dst_rgba, &kYuvConstants, width);
986 dst_rgba += dst_stride_rgba; 989 dst_rgba += dst_stride_rgba;
987 src_y += src_stride_y; 990 src_y += src_stride_y;
988 src_u += src_stride_u; 991 src_u += src_stride_u;
989 src_v += src_stride_v; 992 src_v += src_stride_v;
990 } 993 }
991 return 0; 994 return 0;
992 } 995 }
993 996
994 // Convert NV12 to RGB565. 997 // Convert NV12 to RGB565.
995 LIBYUV_API 998 LIBYUV_API
996 int NV12ToRGB565(const uint8* src_y, int src_stride_y, 999 int NV12ToRGB565(const uint8* src_y, int src_stride_y,
997 const uint8* src_uv, int src_stride_uv, 1000 const uint8* src_uv, int src_stride_uv,
998 uint8* dst_rgb565, int dst_stride_rgb565, 1001 uint8* dst_rgb565, int dst_stride_rgb565,
999 int width, int height) { 1002 int width, int height) {
1000 int y; 1003 int y;
1001 void (*NV12ToRGB565Row)(const uint8* y_buf, 1004 void (*NV12ToRGB565Row)(const uint8* y_buf,
1002 const uint8* uv_buf, 1005 const uint8* uv_buf,
1003 uint8* rgb_buf, 1006 uint8* rgb_buf,
1007 struct YuvConstants* yuvconstants,
1004 int width) = NV12ToRGB565Row_C; 1008 int width) = NV12ToRGB565Row_C;
1005 if (!src_y || !src_uv || !dst_rgb565 || 1009 if (!src_y || !src_uv || !dst_rgb565 ||
1006 width <= 0 || height == 0) { 1010 width <= 0 || height == 0) {
1007 return -1; 1011 return -1;
1008 } 1012 }
1009 // Negative height means invert the image. 1013 // Negative height means invert the image.
1010 if (height < 0) { 1014 if (height < 0) {
1011 height = -height; 1015 height = -height;
1012 dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565; 1016 dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565;
1013 dst_stride_rgb565 = -dst_stride_rgb565; 1017 dst_stride_rgb565 = -dst_stride_rgb565;
(...skipping 17 matching lines...) Expand all
1031 #if defined(HAS_NV12TORGB565ROW_NEON) 1035 #if defined(HAS_NV12TORGB565ROW_NEON)
1032 if (TestCpuFlag(kCpuHasNEON)) { 1036 if (TestCpuFlag(kCpuHasNEON)) {
1033 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON; 1037 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON;
1034 if (IS_ALIGNED(width, 8)) { 1038 if (IS_ALIGNED(width, 8)) {
1035 NV12ToRGB565Row = NV12ToRGB565Row_NEON; 1039 NV12ToRGB565Row = NV12ToRGB565Row_NEON;
1036 } 1040 }
1037 } 1041 }
1038 #endif 1042 #endif
1039 1043
1040 for (y = 0; y < height; ++y) { 1044 for (y = 0; y < height; ++y) {
1041 NV12ToRGB565Row(src_y, src_uv, dst_rgb565, width); 1045 NV12ToRGB565Row(src_y, src_uv, dst_rgb565, &kYuvConstants, width);
1042 dst_rgb565 += dst_stride_rgb565; 1046 dst_rgb565 += dst_stride_rgb565;
1043 src_y += src_stride_y; 1047 src_y += src_stride_y;
1044 if (y & 1) { 1048 if (y & 1) {
1045 src_uv += src_stride_uv; 1049 src_uv += src_stride_uv;
1046 } 1050 }
1047 } 1051 }
1048 return 0; 1052 return 0;
1049 } 1053 }
1050 1054
1051 // Convert NV21 to RGB565. 1055 // Convert NV21 to RGB565.
1052 LIBYUV_API 1056 LIBYUV_API
1053 int NV21ToRGB565(const uint8* src_y, int src_stride_y, 1057 int NV21ToRGB565(const uint8* src_y, int src_stride_y,
1054 const uint8* src_vu, int src_stride_vu, 1058 const uint8* src_vu, int src_stride_vu,
1055 uint8* dst_rgb565, int dst_stride_rgb565, 1059 uint8* dst_rgb565, int dst_stride_rgb565,
1056 int width, int height) { 1060 int width, int height) {
1057 int y; 1061 int y;
1058 void (*NV21ToRGB565Row)(const uint8* y_buf, 1062 void (*NV12ToRGB565Row)(const uint8* y_buf,
1059 const uint8* src_vu, 1063 const uint8* src_vu,
1060 uint8* rgb_buf, 1064 uint8* rgb_buf,
1061 int width) = NV21ToRGB565Row_C; 1065 struct YuvConstants* yuvconstants,
1066 int width) = NV12ToRGB565Row_C;
1062 if (!src_y || !src_vu || !dst_rgb565 || 1067 if (!src_y || !src_vu || !dst_rgb565 ||
1063 width <= 0 || height == 0) { 1068 width <= 0 || height == 0) {
1064 return -1; 1069 return -1;
1065 } 1070 }
1066 // Negative height means invert the image. 1071 // Negative height means invert the image.
1067 if (height < 0) { 1072 if (height < 0) {
1068 height = -height; 1073 height = -height;
1069 dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565; 1074 dst_rgb565 = dst_rgb565 + (height - 1) * dst_stride_rgb565;
1070 dst_stride_rgb565 = -dst_stride_rgb565; 1075 dst_stride_rgb565 = -dst_stride_rgb565;
1071 } 1076 }
1072 #if defined(HAS_NV21TORGB565ROW_SSSE3) 1077 #if defined(HAS_NV12TORGB565ROW_SSSE3)
1073 if (TestCpuFlag(kCpuHasSSSE3)) { 1078 if (TestCpuFlag(kCpuHasSSSE3)) {
1074 NV21ToRGB565Row = NV21ToRGB565Row_Any_SSSE3; 1079 NV12ToRGB565Row = NV12ToRGB565Row_Any_SSSE3;
1075 if (IS_ALIGNED(width, 8)) { 1080 if (IS_ALIGNED(width, 8)) {
1076 NV21ToRGB565Row = NV21ToRGB565Row_SSSE3; 1081 NV12ToRGB565Row = NV12ToRGB565Row_SSSE3;
1077 } 1082 }
1078 } 1083 }
1079 #endif 1084 #endif
1080 #if defined(HAS_NV21TORGB565ROW_AVX2) 1085 #if defined(HAS_NV12TORGB565ROW_AVX2)
1081 if (TestCpuFlag(kCpuHasAVX2)) { 1086 if (TestCpuFlag(kCpuHasAVX2)) {
1082 NV21ToRGB565Row = NV21ToRGB565Row_Any_AVX2; 1087 NV12ToRGB565Row = NV12ToRGB565Row_Any_AVX2;
1083 if (IS_ALIGNED(width, 16)) { 1088 if (IS_ALIGNED(width, 16)) {
1084 NV21ToRGB565Row = NV21ToRGB565Row_AVX2; 1089 NV12ToRGB565Row = NV12ToRGB565Row_AVX2;
1085 } 1090 }
1086 } 1091 }
1087 #endif 1092 #endif
1088 #if defined(HAS_NV21TORGB565ROW_NEON) 1093 #if defined(HAS_NV12TORGB565ROW_NEON)
1089 if (TestCpuFlag(kCpuHasNEON)) { 1094 if (TestCpuFlag(kCpuHasNEON)) {
1090 NV21ToRGB565Row = NV21ToRGB565Row_Any_NEON; 1095 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON;
1091 if (IS_ALIGNED(width, 8)) { 1096 if (IS_ALIGNED(width, 8)) {
1092 NV21ToRGB565Row = NV21ToRGB565Row_NEON; 1097 NV12ToRGB565Row = NV12ToRGB565Row_NEON;
1093 } 1098 }
1094 } 1099 }
1095 #endif 1100 #endif
1096 1101
1097 for (y = 0; y < height; ++y) { 1102 for (y = 0; y < height; ++y) {
1098 NV21ToRGB565Row(src_y, src_vu, dst_rgb565, width); 1103 NV12ToRGB565Row(src_y, src_vu, dst_rgb565, &kYvuConstants, width);
1099 dst_rgb565 += dst_stride_rgb565; 1104 dst_rgb565 += dst_stride_rgb565;
1100 src_y += src_stride_y; 1105 src_y += src_stride_y;
1101 if (y & 1) { 1106 if (y & 1) {
1102 src_vu += src_stride_vu; 1107 src_vu += src_stride_vu;
1103 } 1108 }
1104 } 1109 }
1105 return 0; 1110 return 0;
1106 } 1111 }
1107 1112
1108 LIBYUV_API 1113 LIBYUV_API
1109 void SetPlane(uint8* dst_y, int dst_stride_y, 1114 void SetPlane(uint8* dst_y, int dst_stride_y,
1110 int width, int height, 1115 int width, int height,
1111 uint32 value) { 1116 uint32 value) {
1112 int y; 1117 int y;
1113 void (*SetRow)(uint8* dst, uint8 value, int pix) = SetRow_C; 1118 void (*SetRow)(uint8* dst, uint8 value, int width) = SetRow_C;
1114 if (height < 0) { 1119 if (height < 0) {
1115 height = -height; 1120 height = -height;
1116 dst_y = dst_y + (height - 1) * dst_stride_y; 1121 dst_y = dst_y + (height - 1) * dst_stride_y;
1117 dst_stride_y = -dst_stride_y; 1122 dst_stride_y = -dst_stride_y;
1118 } 1123 }
1119 // Coalesce rows. 1124 // Coalesce rows.
1120 if (dst_stride_y == width) { 1125 if (dst_stride_y == width) {
1121 width *= height; 1126 width *= height;
1122 height = 1; 1127 height = 1;
1123 dst_stride_y = 0; 1128 dst_stride_y = 0;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 return 0; 1184 return 0;
1180 } 1185 }
1181 1186
1182 // Draw a rectangle into ARGB 1187 // Draw a rectangle into ARGB
1183 LIBYUV_API 1188 LIBYUV_API
1184 int ARGBRect(uint8* dst_argb, int dst_stride_argb, 1189 int ARGBRect(uint8* dst_argb, int dst_stride_argb,
1185 int dst_x, int dst_y, 1190 int dst_x, int dst_y,
1186 int width, int height, 1191 int width, int height,
1187 uint32 value) { 1192 uint32 value) {
1188 int y; 1193 int y;
1189 void (*ARGBSetRow)(uint8* dst_argb, uint32 value, int pix) = ARGBSetRow_C; 1194 void (*ARGBSetRow)(uint8* dst_argb, uint32 value, int width) = ARGBSetRow_C;
1190 if (!dst_argb || 1195 if (!dst_argb ||
1191 width <= 0 || height == 0 || 1196 width <= 0 || height == 0 ||
1192 dst_x < 0 || dst_y < 0) { 1197 dst_x < 0 || dst_y < 0) {
1193 return -1; 1198 return -1;
1194 } 1199 }
1195 if (height < 0) { 1200 if (height < 0) {
1196 height = -height; 1201 height = -height;
1197 dst_argb = dst_argb + (height - 1) * dst_stride_argb; 1202 dst_argb = dst_argb + (height - 1) * dst_stride_argb;
1198 dst_stride_argb = -dst_stride_argb; 1203 dst_stride_argb = -dst_stride_argb;
1199 } 1204 }
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1902 return 0; 1907 return 0;
1903 } 1908 }
1904 1909
1905 // Shuffle ARGB channel order. e.g. BGRA to ARGB. 1910 // Shuffle ARGB channel order. e.g. BGRA to ARGB.
1906 LIBYUV_API 1911 LIBYUV_API
1907 int ARGBShuffle(const uint8* src_bgra, int src_stride_bgra, 1912 int ARGBShuffle(const uint8* src_bgra, int src_stride_bgra,
1908 uint8* dst_argb, int dst_stride_argb, 1913 uint8* dst_argb, int dst_stride_argb,
1909 const uint8* shuffler, int width, int height) { 1914 const uint8* shuffler, int width, int height) {
1910 int y; 1915 int y;
1911 void (*ARGBShuffleRow)(const uint8* src_bgra, uint8* dst_argb, 1916 void (*ARGBShuffleRow)(const uint8* src_bgra, uint8* dst_argb,
1912 const uint8* shuffler, int pix) = ARGBShuffleRow_C; 1917 const uint8* shuffler, int width) = ARGBShuffleRow_C;
1913 if (!src_bgra || !dst_argb || 1918 if (!src_bgra || !dst_argb ||
1914 width <= 0 || height == 0) { 1919 width <= 0 || height == 0) {
1915 return -1; 1920 return -1;
1916 } 1921 }
1917 // Negative height means invert the image. 1922 // Negative height means invert the image.
1918 if (height < 0) { 1923 if (height < 0) {
1919 height = -height; 1924 height = -height;
1920 src_bgra = src_bgra + (height - 1) * src_stride_bgra; 1925 src_bgra = src_bgra + (height - 1) * src_stride_bgra;
1921 src_stride_bgra = -src_stride_bgra; 1926 src_stride_bgra = -src_stride_bgra;
1922 } 1927 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1969 } 1974 }
1970 1975
1971 // Sobel ARGB effect. 1976 // Sobel ARGB effect.
1972 static int ARGBSobelize(const uint8* src_argb, int src_stride_argb, 1977 static int ARGBSobelize(const uint8* src_argb, int src_stride_argb,
1973 uint8* dst_argb, int dst_stride_argb, 1978 uint8* dst_argb, int dst_stride_argb,
1974 int width, int height, 1979 int width, int height,
1975 void (*SobelRow)(const uint8* src_sobelx, 1980 void (*SobelRow)(const uint8* src_sobelx,
1976 const uint8* src_sobely, 1981 const uint8* src_sobely,
1977 uint8* dst, int width)) { 1982 uint8* dst, int width)) {
1978 int y; 1983 int y;
1979 void (*ARGBToYJRow)(const uint8* src_argb, uint8* dst_g, int pix) = 1984 void (*ARGBToYJRow)(const uint8* src_argb, uint8* dst_g, int width) =
1980 ARGBToYJRow_C; 1985 ARGBToYJRow_C;
1981 void (*SobelYRow)(const uint8* src_y0, const uint8* src_y1, 1986 void (*SobelYRow)(const uint8* src_y0, const uint8* src_y1,
1982 uint8* dst_sobely, int width) = SobelYRow_C; 1987 uint8* dst_sobely, int width) = SobelYRow_C;
1983 void (*SobelXRow)(const uint8* src_y0, const uint8* src_y1, 1988 void (*SobelXRow)(const uint8* src_y0, const uint8* src_y1,
1984 const uint8* src_y2, uint8* dst_sobely, int width) = 1989 const uint8* src_y2, uint8* dst_sobely, int width) =
1985 SobelXRow_C; 1990 SobelXRow_C;
1986 const int kEdge = 16; // Extra pixels at start of row for extrude/align. 1991 const int kEdge = 16; // Extra pixels at start of row for extrude/align.
1987 if (!src_argb || !dst_argb || width <= 0 || height == 0) { 1992 if (!src_argb || !dst_argb || width <= 0 || height == 0) {
1988 return -1; 1993 return -1;
1989 } 1994 }
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
2353 return 0; 2358 return 0;
2354 } 2359 }
2355 2360
2356 LIBYUV_API 2361 LIBYUV_API
2357 int YUY2ToNV12(const uint8* src_yuy2, int src_stride_yuy2, 2362 int YUY2ToNV12(const uint8* src_yuy2, int src_stride_yuy2,
2358 uint8* dst_y, int dst_stride_y, 2363 uint8* dst_y, int dst_stride_y,
2359 uint8* dst_uv, int dst_stride_uv, 2364 uint8* dst_uv, int dst_stride_uv,
2360 int width, int height) { 2365 int width, int height) {
2361 int y; 2366 int y;
2362 int halfwidth = (width + 1) >> 1; 2367 int halfwidth = (width + 1) >> 1;
2363 void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) = 2368 void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
2364 SplitUVRow_C; 2369 int width) = SplitUVRow_C;
2365 void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr, 2370 void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr,
2366 ptrdiff_t src_stride, int dst_width, 2371 ptrdiff_t src_stride, int dst_width,
2367 int source_y_fraction) = InterpolateRow_C; 2372 int source_y_fraction) = InterpolateRow_C;
2368 if (!src_yuy2 || 2373 if (!src_yuy2 ||
2369 !dst_y || !dst_uv || 2374 !dst_y || !dst_uv ||
2370 width <= 0 || height == 0) { 2375 width <= 0 || height == 0) {
2371 return -1; 2376 return -1;
2372 } 2377 }
2373 // Negative height means invert the image. 2378 // Negative height means invert the image.
2374 if (height < 0) { 2379 if (height < 0) {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2457 return 0; 2462 return 0;
2458 } 2463 }
2459 2464
2460 LIBYUV_API 2465 LIBYUV_API
2461 int UYVYToNV12(const uint8* src_uyvy, int src_stride_uyvy, 2466 int UYVYToNV12(const uint8* src_uyvy, int src_stride_uyvy,
2462 uint8* dst_y, int dst_stride_y, 2467 uint8* dst_y, int dst_stride_y,
2463 uint8* dst_uv, int dst_stride_uv, 2468 uint8* dst_uv, int dst_stride_uv,
2464 int width, int height) { 2469 int width, int height) {
2465 int y; 2470 int y;
2466 int halfwidth = (width + 1) >> 1; 2471 int halfwidth = (width + 1) >> 1;
2467 void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) = 2472 void (*SplitUVRow)(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
2468 SplitUVRow_C; 2473 int width) = SplitUVRow_C;
2469 void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr, 2474 void (*InterpolateRow)(uint8* dst_ptr, const uint8* src_ptr,
2470 ptrdiff_t src_stride, int dst_width, 2475 ptrdiff_t src_stride, int dst_width,
2471 int source_y_fraction) = InterpolateRow_C; 2476 int source_y_fraction) = InterpolateRow_C;
2472 if (!src_uyvy || 2477 if (!src_uyvy ||
2473 !dst_y || !dst_uv || 2478 !dst_y || !dst_uv ||
2474 width <= 0 || height == 0) { 2479 width <= 0 || height == 0) {
2475 return -1; 2480 return -1;
2476 } 2481 }
2477 // Negative height means invert the image. 2482 // Negative height means invert the image.
2478 if (height < 0) { 2483 if (height < 0) {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2558 } 2563 }
2559 free_aligned_buffer_64(rows); 2564 free_aligned_buffer_64(rows);
2560 } 2565 }
2561 return 0; 2566 return 0;
2562 } 2567 }
2563 2568
2564 #ifdef __cplusplus 2569 #ifdef __cplusplus
2565 } // extern "C" 2570 } // extern "C"
2566 } // namespace libyuv 2571 } // namespace libyuv
2567 #endif 2572 #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