Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 193035
b: refs/heads/master
c: f7fc97a
h: refs/heads/master
i:
  193033: f6e7cea
  193031: d1cf5e1
v: v3
  • Loading branch information
Guennadi Liakhovetski authored and Mauro Carvalho Chehab committed May 19, 2010
1 parent 7b46337 commit 681e2b5
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 50 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ab56d5eb58182b0c9e179c33ddd3f3aabb6c798f
refs/heads/master: f7fc97adb1efd51609d965ba76d559f7daef4262
80 changes: 31 additions & 49 deletions trunk/Documentation/video4linux/sh_mobile_ceu_camera.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,30 @@ Generic scaling / cropping scheme
-2-- -\
| --\
| --\
+-5-- -\ -- -3--
| ---\
| --- -4-- -\
| -\
| - -6--
+-5-- . -- -3-- -\
| `... -\
| `... -4-- . - -7..
| `.
| `. .6--
|
| - -6'-
| -/
| --- -4'- -/
| ---/
+-5'- -/
| -- -3'-
| . .6'-
|
| ... -4'-
| ...´ - -7'.
+-5'- -/
| -- -3'- -/
| --/
| --/
-2'- -/
|
|
-1'-

Produced by user requests:
In the above chart minuses and slashes represent "real" data amounts, points and
accents represent "useful" data, basically, CEU scaled amd cropped output,
mapped back onto the client's source plane.

Such a configuration can be produced by user requests:

S_CROP(left / top = (5) - (1), width / height = (5') - (5))
S_FMT(width / height = (6') - (6))
Expand Down Expand Up @@ -106,52 +110,30 @@ window:
S_CROP
------

If old scale applied to new crop is invalid produce nearest new scale possible

1. Calculate current combined scales.

scale_comb = (((4') - (4)) / ((6') - (6))) * (((2') - (2)) / ((3') - (3)))

2. Apply iterative sensor S_CROP for new input window.

3. If old combined scales applied to new crop produce an impossible user window,
adjust scales to produce nearest possible window.

width_u_out = ((5') - (5)) / scale_comb
The API at http://v4l2spec.bytesex.org/spec/x1904.htm says:

if (width_u_out > max)
scale_comb = ((5') - (5)) / max;
else if (width_u_out < min)
scale_comb = ((5') - (5)) / min;
"...specification does not define an origin or units. However by convention
drivers should horizontally count unscaled samples relative to 0H."

4. Issue G_CROP to retrieve actual input window.
We choose to follow the advise and interpret cropping units as client input
pixels.

5. Using actual input window and calculated combined scales calculate sensor
target output window.

width_s_out = ((3') - (3)) = ((2') - (2)) / scale_comb

6. Apply iterative S_FMT for new sensor target output window.

7. Issue G_FMT to retrieve the actual sensor output window.

8. Calculate sensor scales.

scale_s = ((3') - (3)) / ((2') - (2))
Cropping is performed in the following 6 steps:

9. Calculate sensor output subwindow to be cropped on CEU by applying sensor
scales to the requested window.
1. Request exactly user rectangle from the sensor.

width_ceu = ((5') - (5)) / scale_s
2. If smaller - iterate until a larger one is obtained. Result: sensor cropped
to 2 : 2', target crop 5 : 5', current output format 6' - 6.

10. Use CEU cropping for above calculated window.
3. In the previous step the sensor has tried to preserve its output frame as
good as possible, but it could have changed. Retrieve it again.

11. Calculate CEU scales from sensor scales from results of (10) and user window
from (3)
4. Sensor scaled to 3 : 3'. Sensor's scale is (2' - 2) / (3' - 3). Calculate
intermediate window: 4' - 4 = (5' - 5) * (3' - 3) / (2' - 2)

scale_ceu = calc_scale(((5') - (5)), &width_u_out)
5. Calculate and apply host scale = (6' - 6) / (4' - 4)

12. Apply CEU scales.
6. Calculate and apply host crop: 6 - 7 = (5 - 2) * (6' - 6) / (5' - 5)

--
Author: Guennadi Liakhovetski <g.liakhovetski@gmx.de>

0 comments on commit 681e2b5

Please sign in to comment.