b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | From 1af1c75a6965dd975d40e904e921d9f07395ffcb Mon Sep 17 00:00:00 2001 |
| 2 | From: Jacopo Mondi <jacopo@jmondi.org> |
| 3 | Date: Sat, 9 May 2020 11:04:45 +0200 |
| 4 | Subject: [PATCH] media: dt-bindings: video-interface: Replace |
| 5 | 'rotation' description |
| 6 | |
| 7 | Replace the 'rotation' property description by providing a definition |
| 8 | relative to the camera sensor pixel array coordinate system and the |
| 9 | captured scene. |
| 10 | |
| 11 | Acked-by: Rob Herring <robh@kernel.org> |
| 12 | Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> |
| 13 | Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> |
| 14 | Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| 15 | |
| 16 | Commit 915bd31ce9ed328535e5ecf3ca730c5764ec1a38 upstream |
| 17 | |
| 18 | Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| 19 | --- |
| 20 | .../bindings/media/video-interfaces.txt | 359 +++++++++++++++++- |
| 21 | 1 file changed, 356 insertions(+), 3 deletions(-) |
| 22 | |
| 23 | --- a/Documentation/devicetree/bindings/media/video-interfaces.txt |
| 24 | +++ b/Documentation/devicetree/bindings/media/video-interfaces.txt |
| 25 | @@ -85,9 +85,362 @@ Optional properties |
| 26 | |
| 27 | - lens-focus: A phandle to the node of the focus lens controller. |
| 28 | |
| 29 | -- rotation: The device, typically an image sensor, is not mounted upright, |
| 30 | - but a number of degrees counter clockwise. Typical values are 0 and 180 |
| 31 | - (upside down). |
| 32 | +- rotation: The camera rotation is expressed as the angular difference in |
| 33 | + degrees between two reference systems, one relative to the camera module, and |
| 34 | + one defined on the external world scene to be captured when projected on the |
| 35 | + image sensor pixel array. |
| 36 | + |
| 37 | + A camera sensor has a 2-dimensional reference system 'Rc' defined by |
| 38 | + its pixel array read-out order. The origin is set to the first pixel |
| 39 | + being read out, the X-axis points along the column read-out direction |
| 40 | + towards the last columns, and the Y-axis along the row read-out |
| 41 | + direction towards the last row. |
| 42 | + |
| 43 | + A typical example for a sensor with a 2592x1944 pixel array matrix |
| 44 | + observed from the front is: |
| 45 | + |
| 46 | + 2591 X-axis 0 |
| 47 | + <------------------------+ 0 |
| 48 | + .......... ... ..........! |
| 49 | + .......... ... ..........! Y-axis |
| 50 | + ... ! |
| 51 | + .......... ... ..........! |
| 52 | + .......... ... ..........! 1943 |
| 53 | + V |
| 54 | + |
| 55 | + The external world scene reference system 'Rs' is a 2-dimensional |
| 56 | + reference system on the focal plane of the camera module. The origin is |
| 57 | + placed on the top-left corner of the visible scene, the X-axis points |
| 58 | + towards the right, and the Y-axis points towards the bottom of the |
| 59 | + scene. The top, bottom, left and right directions are intentionally not |
| 60 | + defined and depend on the environment in which the camera is used. |
| 61 | + |
| 62 | + A typical example of a (very common) picture of a shark swimming from |
| 63 | + left to right, as seen from the camera, is: |
| 64 | + |
| 65 | + 0 X-axis |
| 66 | + 0 +-------------------------------------> |
| 67 | + ! |
| 68 | + ! |
| 69 | + ! |
| 70 | + ! |\____)\___ |
| 71 | + ! ) _____ __`< |
| 72 | + ! |/ )/ |
| 73 | + ! |
| 74 | + ! |
| 75 | + ! |
| 76 | + V |
| 77 | + Y-axis |
| 78 | + |
| 79 | + with the reference system 'Rs' placed on the camera focal plane: |
| 80 | + |
| 81 | + ¸.·˙! |
| 82 | + ¸.·˙ ! |
| 83 | + _ ¸.·˙ ! |
| 84 | + +-/ \-+¸.·˙ ! |
| 85 | + | (o) | ! Camera focal plane |
| 86 | + +-----+˙·.¸ ! |
| 87 | + ˙·.¸ ! |
| 88 | + ˙·.¸ ! |
| 89 | + ˙·.¸! |
| 90 | + |
| 91 | + When projected on the sensor's pixel array, the image and the associated |
| 92 | + reference system 'Rs' are typically (but not always) inverted, due to |
| 93 | + the camera module's lens optical inversion effect. |
| 94 | + |
| 95 | + Assuming the above represented scene of the swimming shark, the lens |
| 96 | + inversion projects the scene and its reference system onto the sensor |
| 97 | + pixel array, seen from the front of the camera sensor, as follows: |
| 98 | + |
| 99 | + Y-axis |
| 100 | + ^ |
| 101 | + ! |
| 102 | + ! |
| 103 | + ! |
| 104 | + ! |\_____)\__ |
| 105 | + ! ) ____ ___.< |
| 106 | + ! |/ )/ |
| 107 | + ! |
| 108 | + ! |
| 109 | + ! |
| 110 | + 0 +-------------------------------------> |
| 111 | + 0 X-axis |
| 112 | + |
| 113 | + Note the shark being upside-down. |
| 114 | + |
| 115 | + The resulting projected reference system is named 'Rp'. |
| 116 | + |
| 117 | + The camera rotation property is then defined as the angular difference |
| 118 | + in the counter-clockwise direction between the camera reference system |
| 119 | + 'Rc' and the projected scene reference system 'Rp'. It is expressed in |
| 120 | + degrees as a number in the range [0, 360[. |
| 121 | + |
| 122 | + Examples |
| 123 | + |
| 124 | + 0 degrees camera rotation: |
| 125 | + |
| 126 | + |
| 127 | + Y-Rp |
| 128 | + ^ |
| 129 | + Y-Rc ! |
| 130 | + ^ ! |
| 131 | + ! ! |
| 132 | + ! ! |
| 133 | + ! ! |
| 134 | + ! ! |
| 135 | + ! ! |
| 136 | + ! ! |
| 137 | + ! ! |
| 138 | + ! 0 +-------------------------------------> |
| 139 | + ! 0 X-Rp |
| 140 | + 0 +-------------------------------------> |
| 141 | + 0 X-Rc |
| 142 | + |
| 143 | + |
| 144 | + X-Rc 0 |
| 145 | + <------------------------------------+ 0 |
| 146 | + X-Rp 0 ! |
| 147 | + <------------------------------------+ 0 ! |
| 148 | + ! ! |
| 149 | + ! ! |
| 150 | + ! ! |
| 151 | + ! ! |
| 152 | + ! ! |
| 153 | + ! ! |
| 154 | + ! ! |
| 155 | + ! V |
| 156 | + ! Y-Rc |
| 157 | + V |
| 158 | + Y-Rp |
| 159 | + |
| 160 | + 90 degrees camera rotation: |
| 161 | + |
| 162 | + 0 Y-Rc |
| 163 | + 0 +--------------------> |
| 164 | + ! Y-Rp |
| 165 | + ! ^ |
| 166 | + ! ! |
| 167 | + ! ! |
| 168 | + ! ! |
| 169 | + ! ! |
| 170 | + ! ! |
| 171 | + ! ! |
| 172 | + ! ! |
| 173 | + ! ! |
| 174 | + ! ! |
| 175 | + ! 0 +-------------------------------------> |
| 176 | + ! 0 X-Rp |
| 177 | + ! |
| 178 | + ! |
| 179 | + ! |
| 180 | + ! |
| 181 | + V |
| 182 | + X-Rc |
| 183 | + |
| 184 | + 180 degrees camera rotation: |
| 185 | + |
| 186 | + 0 |
| 187 | + <------------------------------------+ 0 |
| 188 | + X-Rc ! |
| 189 | + Y-Rp ! |
| 190 | + ^ ! |
| 191 | + ! ! |
| 192 | + ! ! |
| 193 | + ! ! |
| 194 | + ! ! |
| 195 | + ! ! |
| 196 | + ! ! |
| 197 | + ! V |
| 198 | + ! Y-Rc |
| 199 | + 0 +-------------------------------------> |
| 200 | + 0 X-Rp |
| 201 | + |
| 202 | + 270 degrees camera rotation: |
| 203 | + |
| 204 | + 0 Y-Rc |
| 205 | + 0 +--------------------> |
| 206 | + ! 0 |
| 207 | + ! <-----------------------------------+ 0 |
| 208 | + ! X-Rp ! |
| 209 | + ! ! |
| 210 | + ! ! |
| 211 | + ! ! |
| 212 | + ! ! |
| 213 | + ! ! |
| 214 | + ! ! |
| 215 | + ! ! |
| 216 | + ! ! |
| 217 | + ! V |
| 218 | + ! Y-Rp |
| 219 | + ! |
| 220 | + ! |
| 221 | + ! |
| 222 | + ! |
| 223 | + V |
| 224 | + X-Rc |
| 225 | + |
| 226 | + |
| 227 | + Example one - Webcam |
| 228 | + |
| 229 | + A camera module installed on the user facing part of a laptop screen |
| 230 | + casing used for video calls. The captured images are meant to be |
| 231 | + displayed in landscape mode (width > height) on the laptop screen. |
| 232 | + |
| 233 | + The camera is typically mounted upside-down to compensate the lens |
| 234 | + optical inversion effect: |
| 235 | + |
| 236 | + Y-Rp |
| 237 | + Y-Rc ^ |
| 238 | + ^ ! |
| 239 | + ! ! |
| 240 | + ! ! |\_____)\__ |
| 241 | + ! ! ) ____ ___.< |
| 242 | + ! ! |/ )/ |
| 243 | + ! ! |
| 244 | + ! ! |
| 245 | + ! ! |
| 246 | + ! 0 +-------------------------------------> |
| 247 | + ! 0 X-Rp |
| 248 | + 0 +-------------------------------------> |
| 249 | + 0 X-Rc |
| 250 | + |
| 251 | + The two reference systems are aligned, the resulting camera rotation is |
| 252 | + 0 degrees, no rotation correction needs to be applied to the resulting |
| 253 | + image once captured to memory buffers to correctly display it to users: |
| 254 | + |
| 255 | + +--------------------------------------+ |
| 256 | + ! ! |
| 257 | + ! ! |
| 258 | + ! ! |
| 259 | + ! |\____)\___ ! |
| 260 | + ! ) _____ __`< ! |
| 261 | + ! |/ )/ ! |
| 262 | + ! ! |
| 263 | + ! ! |
| 264 | + ! ! |
| 265 | + +--------------------------------------+ |
| 266 | + |
| 267 | + If the camera sensor is not mounted upside-down to compensate for the |
| 268 | + lens optical inversion, the two reference systems will not be aligned, |
| 269 | + with 'Rp' being rotated 180 degrees relatively to 'Rc': |
| 270 | + |
| 271 | + |
| 272 | + X-Rc 0 |
| 273 | + <------------------------------------+ 0 |
| 274 | + ! |
| 275 | + Y-Rp ! |
| 276 | + ^ ! |
| 277 | + ! ! |
| 278 | + ! |\_____)\__ ! |
| 279 | + ! ) ____ ___.< ! |
| 280 | + ! |/ )/ ! |
| 281 | + ! ! |
| 282 | + ! ! |
| 283 | + ! V |
| 284 | + ! Y-Rc |
| 285 | + 0 +-------------------------------------> |
| 286 | + 0 X-Rp |
| 287 | + |
| 288 | + The image once captured to memory will then be rotated by 180 degrees: |
| 289 | + |
| 290 | + +--------------------------------------+ |
| 291 | + ! ! |
| 292 | + ! ! |
| 293 | + ! ! |
| 294 | + ! __/(_____/| ! |
| 295 | + ! >.___ ____ ( ! |
| 296 | + ! \( \| ! |
| 297 | + ! ! |
| 298 | + ! ! |
| 299 | + ! ! |
| 300 | + +--------------------------------------+ |
| 301 | + |
| 302 | + A software rotation correction of 180 degrees should be applied to |
| 303 | + correctly display the image: |
| 304 | + |
| 305 | + +--------------------------------------+ |
| 306 | + ! ! |
| 307 | + ! ! |
| 308 | + ! ! |
| 309 | + ! |\____)\___ ! |
| 310 | + ! ) _____ __`< ! |
| 311 | + ! |/ )/ ! |
| 312 | + ! ! |
| 313 | + ! ! |
| 314 | + ! ! |
| 315 | + +--------------------------------------+ |
| 316 | + |
| 317 | + Example two - Phone camera |
| 318 | + |
| 319 | + A camera installed on the back side of a mobile device facing away from |
| 320 | + the user. The captured images are meant to be displayed in portrait mode |
| 321 | + (height > width) to match the device screen orientation and the device |
| 322 | + usage orientation used when taking the picture. |
| 323 | + |
| 324 | + The camera sensor is typically mounted with its pixel array longer side |
| 325 | + aligned to the device longer side, upside-down mounted to compensate for |
| 326 | + the lens optical inversion effect: |
| 327 | + |
| 328 | + 0 Y-Rc |
| 329 | + 0 +--------------------> |
| 330 | + ! Y-Rp |
| 331 | + ! ^ |
| 332 | + ! ! |
| 333 | + ! ! |
| 334 | + ! ! |
| 335 | + ! ! |\_____)\__ |
| 336 | + ! ! ) ____ ___.< |
| 337 | + ! ! |/ )/ |
| 338 | + ! ! |
| 339 | + ! ! |
| 340 | + ! ! |
| 341 | + ! 0 +-------------------------------------> |
| 342 | + ! 0 X-Rp |
| 343 | + ! |
| 344 | + ! |
| 345 | + ! |
| 346 | + ! |
| 347 | + V |
| 348 | + X-Rc |
| 349 | + |
| 350 | + The two reference systems are not aligned and the 'Rp' reference |
| 351 | + system is rotated by 90 degrees in the counter-clockwise direction |
| 352 | + relatively to the 'Rc' reference system. |
| 353 | + |
| 354 | + The image once captured to memory will be rotated: |
| 355 | + |
| 356 | + +-------------------------------------+ |
| 357 | + | _ _ | |
| 358 | + | \ / | |
| 359 | + | | | | |
| 360 | + | | | | |
| 361 | + | | > | |
| 362 | + | < | | |
| 363 | + | | | | |
| 364 | + | . | |
| 365 | + | V | |
| 366 | + +-------------------------------------+ |
| 367 | + |
| 368 | + A correction of 90 degrees in counter-clockwise direction has to be |
| 369 | + applied to correctly display the image in portrait mode on the device |
| 370 | + screen: |
| 371 | + |
| 372 | + +--------------------+ |
| 373 | + | | |
| 374 | + | | |
| 375 | + | | |
| 376 | + | | |
| 377 | + | | |
| 378 | + | | |
| 379 | + | |\____)\___ | |
| 380 | + | ) _____ __`< | |
| 381 | + | |/ )/ | |
| 382 | + | | |
| 383 | + | | |
| 384 | + | | |
| 385 | + | | |
| 386 | + | | |
| 387 | + +--------------------+ |
| 388 | |
| 389 | - orientation: The orientation of a device (typically an image sensor or a flash |
| 390 | LED) describing its mounting position relative to the usage orientation of the |