From c0d936ddacc4f7d883f3bd1dd8099586836c820f Mon Sep 17 00:00:00 2001 From: Nipun Kwatra Date: Thu, 19 Aug 2010 17:45:45 -0700 Subject: 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 --- media/libstagefright/yuv/YUVCanvas.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'media/libstagefright/yuv') 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 #include #include #include @@ -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 -- cgit v1.1