Граф коммитов

86 Коммитов

Автор SHA1 Сообщение Дата
Yuan Tong 83f1c42ade Bug 1654461 - Make ConvertYCbCrToRGB32 color range aware r=jbauman,aosmond
Fix for ConvertYCbCrToRGB32 to use full range convert functions for full range data.

Some changes of libyuv are backported from newer version, to get support of full range BT.709 and BT.2020 colorspace.

Differential Revision: https://phabricator.services.mozilla.com/D105937
2021-05-19 18:03:43 +00:00
Dan Minor 02980fb082 Bug 1540760 - Enable neon for libyuv for aarch64; r=jya
Differential Revision: https://phabricator.services.mozilla.com/D27786

--HG--
extra : moz-landing-system : lando
2019-05-01 15:04:49 +00:00
Jean-Yves Avenard fd742471ad Bug 1493898 - P4. Add BT2020 YUV->RGB conversion. r=jgilbert
This is used by the basic compositor.
Re-using existing logic, however as with other conversion it only handles limited 8 bits ranges (16-235) and to make things worse is rounded aggressively as the focus is on speed.

Differential Revision: https://phabricator.services.mozilla.com/D25345

--HG--
extra : moz-landing-system : lando
2019-04-11 16:57:39 +00:00
byron jones cd4fa62854 Bug 1507051 - replace libyuv's README_MOZILLA with moz.yaml; r=jesup
Replace README_MOZILLA with moz.yaml, various fixups for update.py, and create
a missing patch file from Bug 1491848.

Differential Revision: https://phabricator.services.mozilla.com/D11891

