|
|
|
@@ -33,6 +33,7 @@ |
|
|
|
#define DITHERSTEPS 8 |
|
|
|
#define CHARSET_CHARS 256 |
|
|
|
#define INTERLACED 1 |
|
|
|
#define CROP_SCREENS 1 |
|
|
|
|
|
|
|
/* gray gradient */ |
|
|
|
static const int mc_colors[5]={0x0,0xb,0xc,0xf,0x1}; |
|
|
|
@@ -245,7 +246,9 @@ static int a64multi_encode_frame(AVCodecContext *avctx, unsigned char *buf, |
|
|
|
AVFrame *const p = (AVFrame *) & c->picture; |
|
|
|
|
|
|
|
int frame; |
|
|
|
int a; |
|
|
|
int x, y; |
|
|
|
int b_height; |
|
|
|
int b_width; |
|
|
|
|
|
|
|
int req_size; |
|
|
|
int num_frames = c->mc_lifetime; |
|
|
|
@@ -257,9 +260,19 @@ static int a64multi_encode_frame(AVCodecContext *avctx, unsigned char *buf, |
|
|
|
int *best_cb = c->mc_best_cb; |
|
|
|
|
|
|
|
int charset_size = 0x800 * (INTERLACED + 1); |
|
|
|
int screen_size = 0x400; |
|
|
|
int screen_size; |
|
|
|
int colram_size = 0x100 * c->mc_use_5col; |
|
|
|
|
|
|
|
if(CROP_SCREENS) { |
|
|
|
b_height = FFMIN(avctx->height,C64YRES) >> 3; |
|
|
|
b_width = FFMIN(avctx->width ,C64XRES) >> 3; |
|
|
|
screen_size = b_width * b_height; |
|
|
|
} else { |
|
|
|
b_height = C64YRES >> 3; |
|
|
|
b_width = C64XRES >> 3; |
|
|
|
screen_size = 0x400; |
|
|
|
} |
|
|
|
|
|
|
|
/* no data, means end encoding asap */ |
|
|
|
if (!data) { |
|
|
|
/* all done, end encoding */ |
|
|
|
@@ -312,8 +325,10 @@ static int a64multi_encode_frame(AVCodecContext *avctx, unsigned char *buf, |
|
|
|
/* write x frames to buf */ |
|
|
|
for (frame = 0; frame < c->mc_lifetime; frame++) { |
|
|
|
/* copy charmap to buf. buf is uchar*, charmap is int*, so no memcpy here, sorry */ |
|
|
|
for (a = 0; a < 1000; a++) { |
|
|
|
buf[a] = charmap[a]; |
|
|
|
for (y = 0; y < b_height; y++) { |
|
|
|
for (x = 0; x < b_width; x++) { |
|
|
|
buf[y * b_width + x] = charmap[y * b_width + x]; |
|
|
|
} |
|
|
|
} |
|
|
|
/* advance pointers */ |
|
|
|
buf += screen_size; |
|
|
|
|