diff options
author | Nipun Kwatra <nkwatra@google.com> | 2010-08-19 17:45:45 -0700 |
---|---|---|
committer | Nipun Kwatra <nkwatra@google.com> | 2010-08-20 10:54:59 -0700 |
commit | c0d936ddacc4f7d883f3bd1dd8099586836c820f (patch) | |
tree | 8805e728e1aeceba1c2f2cd9e28f7173e1828242 /media/libstagefright/yuv | |
parent | 4a6b74563ac0fe752fbdfd15f91772473f8a4711 (diff) | |
download | frameworks_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.cpp | 30 |
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 |