| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/media/video-interface-devices.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Common Properties for Video Receiver and Transmitter Devices |
| |
| maintainers: |
| - Jacopo Mondi <jacopo@jmondi.org> |
| - Sakari Ailus <sakari.ailus@linux.intel.com> |
| |
| properties: |
| flash-leds: |
| $ref: /schemas/types.yaml#/definitions/phandle-array |
| description: |
| An array of phandles, each referring to a flash LED, a sub-node of the LED |
| driver device node. |
| |
| lens-focus: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| A phandle to the node of the focus lens controller. |
| |
| rotation: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [ 0, 90, 180, 270 ] |
| description: | |
| The camera rotation is expressed as the angular difference in degrees |
| between two reference systems, one relative to the camera module, and one |
| defined on the external world scene to be captured when projected on the |
| image sensor pixel array. |
| |
| A camera sensor has a 2-dimensional reference system 'Rc' defined by its |
| pixel array read-out order. The origin is set to the first pixel being |
| read out, the X-axis points along the column read-out direction towards |
| the last columns, and the Y-axis along the row read-out direction towards |
| the last row. |
| |
| A typical example for a sensor with a 2592x1944 pixel array matrix |
| observed from the front is: |
| |
| 2591 X-axis 0 |
| <------------------------+ 0 |
| .......... ... ..........! |
| .......... ... ..........! Y-axis |
| ... ! |
| .......... ... ..........! |
| .......... ... ..........! 1943 |
| V |
| |
| The external world scene reference system 'Rs' is a 2-dimensional |
| reference system on the focal plane of the camera module. The origin is |
| placed on the top-left corner of the visible scene, the X-axis points |
| towards the right, and the Y-axis points towards the bottom of the scene. |
| The top, bottom, left and right directions are intentionally not defined |
| and depend on the environment in which the camera is used. |
| |
| A typical example of a (very common) picture of a shark swimming from left |
| to right, as seen from the camera, is: |
| |
| 0 X-axis |
| 0 +-------------------------------------> |
| ! |
| ! |
| ! |
| ! |\____)\___ |
| ! ) _____ __`< |
| ! |/ )/ |
| ! |
| ! |
| ! |
| V |
| Y-axis |
| |
| with the reference system 'Rs' placed on the camera focal plane: |
| |
| ¸.·˙! |
| ¸.·˙ ! |
| _ ¸.·˙ ! |
| +-/ \-+¸.·˙ ! |
| | (o) | ! Camera focal plane |
| +-----+˙·.¸ ! |
| ˙·.¸ ! |
| ˙·.¸ ! |
| ˙·.¸! |
| |
| When projected on the sensor's pixel array, the image and the associated |
| reference system 'Rs' are typically (but not always) inverted, due to the |
| camera module's lens optical inversion effect. |
| |
| Assuming the above represented scene of the swimming shark, the lens |
| inversion projects the scene and its reference system onto the sensor |
| pixel array, seen from the front of the camera sensor, as follows: |
| |
| Y-axis |
| ^ |
| ! |
| ! |
| ! |
| ! |\_____)\__ |
| ! ) ____ ___.< |
| ! |/ )/ |
| ! |
| ! |
| ! |
| 0 +-------------------------------------> |
| 0 X-axis |
| |
| Note the shark being upside-down. |
| |
| The resulting projected reference system is named 'Rp'. |
| |
| The camera rotation property is then defined as the angular difference in |
| the counter-clockwise direction between the camera reference system 'Rc' |
| and the projected scene reference system 'Rp'. It is expressed in degrees |
| as a number in the range [0, 360[. |
| |
| Examples |
| |
| 0 degrees camera rotation: |
| |
| |
| Y-Rp |
| ^ |
| Y-Rc ! |
| ^ ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! 0 +-------------------------------------> |
| ! 0 X-Rp |
| 0 +-------------------------------------> |
| 0 X-Rc |
| |
| |
| X-Rc 0 |
| <------------------------------------+ 0 |
| X-Rp 0 ! |
| <------------------------------------+ 0 ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! V |
| ! Y-Rc |
| V |
| Y-Rp |
| |
| 90 degrees camera rotation: |
| |
| 0 Y-Rc |
| 0 +--------------------> |
| ! Y-Rp |
| ! ^ |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! 0 +-------------------------------------> |
| ! 0 X-Rp |
| ! |
| ! |
| ! |
| ! |
| V |
| X-Rc |
| |
| 180 degrees camera rotation: |
| |
| 0 |
| <------------------------------------+ 0 |
| X-Rc ! |
| Y-Rp ! |
| ^ ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! V |
| ! Y-Rc |
| 0 +-------------------------------------> |
| 0 X-Rp |
| |
| 270 degrees camera rotation: |
| |
| 0 Y-Rc |
| 0 +--------------------> |
| ! 0 |
| ! <-----------------------------------+ 0 |
| ! X-Rp ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! ! |
| ! V |
| ! Y-Rp |
| ! |
| ! |
| ! |
| ! |
| V |
| X-Rc |
| |
| |
| Example one - Webcam |
| |
| A camera module installed on the user facing part of a laptop screen |
| casing used for video calls. The captured images are meant to be displayed |
| in landscape mode (width > height) on the laptop screen. |
| |
| The camera is typically mounted upside-down to compensate the lens optical |
| inversion effect: |
| |
| Y-Rp |
| Y-Rc ^ |
| ^ ! |
| ! ! |
| ! ! |\_____)\__ |
| ! ! ) ____ ___.< |
| ! ! |/ )/ |
| ! ! |
| ! ! |
| ! ! |
| ! 0 +-------------------------------------> |
| ! 0 X-Rp |
| 0 +-------------------------------------> |
| 0 X-Rc |
| |
| The two reference systems are aligned, the resulting camera rotation is |
| 0 degrees, no rotation correction needs to be applied to the resulting |
| image once captured to memory buffers to correctly display it to users: |
| |
| +--------------------------------------+ |
| ! ! |
| ! ! |
| ! ! |
| ! |\____)\___ ! |
| ! ) _____ __`< ! |
| ! |/ )/ ! |
| ! ! |
| ! ! |
| ! ! |
| +--------------------------------------+ |
| |
| If the camera sensor is not mounted upside-down to compensate for the lens |
| optical inversion, the two reference systems will not be aligned, with |
| 'Rp' being rotated 180 degrees relatively to 'Rc': |
| |
| |
| X-Rc 0 |
| <------------------------------------+ 0 |
| ! |
| Y-Rp ! |
| ^ ! |
| ! ! |
| ! |\_____)\__ ! |
| ! ) ____ ___.< ! |
| ! |/ )/ ! |
| ! ! |
| ! ! |
| ! V |
| ! Y-Rc |
| 0 +-------------------------------------> |
| 0 X-Rp |
| |
| The image once captured to memory will then be rotated by 180 degrees: |
| |
| +--------------------------------------+ |
| ! ! |
| ! ! |
| ! ! |
| ! __/(_____/| ! |
| ! >.___ ____ ( ! |
| ! \( \| ! |
| ! ! |
| ! ! |
| ! ! |
| +--------------------------------------+ |
| |
| A software rotation correction of 180 degrees should be applied to |
| correctly display the image: |
| |
| +--------------------------------------+ |
| ! ! |
| ! ! |
| ! ! |
| ! |\____)\___ ! |
| ! ) _____ __`< ! |
| ! |/ )/ ! |
| ! ! |
| ! ! |
| ! ! |
| +--------------------------------------+ |
| |
| Example two - Phone camera |
| |
| A camera installed on the back side of a mobile device facing away from |
| the user. The captured images are meant to be displayed in portrait mode |
| (height > width) to match the device screen orientation and the device |
| usage orientation used when taking the picture. |
| |
| The camera sensor is typically mounted with its pixel array longer side |
| aligned to the device longer side, upside-down mounted to compensate for |
| the lens optical inversion effect: |
| |
| 0 Y-Rc |
| 0 +--------------------> |
| ! Y-Rp |
| ! ^ |
| ! ! |
| ! ! |
| ! ! |
| ! ! |\_____)\__ |
| ! ! ) ____ ___.< |
| ! ! |/ )/ |
| ! ! |
| ! ! |
| ! ! |
| ! 0 +-------------------------------------> |
| ! 0 X-Rp |
| ! |
| ! |
| ! |
| ! |
| V |
| X-Rc |
| |
| The two reference systems are not aligned and the 'Rp' reference system is |
| rotated by 90 degrees in the counter-clockwise direction relatively to the |
| 'Rc' reference system. |
| |
| The image once captured to memory will be rotated: |
| |
| +-------------------------------------+ |
| | _ _ | |
| | \ / | |
| | | | | |
| | | | | |
| | | > | |
| | < | | |
| | | | | |
| | . | |
| | V | |
| +-------------------------------------+ |
| |
| A correction of 90 degrees in counter-clockwise direction has to be |
| applied to correctly display the image in portrait mode on the device |
| screen: |
| |
| +--------------------+ |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | |\____)\___ | |
| | ) _____ __`< | |
| | |/ )/ | |
| | | |
| | | |
| | | |
| | | |
| | | |
| +--------------------+ |
| |
| orientation: |
| description: |
| The orientation of a device (typically an image sensor or a flash LED) |
| describing its mounting position relative to the usage orientation of the |
| system where the device is installed on. |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: |
| # Front. The device is mounted on the front facing side of the system. For |
| # mobile devices such as smartphones, tablets and laptops the front side |
| # is the user facing side. |
| - 0 |
| # Back. The device is mounted on the back side of the system, which is |
| # defined as the opposite side of the front facing one. |
| - 1 |
| # External. The device is not attached directly to the system but is |
| # attached in a way that allows it to move freely. |
| - 2 |
| |
| additionalProperties: true |
| |
| ... |