summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/yuv
diff options
context:
space:
mode:
authorNipun Kwatra <nkwatra@google.com>2010-08-19 17:45:45 -0700
committerNipun Kwatra <nkwatra@google.com>2010-08-20 10:54:59 -0700
commitc0d936ddacc4f7d883f3bd1dd8099586836c820f (patch)
tree8805e728e1aeceba1c2f2cd9e28f7173e1828242 /media/libstagefright/yuv
parent4a6b74563ac0fe752fbdfd15f91772473f8a4711 (diff)
downloadframeworks_av-c0d936ddacc4f7d883f3bd1dd8099586836c820f.zip
frameworks_av-c0d936ddacc4f7d883f3bd1dd8099586836c820f.tar.gz
frameworks_av-c0d936ddacc4f7d883f3bd1dd8099586836c820f.tar.bz2
Added downsample()
Added a downsample function which downsamples the source image starting at an offset and skipping every few pixels. Currently no low pass filtering is done, but it should be added later. Change-Id: Iec34092c536bfc661a15521e6a1ef2ef3f815c61
Diffstat (limited to 'media/libstagefright/yuv')
-rw-r--r--media/libstagefright/yuv/YUVCanvas.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/media/libstagefright/yuv/YUVCanvas.cpp b/media/libstagefright/yuv/YUVCanvas.cpp
index 7ef652d..38aa779 100644
--- a/media/libstagefright/yuv/YUVCanvas.cpp
+++ b/media/libstagefright/yuv/YUVCanvas.cpp
@@ -17,6 +17,7 @@
#define LOG_NDEBUG 0
#define LOG_TAG "YUVCanvas"
+#include <media/stagefright/MediaDebug.h>
#include <media/stagefright/YUVCanvas.h>
#include <media/stagefright/YUVImage.h>
#include <ui/Rect.h>
@@ -74,10 +75,37 @@ void YUVCanvas::CopyImageRect(
uint8_t uValue;
uint8_t vValue;
- srcImage.getPixelValue(srcX, srcY, &yValue, &uValue, & vValue);
+ srcImage.getPixelValue(srcX, srcY, &yValue, &uValue, &vValue);
mYUVImage.setPixelValue(destX, destY, yValue, uValue, vValue);
}
}
}
+void YUVCanvas::downsample(
+ int32_t srcOffsetX, int32_t srcOffsetY,
+ int32_t skipX, int32_t skipY,
+ const YUVImage &srcImage) {
+ // TODO: Add a low pass filter for downsampling.
+
+ // Check that srcImage is big enough to fill mYUVImage.
+ CHECK((srcOffsetX + (mYUVImage.width() - 1) * skipX) < srcImage.width());
+ CHECK((srcOffsetY + (mYUVImage.height() - 1) * skipY) < srcImage.height());
+
+ uint8_t yValue;
+ uint8_t uValue;
+ uint8_t vValue;
+
+ int32_t srcY = srcOffsetY;
+ for (int32_t y = 0; y < mYUVImage.height(); ++y) {
+ int32_t srcX = srcOffsetX;
+ for (int32_t x = 0; x < mYUVImage.width(); ++x) {
+ srcImage.getPixelValue(srcX, srcY, &yValue, &uValue, &vValue);
+ mYUVImage.setPixelValue(x, y, yValue, uValue, vValue);
+
+ srcX += skipX;
+ }
+ srcY += skipY;
+ }
+}
+
} // namespace android