#include "iPodDevice.h" #include #include #include #include #include "api.h" #include #include "yail.h" extern PMPDevicePlugin plugin; static void recTransform (RGB565 *destination, RGB565 *source, int width, int height, int row_stride); static __forceinline ARGB32 pixto32bit(RGB565 pix0, int format) { unsigned long pix = pix0; if(format == RGB_565) return (ARGB32)(((pix & 0x001F) << 3) | ((pix & 0x07E0) << 5) | ((pix & 0xF800) << 8) | 0xff000000); else // format == RGB_555. Ignore alpha channel. return (ARGB32)(((pix & 0x001F) << 3) | ((pix & 0x03E0) << 6) | ((pix & 0x7C00) << 9) | 0xff000000); } static __forceinline RGB565 pixto16bit(ARGB32 pix, int format) { // 10987654321098765432109876543210 // ARGB32 is AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB // RGB565 is RRRRRGGGGGGBBBBB // RGB555 is ARRRRRGGGGGBBBBB if(format == RGB_565) return (RGB565)( ((pix >> 8) & 0xF800) | ((pix >> 5) & 0x07E0) | ((pix >> 3) & 0x001F) ); else // format == RGB_555. set A to 1 for now. return (RGB565)( 0x8000 | ((pix >> 9) & 0x7C00) | ((pix >> 6) & 0x03E0) | ((pix >> 3) & 0x001F) ); } Image::Image(const ARGB32 * d, int w, int h) : width(w), height(h) { int size = sizeof(ARGB32)*w*h; data = (ARGB32*)calloc(size,1); memcpy(data,d,size); } #define ALIGN(size, boundary) ((((boundary) - ((size) % (boundary))) % (boundary)) + (size)) Image::Image(const RGB565 * d, int w, int h, int format, int alignRowBytes, int alignImageBytes) : width(w), height(h) { data = (ARGB32*)calloc(w*h*sizeof(ARGB32),1); int rowgap = (ALIGN(sizeof(RGB565) * width, alignRowBytes) / sizeof(RGB565)) - width; int p=0, q=0; for(int j=0; j