summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Pöschel <github@basicmaster.de>2015-11-29 20:38:49 +0100
committerStefan Pöschel <github@basicmaster.de>2015-11-29 20:38:49 +0100
commit3c6bffdede22fcebb62bac5abf11feb9ea7333e1 (patch)
treede07d54cb2be33a91c8b9541357f0a8eaad7e692 /src
parent5fcfec4c1a51be35ebeeca88cc0633ff996ef71d (diff)
downloadfdk-aac-3c6bffdede22fcebb62bac5abf11feb9ea7333e1.tar.gz
fdk-aac-3c6bffdede22fcebb62bac5abf11feb9ea7333e1.tar.bz2
fdk-aac-3c6bffdede22fcebb62bac5abf11feb9ea7333e1.zip
MOT encoder: fix possible odd target image size
The method MagickBorderImage adds the same amount of border on left/right resp. top/bottom side. Thus if the source image has an odd size (e.g. 201x200 px), the resulting size gets odd, too (here 319x240 px). To prevent this, the border is added by inserting the resized image centered into a black background of 320x240 px.
Diffstat (limited to 'src')
-rw-r--r--src/mot-encoder.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/mot-encoder.cpp b/src/mot-encoder.cpp
index 9abbd0e..e1c965f 100644
--- a/src/mot-encoder.cpp
+++ b/src/mot-encoder.cpp
@@ -905,6 +905,7 @@ size_t resizeImage(MagickWand* m_wand, unsigned char** blob)
size_t height = MagickGetImageHeight(m_wand);
size_t width = MagickGetImageWidth(m_wand);
+ MagickWand *bg_wand = NULL;
PixelWand *p_wand = NULL;
while (height > 240 || width > 320) {
@@ -924,23 +925,28 @@ size_t resizeImage(MagickWand* m_wand, unsigned char** blob)
// Make sure smaller images are 320x240 pixels, and
// add a black border
+ bg_wand = NewMagickWand();
+
p_wand = NewPixelWand();
PixelSetColor(p_wand, "black");
- MagickBorderImage(m_wand, p_wand, (320-width)/2, (240-height)/2);
+ MagickNewImage(bg_wand, 320, 240, p_wand);
DestroyPixelWand(p_wand);
- height = MagickGetImageHeight(m_wand);
- width = MagickGetImageWidth(m_wand);
+ MagickCompositeImage(bg_wand, m_wand, OverCompositeOp, (320-width)/2, (240-height)/2);
- MagickSetImageFormat(m_wand, "jpg");
+
+ height = MagickGetImageHeight(bg_wand);
+ width = MagickGetImageWidth(bg_wand);
+
+ MagickSetImageFormat(bg_wand, "jpg");
int quality = 100;
do {
quality -= 5;
- MagickSetImageCompressionQuality(m_wand, quality);
- *blob = MagickGetImagesBlob(m_wand, &blobsize);
+ MagickSetImageCompressionQuality(bg_wand, quality);
+ *blob = MagickGetImagesBlob(bg_wand, &blobsize);
} while (blobsize > MAXSLIDESIZE && quality > MINQUALITY);
if (blobsize > MAXSLIDESIZE) {
@@ -954,6 +960,8 @@ size_t resizeImage(MagickWand* m_wand, unsigned char** blob)
fprintf(stderr, "mot-encoder resized image to %zu x %zu. Size after compression %zu bytes (q=%d)\n",
width, height, blobsize, quality);
}
+
+ DestroyMagickWand(bg_wand);
return blobsize;
}
#endif