From e4c310fdc93df830c21ca4daabaa8684f8e3cabd Mon Sep 17 00:00:00 2001 From: Siarhei Vishniakou Date: Thu, 21 Feb 2019 15:38:26 -0600 Subject: [PATCH] Document that video frames rotate We recently changed the behaviour in InputReader to adjust the video frame data based on the current orientation. Update the HAL documentation to reflect that. Also, rearrange the order of width and height, because it is more natural to have the format of num of rows x num of columns. So currently, it is reversed, and not as natural. More information about this is in ag/6414079. Bug: 123241238 Test: none Change-Id: I69f184794bd7684e5c0981a6db66542ab914eff2 --- current.txt | 2 +- input/common/1.0/types.hal | 35 ++++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/current.txt b/current.txt index be71351ac5..c288a06b13 100644 --- a/current.txt +++ b/current.txt @@ -487,7 +487,7 @@ c3f831a66d5815baf74f5b82fe79cf099542ddae4dfab3f388e1d41828e794fc android.hardwar dd1ec219f5d2e2b33c6c0bcb92e63bbedb36f7c716413462848f6b6ae74fc864 android.hardware.health.storage@1.0::IStorage 2b4a14661e6a38617b7dd0c6ebb66a56a90e564674ac7697a14cb8a0cab92b2f android.hardware.health.storage@1.0::types 30006fde4cb1f255f2530208728bff692100411b20af5b66fa31a9196d51f00b android.hardware.input.classifier@1.0::IInputClassifier -97d8757bb05eb23d6a218bda374e095dfbb064c47714e2f859963c11f433e822 android.hardware.input.common@1.0::types +0300c7667030da36c3de585f176ce18ff4b0d2615446d4930f331097378c06ef android.hardware.input.common@1.0::types 24ae089981d58bc4cc74d75a6055bf357338ae6744ce1b467c5b4a9c470aba6d android.hardware.media.bufferpool@2.0::IAccessor 897f45ee7db24ef227dea83ca3e4de72d53ff6bb7adc7983c90a650a1a6ff576 android.hardware.media.bufferpool@2.0::IClientManager aee53b2865b4f7939fb3df6fae758d9750c14f93dd454b479fc74aa7978fda4f android.hardware.media.bufferpool@2.0::IConnection diff --git a/input/common/1.0/types.hal b/input/common/1.0/types.hal index 1a07f3b76d..9ad368b3b6 100644 --- a/input/common/1.0/types.hal +++ b/input/common/1.0/types.hal @@ -685,20 +685,20 @@ enum Flag : int32_t { * Touch heatmap. * * The array is a 2-D row-major matrix with dimensions (height, width). - * The heatmap data does not rotate when device orientation changes. + * The heatmap data is rotated when device orientation changes. * * Example: * * If the data in the array is: * data[i] = i for i in 0 .. 59, - * then it can be represented as follows: + * then it can be represented as a 10 x 6 matrix: * - * <-- width -- > + * <-- width --> * 0 1 2 3 4 5 ^ * 6 7 8 9 10 11 | - * 12 12 14 15 16 17 | - * 18 ... 23 | height - * 24 ... 29 | + * 12 13 14 15 16 17 | + * 18 ... 23 | + * 24 ... 29 | height * 30 ... 35 | * 36 ... 41 | * 42 ... 47 | @@ -708,16 +708,33 @@ enum Flag : int32_t { * Looking at the device in standard portrait orientation, * the element "0" is the top left of the screen, * "5" is at the top right, and "59" is the bottom right. - * Here width=6, and height=10. + * Here height=10 and width=6. + * + * If the screen orientation changes to landscape (a 90 degree orientation + * change), the frame's dimensions will become 6 x 10 + * and the data will look as follows: + * 54 48 42 36 30 24 18 12 6 0 ^ + * ... 13 7 1 | + * ... 14 8 2 | height + * ... 15 9 3 | + * ... 16 10 4 | + * 59 53 47 41 35 29 23 17 11 5 v + * <-- width --> + * + * Here the element "0" is at the physical top left of the unrotated screen. + * + * Since the coordinates of a MotionEvent are also adjusted based on the + * orientation, the rotation of the video frame data ensures that + * the axes for MotionEvent and VideoFrame data are consistent. */ struct VideoFrame { /** * Video frame data. - * Size of the data is width * height. + * Size of the data is height * width. */ vec data; - uint32_t width; uint32_t height; + uint32_t width; /** * Time at which the frame was collected, in nanoseconds. * Measured with the same clock that is used to populate MotionEvent times.