--HG--
extra : moz-landing-system : lando
2018-11-23 13:00:07 +00:00
Tom Ritter 67d997dd40 Bug 1491848 Patch libyuv to fix the x86 mingw-clang build r=jesup
This patch combines the following two upstream patches
(which we are missing, because we're out of date):

d8680893ec%5E%21/
6e498475c7%5E%21/

Differential Revision: https://phabricator.services.mozilla.com/D7218

--HG--
extra : moz-landing-system : lando
2018-10-03 22:00:44 +00:00
Nathan Froyd 432939f95c Bug 1494503 - disable neon codepaths in libyuv for aarch64 windows; r=jesup
The NEON codepaths could work, but they'd have to be converted to
MSVC-friendly assembly (or separate .asm files) first.  Just disable
building them for now.
2018-09-27 14:33:26 -04:00
Randell Jesup 947f304784 Bug 1346291: remove accidentally committed diff file rs=jesup NPOTB 2018-05-11 00:55:41 -04:00
Randell Jesup 9ffedf15a9 Bug 1346291: Update libyuv to upstream 98a0a157dcf5dee0882b2dfcc9578ab1f44afb12 rs=jib,sotaro
--HG--
rename : media/libyuv/libyuv/util/convert.cc => media/libyuv/libyuv/util/yuvconvert.cc
2018-05-09 23:59:16 -04:00
Randell Jesup 88b568a14f Bug 1346291: Update libyuv update script and update patches for upstream 98a0a157dcf5dee0882b2dfcc9578ab1f44afb12 r=tritter 2018-05-09 23:59:15 -04:00
Masatoshi Kimura 89dad26c61 Bug 1426898 - Fix a bug of a local patch for libyuv. r=jesup
>+#if !defined(_MSC_VER) && (_MSC_VER < 1600)
is wrong. It should have been:
>+#if !(defined(_MSC_VER) && (_MSC_VER < 1600))
But I reverted this local change completely because we do not support such
older MSVC versions anyway.

MozReview-Commit-ID: 3VhtViP7WpX

--HG--
extra : rebase_source : f18f57d8505e5847452263847d561b5cdef255b7
2017-12-23 00:56:11 +09:00
Jan Beich 8821d0ee0f Bug 1414440 - Always build libyuv x86 optimizations with Clang. r=sotaro
SSE2 isn't enabled by default on BSD x86 systems which ends up disabling
SIMD-optimized routines in libyuv. As Clang can build the code fine without
-msse limit the requirement to GCC.

https://github.com/llvm-mirror/clang/blob/6fc97e7c1cf4/lib/Driver/ToolChains/Arch/X86.cpp#L98

MozReview-Commit-ID: BaVAbEpkoHj

--HG--
extra : rebase_source : d32d55c09f34ad2d8d9e0d275167b576c9070e65
2017-11-03 23:12:19 +00:00
Chris Manchester c86173526a Bug 1403346 - Replace all uses of ALLOW_COMPILER_WARNINGS with a template, remove ALLOW_COMPILER_WARNINGS. r=glandium
MozReview-Commit-ID: 1G2o4fy74cf
2017-10-25 15:12:09 -07:00
Dan Minor f7fe01502f Bug 1354350 - libyuv should not build with NVALGRIND under MOZ_VALGRIND builds; r=drno
This applies the fix from Bug 1354207 to the libyuv moz.build.

--HG--
extra : rebase_source : 006b869166a0c361fb006226a3769fb975b3dcb7
extra : amend_source : a3f9336cd38d07e37c31ec4f3f0614dee89cb1ed
2017-05-30 15:33:55 -04:00
Tom Ritter 3c810e8f62 Bug 1344316 Add Commit Date to libyuv README r=jesup
MozReview-Commit-ID: 6EVZR6ZilH1

--HG--
extra : rebase_source : 02c1b5486f9d14180954bcff9cfbd6848b1bf4fe
2017-03-03 13:02:04 -06:00
Joel Maher 43d997b5a3 Bug 1344470 - add BUG_COMPONENT to media/* files. r=padenot
MozReview-Commit-ID: C7xWOE0OwIK
2017-03-07 13:06:45 -05:00
Randell Jesup 6f01cb08c1 Bug 1342732: Adjust ANY11P16 r=sotaro
MozReview-Commit-ID: ARnj1K5o2LM
2017-02-28 23:31:47 -05:00
Randell Jesup b4b1d2146e Bug 1342730: clean up MipsCpuCaps r=sotaro
MozReview-Commit-ID: 2EwQHcN8gfF
2017-02-28 23:20:50 -05:00
Randell Jesup 8ad25a673c Bug 1284800: Fix build fallout from moving libyuv into a subdirectory r=ted
MozReview-Commit-ID: CDMDXqpGueS
2017-02-24 14:01:56 -05:00
Randell Jesup 444c7b0939 Bug 1284800: Create new update script for libyuv r=sotaro,rillian
MozReview-Commit-ID: 3MK84gHSrLg
2017-02-24 14:01:40 -05:00
Randell Jesup c204717db3 Bug 1341543: Import libyuv rev 054ec37f8e31e6131c8f19eb74395d29009d6604 from upstream rs=jesup,sotaro
https://chromium.googlesource.com/libyuv/libyuv

MozReview-Commit-ID: 8RTYSNenvVH

--HG--
rename : media/libyuv/AUTHORS => media/libyuv/libyuv/AUTHORS
rename : media/libyuv/Android.mk => media/libyuv/libyuv/Android.mk
rename : media/libyuv/BUILD.gn => media/libyuv/libyuv/BUILD.gn
rename : media/libyuv/LICENSE => media/libyuv/libyuv/LICENSE
rename : media/libyuv/LICENSE_THIRD_PARTY => media/libyuv/libyuv/LICENSE_THIRD_PARTY
rename : media/libyuv/OWNERS => media/libyuv/libyuv/OWNERS
rename : media/libyuv/PATENTS => media/libyuv/libyuv/PATENTS
rename : media/libyuv/README.chromium => media/libyuv/libyuv/README.chromium
rename : media/libyuv/README.md => media/libyuv/libyuv/README.md
rename : media/libyuv/all.gyp => media/libyuv/libyuv/all.gyp
rename : media/libyuv/docs/getting_started.md => media/libyuv/libyuv/docs/deprecated_builds.md
rename : media/libyuv/docs/environment_variables.md => media/libyuv/libyuv/docs/environment_variables.md
rename : media/libyuv/docs/filtering.md => media/libyuv/libyuv/docs/filtering.md
rename : media/libyuv/docs/formats.md => media/libyuv/libyuv/docs/formats.md
rename : media/libyuv/docs/rotation.md => media/libyuv/libyuv/docs/rotation.md
rename : media/libyuv/download_vs_toolchain.py => media/libyuv/libyuv/download_vs_toolchain.py
rename : media/libyuv/gyp_libyuv => media/libyuv/libyuv/gyp_libyuv
rename : media/libyuv/gyp_libyuv.py => media/libyuv/libyuv/gyp_libyuv.py
rename : media/libyuv/include/libyuv.h => media/libyuv/libyuv/include/libyuv.h
rename : media/libyuv/include/libyuv/basic_types.h => media/libyuv/libyuv/include/libyuv/basic_types.h
rename : media/libyuv/include/libyuv/compare.h => media/libyuv/libyuv/include/libyuv/compare.h
rename : media/libyuv/include/libyuv/compare_row.h => media/libyuv/libyuv/include/libyuv/compare_row.h
rename : media/libyuv/include/libyuv/cpu_id.h => media/libyuv/libyuv/include/libyuv/cpu_id.h
rename : media/libyuv/include/libyuv/mjpeg_decoder.h => media/libyuv/libyuv/include/libyuv/mjpeg_decoder.h
rename : media/libyuv/include/libyuv/rotate_argb.h => media/libyuv/libyuv/include/libyuv/rotate_argb.h
rename : media/libyuv/include/libyuv/row.h => media/libyuv/libyuv/include/libyuv/row.h
rename : media/libyuv/include/libyuv/scale.h => media/libyuv/libyuv/include/libyuv/scale.h
rename : media/libyuv/include/libyuv/scale_argb.h => media/libyuv/libyuv/include/libyuv/scale_argb.h
rename : media/libyuv/include/libyuv/version.h => media/libyuv/libyuv/include/libyuv/version.h
rename : media/libyuv/include/libyuv/video_common.h => media/libyuv/libyuv/include/libyuv/video_common.h
rename : media/libyuv/tools/OWNERS => media/libyuv/libyuv/infra/config/OWNERS
rename : media/libyuv/libyuv.gyp => media/libyuv/libyuv/libyuv.gyp
rename : media/libyuv/libyuv.gypi => media/libyuv/libyuv/libyuv.gypi
rename : media/libyuv/libyuv_nacl.gyp => media/libyuv/libyuv/libyuv_nacl.gyp
rename : media/libyuv/libyuv_test.gyp => media/libyuv/libyuv/libyuv_test.gyp
rename : media/libyuv/linux.mk => media/libyuv/libyuv/linux.mk
rename : media/libyuv/public.mk => media/libyuv/libyuv/public.mk
rename : media/libyuv/source/compare.cc => media/libyuv/libyuv/source/compare.cc
rename : media/libyuv/source/compare_common.cc => media/libyuv/libyuv/source/compare_common.cc
rename : media/libyuv/source/compare_gcc.cc => media/libyuv/libyuv/source/compare_gcc.cc
rename : media/libyuv/source/compare_neon.cc => media/libyuv/libyuv/source/compare_neon.cc
rename : media/libyuv/source/compare_neon64.cc => media/libyuv/libyuv/source/compare_neon64.cc
rename : media/libyuv/source/compare_win.cc => media/libyuv/libyuv/source/compare_win.cc
rename : media/libyuv/source/convert.cc => media/libyuv/libyuv/source/convert.cc
rename : media/libyuv/source/convert_argb.cc => media/libyuv/libyuv/source/convert_argb.cc
rename : media/libyuv/source/convert_from.cc => media/libyuv/libyuv/source/convert_from.cc
rename : media/libyuv/source/convert_from_argb.cc => media/libyuv/libyuv/source/convert_from_argb.cc
rename : media/libyuv/source/convert_jpeg.cc => media/libyuv/libyuv/source/convert_jpeg.cc
rename : media/libyuv/source/convert_to_argb.cc => media/libyuv/libyuv/source/convert_to_argb.cc
rename : media/libyuv/source/convert_to_i420.cc => media/libyuv/libyuv/source/convert_to_i420.cc
rename : media/libyuv/source/cpu_id.cc => media/libyuv/libyuv/source/cpu_id.cc
rename : media/libyuv/source/mjpeg_decoder.cc => media/libyuv/libyuv/source/mjpeg_decoder.cc
rename : media/libyuv/source/mjpeg_validate.cc => media/libyuv/libyuv/source/mjpeg_validate.cc
rename : media/libyuv/source/planar_functions.cc => media/libyuv/libyuv/source/planar_functions.cc
rename : media/libyuv/source/rotate.cc => media/libyuv/libyuv/source/rotate.cc
rename : media/libyuv/source/rotate_any.cc => media/libyuv/libyuv/source/rotate_any.cc
rename : media/libyuv/source/rotate_argb.cc => media/libyuv/libyuv/source/rotate_argb.cc
rename : media/libyuv/source/rotate_common.cc => media/libyuv/libyuv/source/rotate_common.cc
rename : media/libyuv/source/rotate_mips.cc => media/libyuv/libyuv/source/rotate_dspr2.cc
rename : media/libyuv/source/rotate_neon.cc => media/libyuv/libyuv/source/rotate_neon.cc
rename : media/libyuv/source/rotate_neon64.cc => media/libyuv/libyuv/source/rotate_neon64.cc
rename : media/libyuv/source/rotate_win.cc => media/libyuv/libyuv/source/rotate_win.cc
rename : media/libyuv/source/row_any.cc => media/libyuv/libyuv/source/row_any.cc
rename : media/libyuv/source/row_common.cc => media/libyuv/libyuv/source/row_common.cc
rename : media/libyuv/source/row_gcc.cc => media/libyuv/libyuv/source/row_gcc.cc
rename : media/libyuv/source/row_neon.cc => media/libyuv/libyuv/source/row_neon.cc
rename : media/libyuv/source/row_neon64.cc => media/libyuv/libyuv/source/row_neon64.cc
rename : media/libyuv/source/row_win.cc => media/libyuv/libyuv/source/row_win.cc
rename : media/libyuv/source/scale.cc => media/libyuv/libyuv/source/scale.cc
rename : media/libyuv/source/scale_argb.cc => media/libyuv/libyuv/source/scale_argb.cc
rename : media/libyuv/source/scale_common.cc => media/libyuv/libyuv/source/scale_common.cc
rename : media/libyuv/source/scale_mips.cc => media/libyuv/libyuv/source/scale_dspr2.cc
rename : media/libyuv/source/scale_gcc.cc => media/libyuv/libyuv/source/scale_gcc.cc
rename : media/libyuv/source/scale_neon.cc => media/libyuv/libyuv/source/scale_neon.cc
rename : media/libyuv/source/scale_neon64.cc => media/libyuv/libyuv/source/scale_neon64.cc
rename : media/libyuv/source/scale_win.cc => media/libyuv/libyuv/source/scale_win.cc
rename : media/libyuv/source/video_common.cc => media/libyuv/libyuv/source/video_common.cc
rename : media/libyuv/tools/OWNERS => media/libyuv/libyuv/tools_libyuv/OWNERS
rename : media/libyuv/tools/msan/OWNERS => media/libyuv/libyuv/tools_libyuv/msan/OWNERS
rename : media/libyuv/tools/msan/blacklist.txt => media/libyuv/libyuv/tools_libyuv/msan/blacklist.txt
rename : media/libyuv/tools/ubsan/OWNERS => media/libyuv/libyuv/tools_libyuv/ubsan/OWNERS
rename : media/libyuv/tools/ubsan/blacklist.txt => media/libyuv/libyuv/tools_libyuv/ubsan/blacklist.txt
rename : media/libyuv/tools/ubsan/vptr_blacklist.txt => media/libyuv/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt
rename : media/libyuv/tools/valgrind-libyuv/libyuv_tests.bat => media/libyuv/libyuv/tools_libyuv/valgrind/libyuv_tests.bat
rename : media/libyuv/tools/valgrind-libyuv/libyuv_tests.py => media/libyuv/libyuv/tools_libyuv/valgrind/libyuv_tests.py
rename : media/libyuv/tools/valgrind-libyuv/libyuv_tests.sh => media/libyuv/libyuv/tools_libyuv/valgrind/libyuv_tests.sh
rename : media/libyuv/tools/valgrind-libyuv/tsan/OWNERS => media/libyuv/libyuv/tools_libyuv/valgrind/memcheck/OWNERS
rename : media/libyuv/tools/valgrind-libyuv/memcheck/PRESUBMIT.py => media/libyuv/libyuv/tools_libyuv/valgrind/memcheck/PRESUBMIT.py
rename : media/libyuv/tools/valgrind-libyuv/memcheck/suppressions_win32.txt => media/libyuv/libyuv/tools_libyuv/valgrind/memcheck/suppressions.txt
rename : media/libyuv/tools/valgrind-libyuv/memcheck/suppressions_win32.txt => media/libyuv/libyuv/tools_libyuv/valgrind/memcheck/suppressions_mac.txt
rename : media/libyuv/tools/valgrind-libyuv/memcheck/suppressions_win32.txt => media/libyuv/libyuv/tools_libyuv/valgrind/memcheck/suppressions_win32.txt
rename : media/libyuv/unit_test/basictypes_test.cc => media/libyuv/libyuv/unit_test/basictypes_test.cc
rename : media/libyuv/unit_test/color_test.cc => media/libyuv/libyuv/unit_test/color_test.cc
rename : media/libyuv/unit_test/compare_test.cc => media/libyuv/libyuv/unit_test/compare_test.cc
rename : media/libyuv/unit_test/cpu_test.cc => media/libyuv/libyuv/unit_test/cpu_test.cc
rename : media/libyuv/unit_test/math_test.cc => media/libyuv/libyuv/unit_test/math_test.cc
rename : media/libyuv/unit_test/planar_test.cc => media/libyuv/libyuv/unit_test/planar_test.cc
rename : media/libyuv/unit_test/rotate_argb_test.cc => media/libyuv/libyuv/unit_test/rotate_argb_test.cc
rename : media/libyuv/unit_test/rotate_test.cc => media/libyuv/libyuv/unit_test/rotate_test.cc
rename : media/libyuv/unit_test/scale_argb_test.cc => media/libyuv/libyuv/unit_test/scale_argb_test.cc
rename : media/libyuv/unit_test/scale_test.cc => media/libyuv/libyuv/unit_test/scale_test.cc
rename : media/libyuv/unit_test/testdata/arm_v7.txt => media/libyuv/libyuv/unit_test/testdata/arm_v7.txt
rename : media/libyuv/unit_test/testdata/juno.txt => media/libyuv/libyuv/unit_test/testdata/juno.txt
rename : media/libyuv/unit_test/testdata/tegra3.txt => media/libyuv/libyuv/unit_test/testdata/tegra3.txt
rename : media/libyuv/unit_test/unit_test.cc => media/libyuv/libyuv/unit_test/unit_test.cc
rename : media/libyuv/unit_test/unit_test.h => media/libyuv/libyuv/unit_test/unit_test.h
rename : media/libyuv/unit_test/video_common_test.cc => media/libyuv/libyuv/unit_test/video_common_test.cc
rename : media/libyuv/util/Makefile => media/libyuv/libyuv/util/Makefile
rename : media/libyuv/util/compare.cc => media/libyuv/libyuv/util/compare.cc
rename : media/libyuv/util/convert.cc => media/libyuv/libyuv/util/convert.cc
rename : media/libyuv/util/cpuid.c => media/libyuv/libyuv/util/cpuid.c
rename : media/libyuv/util/psnr.cc => media/libyuv/libyuv/util/psnr.cc
rename : media/libyuv/util/psnr.h => media/libyuv/libyuv/util/psnr.h
rename : media/libyuv/util/psnr_main.cc => media/libyuv/libyuv/util/psnr_main.cc
rename : media/libyuv/util/ssim.cc => media/libyuv/libyuv/util/ssim.cc
rename : media/libyuv/util/ssim.h => media/libyuv/libyuv/util/ssim.h
rename : media/libyuv/winarm.mk => media/libyuv/libyuv/winarm.mk
2017-02-24 13:45:02 -05:00
sotaro 176fe53134 Bug 1329383 - Update YUVColorSpace handling in ConvertYCbCrToRGB32() r=nical 2017-01-10 10:09:19 +09:00
Sotaro Ikeda 2cc1d95c31 Bug 1304330 - Update YuvConstants of BT.709 YUV r=jesup 2016-09-28 19:50:14 -07:00
Sotaro Ikeda d32193d4c6 Bug 1284803 part 11 - Fix build failure of Android 4.2 x86 opt r=jrmuizel 2016-07-26 00:02:40 -07:00
Sotaro Ikeda 061a24e917 Bug 1284803 part 9 - Make sure NEON ifdefs match r=jesup 2016-07-26 00:01:53 -07:00
Sotaro Ikeda 370a3052df Bug 1284803 part 8 - Disable AVX2 asm if the compiler/assembler don't support it r=jesup 2016-07-26 00:01:24 -07:00
Sotaro Ikeda 5559ef24fa Bug 1284803 part 7 - Disable assembly if toolchain doesn't support ssse3/sse4.1 r=jesup 2016-07-26 00:00:55 -07:00
Sotaro Ikeda 9318820ace Bug 1284803 part 6- Suppress MJPEG fprintf() warnings in libyuv r=jesup 2016-07-26 00:00:29 -07:00
Sotaro Ikeda 6e390ec855 Bug 1284803 part 5 - Enable JPEG r=jesup 2016-07-25 23:59:57 -07:00
Sotaro Ikeda 269febc2cc Bug 1284803 part 4 - Change libyuv.gyp for fixing build failure r=jesup 2016-07-25 23:59:37 -07:00
Sotaro Ikeda 0a44b692d9 Bug 1284803 part 3 - Change basic_types.h for fixing build failure r=jesup 2016-07-25 23:59:08 -07:00
Sotaro Ikeda 84091e6396 Bug 1284803 part 2 - Update moz.build for fixing build failure r=jesup 2016-07-25 23:58:44 -07:00
Sotaro Ikeda 9952d80a52 Bug 1284803 part 1 - Update libyuv to rev 1602 r=jesup 2016-07-25 23:58:15 -07:00
Iris Hsiao 2841a7655a Backed out changeset 65ee637b7e20 (bug 1284803) 2016-07-26 10:22:51 +08:00
Iris Hsiao 601f1a35d5 Backed out changeset 612297895009 (bug 1284803) 2016-07-26 10:22:33 +08:00
Iris Hsiao fa93094e1e Backed out changeset ccf9a31fe40d (bug 1284803) 2016-07-26 10:22:24 +08:00
Iris Hsiao 1e7d1b9424 Backed out changeset 78a10fc91b52 (bug 1284803) 2016-07-26 10:22:12 +08:00
Iris Hsiao 3c90304714 Backed out changeset ac2f07864fb1 (bug 1284803) 2016-07-26 10:21:57 +08:00
Iris Hsiao eb8a627097 Backed out changeset 6dbd0dee3572 (bug 1284803) 2016-07-26 10:21:47 +08:00
Iris Hsiao 23fba109c8 Backed out changeset f7f503edb55b (bug 1284803) 2016-07-26 10:21:32 +08:00
Iris Hsiao 98d8a805d6 Backed out changeset 24ebb285aff3 (bug 1284803) 2016-07-26 10:21:23 +08:00
Iris Hsiao 1b709aa294 Backed out changeset faf44eac1bb7 (bug 1284803) 2016-07-26 10:21:09 +08:00
Iris Hsiao 551b7cb0bc Backed out changeset d1cbc5eeb8c8 (bug 1284803) 2016-07-26 10:20:46 +08:00
Sotaro Ikeda 2046c24f35 Bug 1284803 part 11 - Fix build failure of Android 4.2 x86 opt r=jrmuizel 2016-07-25 18:23:33 -07:00
Sotaro Ikeda b2ca5d6504 Bug 1284803 part 9 - Make sure NEON ifdefs match r=jesup 2016-07-25 18:22:51 -07:00
Sotaro Ikeda b06f82b5a2 Bug 1284803 part 8 - Disable AVX2 asm if the compiler/assembler don't support it r=jesup 2016-07-25 18:22:30 -07:00
Sotaro Ikeda 23690a63d3 Bug 1284803 part 7 - Disable assembly if toolchain doesn't support ssse3/sse4.1 r=jesup 2016-07-25 18:22:07 -07:00
Sotaro Ikeda 9576c29de5 Bug 1284803 part 6- Suppress MJPEG fprintf() warnings in libyuv r=jesup 2016-07-25 18:21:45 -07:00
Sotaro Ikeda c9561f4a18 Bug 1284803 part 5 - Enable JPEG r=jesup 2016-07-25 18:21:21 -07:00
Sotaro Ikeda 7478ce273d Bug 1284803 part 4 - Change libyuv.gyp for fixing build failure r=jesup 2016-07-25 18:20:55 -07:00
Sotaro Ikeda 313787e05a Bug 1284803 part 3 - Change basic_types.h for fixing build failure r=jesup 2016-07-25 18:20:29 -07:00