summaryrefslogtreecommitdiff
path: root/apps/recorder
diff options
context:
space:
mode:
authorAndrew Mahone <andrew.mahone@gmail.com>2009-01-13 14:41:29 +0000
committerAndrew Mahone <andrew.mahone@gmail.com>2009-01-13 14:41:29 +0000
commit738a5643ad3248ee9fb9fc47134160681a19068c (patch)
treeb3d329d0a47431e81382e9a9f95b5adccf3811b2 /apps/recorder
parent2fbf09752d385af861279af195d68f920859202d (diff)
support pixel aspect ratio compensation in recalc_dimension, with PAR defined as 1:1 by default, and set to 4:5 for archos bitmap targets
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19759 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/recorder')
-rw-r--r--apps/recorder/resize.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/apps/recorder/resize.c b/apps/recorder/resize.c
index 2e6c3ff266..f9345113d6 100644
--- a/apps/recorder/resize.c
+++ b/apps/recorder/resize.c
@@ -66,24 +66,30 @@
*/
int recalc_dimension(struct dim *dst, struct dim *src)
{
+ /* This only looks backwards. The input image size is being pre-scaled by
+ * the inverse of the pixel aspect ratio, so that once the size it scaled
+ * to meet the output constraints, the scaled image will have appropriate
+ * proportions.
+ */
+ int sw = src->width * LCD_PIXEL_ASPECT_HEIGHT;
+ int sh = src->height * LCD_PIXEL_ASPECT_WIDTH;
int tmp;
if (dst->width <= 0)
dst->width = LCD_WIDTH;
if (dst->height <= 0)
dst->height = LCD_HEIGHT;
#ifndef HAVE_UPSCALER
- if (dst->width > src->width || dst->height > src->height)
+ if (dst->width > sw || dst->height > sh)
{
- dst->width = src->width;
- dst->height = src->height;
+ dst->width = sw;
+ dst->height = sh;
}
- if (src->width == dst->width && src->height == dst->height)
+ if (sw == dst->width && sh == dst->height)
return 1;
#endif
- tmp = (src->width * dst->height + (src->height >> 1)) / src->height;
+ tmp = (sw * dst->height + (sh >> 1)) / sh;
if (tmp > dst->width)
- dst->height = (src->height * dst->width + (src->width >> 1))
- / src->width;
+ dst->height = (sh * dst->width + (sw >> 1)) / sw;
else
dst->width = tmp;
return src->width == dst->width && src->height == dst->height;