162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/media/video-interface-devices.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Common Properties for Video Receiver and Transmitter Devices 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Jacopo Mondi <jacopo@jmondi.org> 1162306a36Sopenharmony_ci - Sakari Ailus <sakari.ailus@linux.intel.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciproperties: 1462306a36Sopenharmony_ci flash-leds: 1562306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle-array 1662306a36Sopenharmony_ci description: 1762306a36Sopenharmony_ci An array of phandles, each referring to a flash LED, a sub-node of the LED 1862306a36Sopenharmony_ci driver device node. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci lens-focus: 2162306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle 2262306a36Sopenharmony_ci description: 2362306a36Sopenharmony_ci A phandle to the node of the focus lens controller. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci rotation: 2662306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 2762306a36Sopenharmony_ci enum: [ 0, 90, 180, 270 ] 2862306a36Sopenharmony_ci description: | 2962306a36Sopenharmony_ci The camera rotation is expressed as the angular difference in degrees 3062306a36Sopenharmony_ci between two reference systems, one relative to the camera module, and one 3162306a36Sopenharmony_ci defined on the external world scene to be captured when projected on the 3262306a36Sopenharmony_ci image sensor pixel array. 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci A camera sensor has a 2-dimensional reference system 'Rc' defined by its 3562306a36Sopenharmony_ci pixel array read-out order. The origin is set to the first pixel being 3662306a36Sopenharmony_ci read out, the X-axis points along the column read-out direction towards 3762306a36Sopenharmony_ci the last columns, and the Y-axis along the row read-out direction towards 3862306a36Sopenharmony_ci the last row. 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci A typical example for a sensor with a 2592x1944 pixel array matrix 4162306a36Sopenharmony_ci observed from the front is: 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci 2591 X-axis 0 4462306a36Sopenharmony_ci <------------------------+ 0 4562306a36Sopenharmony_ci .......... ... ..........! 4662306a36Sopenharmony_ci .......... ... ..........! Y-axis 4762306a36Sopenharmony_ci ... ! 4862306a36Sopenharmony_ci .......... ... ..........! 4962306a36Sopenharmony_ci .......... ... ..........! 1943 5062306a36Sopenharmony_ci V 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci The external world scene reference system 'Rs' is a 2-dimensional 5362306a36Sopenharmony_ci reference system on the focal plane of the camera module. The origin is 5462306a36Sopenharmony_ci placed on the top-left corner of the visible scene, the X-axis points 5562306a36Sopenharmony_ci towards the right, and the Y-axis points towards the bottom of the scene. 5662306a36Sopenharmony_ci The top, bottom, left and right directions are intentionally not defined 5762306a36Sopenharmony_ci and depend on the environment in which the camera is used. 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci A typical example of a (very common) picture of a shark swimming from left 6062306a36Sopenharmony_ci to right, as seen from the camera, is: 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci 0 X-axis 6362306a36Sopenharmony_ci 0 +-------------------------------------> 6462306a36Sopenharmony_ci ! 6562306a36Sopenharmony_ci ! 6662306a36Sopenharmony_ci ! 6762306a36Sopenharmony_ci ! |\____)\___ 6862306a36Sopenharmony_ci ! ) _____ __`< 6962306a36Sopenharmony_ci ! |/ )/ 7062306a36Sopenharmony_ci ! 7162306a36Sopenharmony_ci ! 7262306a36Sopenharmony_ci ! 7362306a36Sopenharmony_ci V 7462306a36Sopenharmony_ci Y-axis 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci with the reference system 'Rs' placed on the camera focal plane: 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci ¸.·˙! 7962306a36Sopenharmony_ci ¸.·˙ ! 8062306a36Sopenharmony_ci _ ¸.·˙ ! 8162306a36Sopenharmony_ci +-/ \-+¸.·˙ ! 8262306a36Sopenharmony_ci | (o) | ! Camera focal plane 8362306a36Sopenharmony_ci +-----+˙·.¸ ! 8462306a36Sopenharmony_ci ˙·.¸ ! 8562306a36Sopenharmony_ci ˙·.¸ ! 8662306a36Sopenharmony_ci ˙·.¸! 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci When projected on the sensor's pixel array, the image and the associated 8962306a36Sopenharmony_ci reference system 'Rs' are typically (but not always) inverted, due to the 9062306a36Sopenharmony_ci camera module's lens optical inversion effect. 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci Assuming the above represented scene of the swimming shark, the lens 9362306a36Sopenharmony_ci inversion projects the scene and its reference system onto the sensor 9462306a36Sopenharmony_ci pixel array, seen from the front of the camera sensor, as follows: 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci Y-axis 9762306a36Sopenharmony_ci ^ 9862306a36Sopenharmony_ci ! 9962306a36Sopenharmony_ci ! 10062306a36Sopenharmony_ci ! 10162306a36Sopenharmony_ci ! |\_____)\__ 10262306a36Sopenharmony_ci ! ) ____ ___.< 10362306a36Sopenharmony_ci ! |/ )/ 10462306a36Sopenharmony_ci ! 10562306a36Sopenharmony_ci ! 10662306a36Sopenharmony_ci ! 10762306a36Sopenharmony_ci 0 +-------------------------------------> 10862306a36Sopenharmony_ci 0 X-axis 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci Note the shark being upside-down. 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci The resulting projected reference system is named 'Rp'. 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci The camera rotation property is then defined as the angular difference in 11562306a36Sopenharmony_ci the counter-clockwise direction between the camera reference system 'Rc' 11662306a36Sopenharmony_ci and the projected scene reference system 'Rp'. It is expressed in degrees 11762306a36Sopenharmony_ci as a number in the range [0, 360[. 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci Examples 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci 0 degrees camera rotation: 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci Y-Rp 12562306a36Sopenharmony_ci ^ 12662306a36Sopenharmony_ci Y-Rc ! 12762306a36Sopenharmony_ci ^ ! 12862306a36Sopenharmony_ci ! ! 12962306a36Sopenharmony_ci ! ! 13062306a36Sopenharmony_ci ! ! 13162306a36Sopenharmony_ci ! ! 13262306a36Sopenharmony_ci ! ! 13362306a36Sopenharmony_ci ! ! 13462306a36Sopenharmony_ci ! ! 13562306a36Sopenharmony_ci ! 0 +-------------------------------------> 13662306a36Sopenharmony_ci ! 0 X-Rp 13762306a36Sopenharmony_ci 0 +-------------------------------------> 13862306a36Sopenharmony_ci 0 X-Rc 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci X-Rc 0 14262306a36Sopenharmony_ci <------------------------------------+ 0 14362306a36Sopenharmony_ci X-Rp 0 ! 14462306a36Sopenharmony_ci <------------------------------------+ 0 ! 14562306a36Sopenharmony_ci ! ! 14662306a36Sopenharmony_ci ! ! 14762306a36Sopenharmony_ci ! ! 14862306a36Sopenharmony_ci ! ! 14962306a36Sopenharmony_ci ! ! 15062306a36Sopenharmony_ci ! ! 15162306a36Sopenharmony_ci ! ! 15262306a36Sopenharmony_ci ! V 15362306a36Sopenharmony_ci ! Y-Rc 15462306a36Sopenharmony_ci V 15562306a36Sopenharmony_ci Y-Rp 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci 90 degrees camera rotation: 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci 0 Y-Rc 16062306a36Sopenharmony_ci 0 +--------------------> 16162306a36Sopenharmony_ci ! Y-Rp 16262306a36Sopenharmony_ci ! ^ 16362306a36Sopenharmony_ci ! ! 16462306a36Sopenharmony_ci ! ! 16562306a36Sopenharmony_ci ! ! 16662306a36Sopenharmony_ci ! ! 16762306a36Sopenharmony_ci ! ! 16862306a36Sopenharmony_ci ! ! 16962306a36Sopenharmony_ci ! ! 17062306a36Sopenharmony_ci ! ! 17162306a36Sopenharmony_ci ! ! 17262306a36Sopenharmony_ci ! 0 +-------------------------------------> 17362306a36Sopenharmony_ci ! 0 X-Rp 17462306a36Sopenharmony_ci ! 17562306a36Sopenharmony_ci ! 17662306a36Sopenharmony_ci ! 17762306a36Sopenharmony_ci ! 17862306a36Sopenharmony_ci V 17962306a36Sopenharmony_ci X-Rc 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci 180 degrees camera rotation: 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci 0 18462306a36Sopenharmony_ci <------------------------------------+ 0 18562306a36Sopenharmony_ci X-Rc ! 18662306a36Sopenharmony_ci Y-Rp ! 18762306a36Sopenharmony_ci ^ ! 18862306a36Sopenharmony_ci ! ! 18962306a36Sopenharmony_ci ! ! 19062306a36Sopenharmony_ci ! ! 19162306a36Sopenharmony_ci ! ! 19262306a36Sopenharmony_ci ! ! 19362306a36Sopenharmony_ci ! ! 19462306a36Sopenharmony_ci ! V 19562306a36Sopenharmony_ci ! Y-Rc 19662306a36Sopenharmony_ci 0 +-------------------------------------> 19762306a36Sopenharmony_ci 0 X-Rp 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci 270 degrees camera rotation: 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci 0 Y-Rc 20262306a36Sopenharmony_ci 0 +--------------------> 20362306a36Sopenharmony_ci ! 0 20462306a36Sopenharmony_ci ! <-----------------------------------+ 0 20562306a36Sopenharmony_ci ! X-Rp ! 20662306a36Sopenharmony_ci ! ! 20762306a36Sopenharmony_ci ! ! 20862306a36Sopenharmony_ci ! ! 20962306a36Sopenharmony_ci ! ! 21062306a36Sopenharmony_ci ! ! 21162306a36Sopenharmony_ci ! ! 21262306a36Sopenharmony_ci ! ! 21362306a36Sopenharmony_ci ! ! 21462306a36Sopenharmony_ci ! V 21562306a36Sopenharmony_ci ! Y-Rp 21662306a36Sopenharmony_ci ! 21762306a36Sopenharmony_ci ! 21862306a36Sopenharmony_ci ! 21962306a36Sopenharmony_ci ! 22062306a36Sopenharmony_ci V 22162306a36Sopenharmony_ci X-Rc 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci Example one - Webcam 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci A camera module installed on the user facing part of a laptop screen 22762306a36Sopenharmony_ci casing used for video calls. The captured images are meant to be displayed 22862306a36Sopenharmony_ci in landscape mode (width > height) on the laptop screen. 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci The camera is typically mounted upside-down to compensate the lens optical 23162306a36Sopenharmony_ci inversion effect: 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci Y-Rp 23462306a36Sopenharmony_ci Y-Rc ^ 23562306a36Sopenharmony_ci ^ ! 23662306a36Sopenharmony_ci ! ! 23762306a36Sopenharmony_ci ! ! |\_____)\__ 23862306a36Sopenharmony_ci ! ! ) ____ ___.< 23962306a36Sopenharmony_ci ! ! |/ )/ 24062306a36Sopenharmony_ci ! ! 24162306a36Sopenharmony_ci ! ! 24262306a36Sopenharmony_ci ! ! 24362306a36Sopenharmony_ci ! 0 +-------------------------------------> 24462306a36Sopenharmony_ci ! 0 X-Rp 24562306a36Sopenharmony_ci 0 +-------------------------------------> 24662306a36Sopenharmony_ci 0 X-Rc 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci The two reference systems are aligned, the resulting camera rotation is 24962306a36Sopenharmony_ci 0 degrees, no rotation correction needs to be applied to the resulting 25062306a36Sopenharmony_ci image once captured to memory buffers to correctly display it to users: 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci +--------------------------------------+ 25362306a36Sopenharmony_ci ! ! 25462306a36Sopenharmony_ci ! ! 25562306a36Sopenharmony_ci ! ! 25662306a36Sopenharmony_ci ! |\____)\___ ! 25762306a36Sopenharmony_ci ! ) _____ __`< ! 25862306a36Sopenharmony_ci ! |/ )/ ! 25962306a36Sopenharmony_ci ! ! 26062306a36Sopenharmony_ci ! ! 26162306a36Sopenharmony_ci ! ! 26262306a36Sopenharmony_ci +--------------------------------------+ 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci If the camera sensor is not mounted upside-down to compensate for the lens 26562306a36Sopenharmony_ci optical inversion, the two reference systems will not be aligned, with 26662306a36Sopenharmony_ci 'Rp' being rotated 180 degrees relatively to 'Rc': 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci X-Rc 0 27062306a36Sopenharmony_ci <------------------------------------+ 0 27162306a36Sopenharmony_ci ! 27262306a36Sopenharmony_ci Y-Rp ! 27362306a36Sopenharmony_ci ^ ! 27462306a36Sopenharmony_ci ! ! 27562306a36Sopenharmony_ci ! |\_____)\__ ! 27662306a36Sopenharmony_ci ! ) ____ ___.< ! 27762306a36Sopenharmony_ci ! |/ )/ ! 27862306a36Sopenharmony_ci ! ! 27962306a36Sopenharmony_ci ! ! 28062306a36Sopenharmony_ci ! V 28162306a36Sopenharmony_ci ! Y-Rc 28262306a36Sopenharmony_ci 0 +-------------------------------------> 28362306a36Sopenharmony_ci 0 X-Rp 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci The image once captured to memory will then be rotated by 180 degrees: 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci +--------------------------------------+ 28862306a36Sopenharmony_ci ! ! 28962306a36Sopenharmony_ci ! ! 29062306a36Sopenharmony_ci ! ! 29162306a36Sopenharmony_ci ! __/(_____/| ! 29262306a36Sopenharmony_ci ! >.___ ____ ( ! 29362306a36Sopenharmony_ci ! \( \| ! 29462306a36Sopenharmony_ci ! ! 29562306a36Sopenharmony_ci ! ! 29662306a36Sopenharmony_ci ! ! 29762306a36Sopenharmony_ci +--------------------------------------+ 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci A software rotation correction of 180 degrees should be applied to 30062306a36Sopenharmony_ci correctly display the image: 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ci +--------------------------------------+ 30362306a36Sopenharmony_ci ! ! 30462306a36Sopenharmony_ci ! ! 30562306a36Sopenharmony_ci ! ! 30662306a36Sopenharmony_ci ! |\____)\___ ! 30762306a36Sopenharmony_ci ! ) _____ __`< ! 30862306a36Sopenharmony_ci ! |/ )/ ! 30962306a36Sopenharmony_ci ! ! 31062306a36Sopenharmony_ci ! ! 31162306a36Sopenharmony_ci ! ! 31262306a36Sopenharmony_ci +--------------------------------------+ 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci Example two - Phone camera 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci A camera installed on the back side of a mobile device facing away from 31762306a36Sopenharmony_ci the user. The captured images are meant to be displayed in portrait mode 31862306a36Sopenharmony_ci (height > width) to match the device screen orientation and the device 31962306a36Sopenharmony_ci usage orientation used when taking the picture. 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_ci The camera sensor is typically mounted with its pixel array longer side 32262306a36Sopenharmony_ci aligned to the device longer side, upside-down mounted to compensate for 32362306a36Sopenharmony_ci the lens optical inversion effect: 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci 0 Y-Rc 32662306a36Sopenharmony_ci 0 +--------------------> 32762306a36Sopenharmony_ci ! Y-Rp 32862306a36Sopenharmony_ci ! ^ 32962306a36Sopenharmony_ci ! ! 33062306a36Sopenharmony_ci ! ! 33162306a36Sopenharmony_ci ! ! 33262306a36Sopenharmony_ci ! ! |\_____)\__ 33362306a36Sopenharmony_ci ! ! ) ____ ___.< 33462306a36Sopenharmony_ci ! ! |/ )/ 33562306a36Sopenharmony_ci ! ! 33662306a36Sopenharmony_ci ! ! 33762306a36Sopenharmony_ci ! ! 33862306a36Sopenharmony_ci ! 0 +-------------------------------------> 33962306a36Sopenharmony_ci ! 0 X-Rp 34062306a36Sopenharmony_ci ! 34162306a36Sopenharmony_ci ! 34262306a36Sopenharmony_ci ! 34362306a36Sopenharmony_ci ! 34462306a36Sopenharmony_ci V 34562306a36Sopenharmony_ci X-Rc 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci The two reference systems are not aligned and the 'Rp' reference system is 34862306a36Sopenharmony_ci rotated by 90 degrees in the counter-clockwise direction relatively to the 34962306a36Sopenharmony_ci 'Rc' reference system. 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci The image once captured to memory will be rotated: 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci +-------------------------------------+ 35462306a36Sopenharmony_ci | _ _ | 35562306a36Sopenharmony_ci | \ / | 35662306a36Sopenharmony_ci | | | | 35762306a36Sopenharmony_ci | | | | 35862306a36Sopenharmony_ci | | > | 35962306a36Sopenharmony_ci | < | | 36062306a36Sopenharmony_ci | | | | 36162306a36Sopenharmony_ci | . | 36262306a36Sopenharmony_ci | V | 36362306a36Sopenharmony_ci +-------------------------------------+ 36462306a36Sopenharmony_ci 36562306a36Sopenharmony_ci A correction of 90 degrees in counter-clockwise direction has to be 36662306a36Sopenharmony_ci applied to correctly display the image in portrait mode on the device 36762306a36Sopenharmony_ci screen: 36862306a36Sopenharmony_ci 36962306a36Sopenharmony_ci +--------------------+ 37062306a36Sopenharmony_ci | | 37162306a36Sopenharmony_ci | | 37262306a36Sopenharmony_ci | | 37362306a36Sopenharmony_ci | | 37462306a36Sopenharmony_ci | | 37562306a36Sopenharmony_ci | | 37662306a36Sopenharmony_ci | |\____)\___ | 37762306a36Sopenharmony_ci | ) _____ __`< | 37862306a36Sopenharmony_ci | |/ )/ | 37962306a36Sopenharmony_ci | | 38062306a36Sopenharmony_ci | | 38162306a36Sopenharmony_ci | | 38262306a36Sopenharmony_ci | | 38362306a36Sopenharmony_ci | | 38462306a36Sopenharmony_ci +--------------------+ 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci orientation: 38762306a36Sopenharmony_ci description: 38862306a36Sopenharmony_ci The orientation of a device (typically an image sensor or a flash LED) 38962306a36Sopenharmony_ci describing its mounting position relative to the usage orientation of the 39062306a36Sopenharmony_ci system where the device is installed on. 39162306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 39262306a36Sopenharmony_ci enum: 39362306a36Sopenharmony_ci # Front. The device is mounted on the front facing side of the system. For 39462306a36Sopenharmony_ci # mobile devices such as smartphones, tablets and laptops the front side 39562306a36Sopenharmony_ci # is the user facing side. 39662306a36Sopenharmony_ci - 0 39762306a36Sopenharmony_ci # Back. The device is mounted on the back side of the system, which is 39862306a36Sopenharmony_ci # defined as the opposite side of the front facing one. 39962306a36Sopenharmony_ci - 1 40062306a36Sopenharmony_ci # External. The device is not attached directly to the system but is 40162306a36Sopenharmony_ci # attached in a way that allows it to move freely. 40262306a36Sopenharmony_ci - 2 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ciadditionalProperties: true 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci... 407