old mode 100755new mode 100644.. | .. |
---|
38 | 38 | // Other formats to consider in the future: |
---|
39 | 39 | // * V4L2_PIX_FMT_YVU420 (== YV12) |
---|
40 | 40 | // * V4L2_PIX_FMT_YVYU (YVYU: can be converted to YV12 or other YUV420_888 formats) |
---|
41 | | -const std::array<uint32_t, /*size*/ 2> kSupportedFourCCs{ |
---|
42 | | - {V4L2_PIX_FMT_MJPEG, V4L2_PIX_FMT_Z16}}; // double braces required in C++11 |
---|
| 41 | +const std::array<uint32_t, /*size*/ 3> kSupportedFourCCs{ |
---|
| 42 | + {V4L2_PIX_FMT_MJPEG, V4L2_PIX_FMT_Z16, V4L2_PIX_FMT_YUYV}}; // double braces required in C++11 |
---|
43 | 43 | |
---|
44 | 44 | constexpr int MAX_RETRY = 5; // Allow retry v4l2 open failures a few times. |
---|
45 | 45 | constexpr int OPEN_RETRY_SLEEP_US = 100000; // 100ms * MAX_RETRY = 0.5 seconds |
---|
.. | .. |
---|
274 | 274 | switch (fmt.fourcc) { |
---|
275 | 275 | case V4L2_PIX_FMT_Z16: hasDepth = true; break; |
---|
276 | 276 | case V4L2_PIX_FMT_MJPEG: hasColor = true; break; |
---|
| 277 | + case V4L2_PIX_FMT_YUYV: hasColor = true; break; |
---|
277 | 278 | default: ALOGW("%s: Unsupported format found", __FUNCTION__); |
---|
278 | 279 | } |
---|
279 | 280 | } |
---|
.. | .. |
---|
705 | 706 | // For V4L2_PIX_FMT_MJPEG |
---|
706 | 707 | std::array<int, /*size*/ 3> halFormats{{HAL_PIXEL_FORMAT_BLOB, HAL_PIXEL_FORMAT_YCbCr_420_888, |
---|
707 | 708 | HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED}}; |
---|
| 709 | + // For V4L2_PIX_FMT_YUYV |
---|
| 710 | + std::array<int, /*size*/ 3> halYuyvFormats{{HAL_PIXEL_FORMAT_BLOB, |
---|
| 711 | + HAL_PIXEL_FORMAT_YCbCr_420_888, |
---|
| 712 | + HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED}}; |
---|
| 713 | + bool isMJPEG = false; |
---|
| 714 | + bool isYUYV = false; |
---|
708 | 715 | |
---|
709 | 716 | for (const auto& supportedFormat : mSupportedFormats) { |
---|
710 | 717 | switch (supportedFormat.fourcc) { |
---|
.. | .. |
---|
713 | 720 | break; |
---|
714 | 721 | case V4L2_PIX_FMT_MJPEG: |
---|
715 | 722 | hasColor = true; |
---|
| 723 | + isMJPEG = true; |
---|
| 724 | + break; |
---|
| 725 | + case V4L2_PIX_FMT_YUYV: |
---|
| 726 | + hasColor = true; |
---|
| 727 | + isYUYV = true; |
---|
716 | 728 | break; |
---|
717 | 729 | default: |
---|
718 | 730 | ALOGW("%s: format %c%c%c%c is not supported!", __FUNCTION__, |
---|
.. | .. |
---|
729 | 741 | ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS); |
---|
730 | 742 | } |
---|
731 | 743 | if (hasColor) { |
---|
732 | | - initOutputCharskeysByFormat(metadata, V4L2_PIX_FMT_MJPEG, halFormats, |
---|
733 | | - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, |
---|
734 | | - ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, |
---|
735 | | - ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, |
---|
736 | | - ANDROID_SCALER_AVAILABLE_STALL_DURATIONS); |
---|
| 744 | + if (isMJPEG) { |
---|
| 745 | + initOutputCharskeysByFormat(metadata, V4L2_PIX_FMT_MJPEG, halFormats, |
---|
| 746 | + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, |
---|
| 747 | + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, |
---|
| 748 | + ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, |
---|
| 749 | + ANDROID_SCALER_AVAILABLE_STALL_DURATIONS); |
---|
| 750 | + } else if (isYUYV) { |
---|
| 751 | + initOutputCharskeysByFormat(metadata, V4L2_PIX_FMT_YUYV, halYuyvFormats, |
---|
| 752 | + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, |
---|
| 753 | + ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, |
---|
| 754 | + ANDROID_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, |
---|
| 755 | + ANDROID_SCALER_AVAILABLE_STALL_DURATIONS); |
---|
| 756 | + } |
---|
737 | 757 | } |
---|
738 | 758 | |
---|
739 | 759 | calculateMinFps(metadata); |
---|