diff options
Diffstat (limited to 'libavcodec/ulti.c')
-rw-r--r-- | libavcodec/ulti.c | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/libavcodec/ulti.c b/libavcodec/ulti.c index 1b47bddbd4..f0960377b2 100644 --- a/libavcodec/ulti.c +++ b/libavcodec/ulti.c @@ -19,10 +19,10 @@ */ /** - * @file ulti.c + * @file ulti.c * IBM Ultimotion Video Decoder. */ - + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -71,11 +71,11 @@ static uint8_t ulti_lumas[64] = 0x9B, 0x9F, 0xA2, 0xA5, 0xA9, 0xAC, 0xB0, 0xB3, 0xB7, 0xBA, 0xBE, 0xC1, 0xC5, 0xC8, 0xCC, 0xCF, 0xD3, 0xD6, 0xDA, 0xDD, 0xE1, 0xE4, 0xE8, 0xEB}; - + static uint8_t ulti_chromas[16] = { 0x60, 0x67, 0x6D, 0x73, 0x7A, 0x80, 0x86, 0x8D, 0x93, 0x99, 0xA0, 0xA6, 0xAC, 0xB3, 0xB9, 0xC0}; - + /* convert Ultimotion YUV block (sixteen 6-bit Y samples and two 4-bit chroma samples) into standard YUV and put it into frame */ static void ulti_convert_yuv(AVFrame *frame, int x, int y, @@ -83,16 +83,16 @@ static void ulti_convert_yuv(AVFrame *frame, int x, int y, { uint8_t *y_plane, *cr_plane, *cb_plane; int i; - + y_plane = frame->data[0] + x + y * frame->linesize[0]; cr_plane = frame->data[1] + (x / 4) + (y / 4) * frame->linesize[1]; cb_plane = frame->data[2] + (x / 4) + (y / 4) * frame->linesize[2]; - + cr_plane[0] = ulti_chromas[chroma >> 4]; - + cb_plane[0] = ulti_chromas[chroma & 0xF]; - + for(i = 0; i < 16; i++){ y_plane[i & 3] = ulti_lumas[luma[i]]; if((i & 3) == 3) { //next row @@ -113,14 +113,14 @@ static void ulti_pattern(AVFrame *frame, int x, int y, else Luma[i] = Y0; } - + for(mask = 0x80, i = 8; mask; mask >>= 1, i++) { if(f1 & mask) Luma[i] = Y1; else Luma[i] = Y0; } - + ulti_convert_yuv(frame, x, y, Luma, chroma); } @@ -143,62 +143,62 @@ static void ulti_grad(AVFrame *frame, int x, int y, uint8_t *Y, int chroma, int Luma[0] = Y[0]; Luma[1] = Y[1]; Luma[2] = Y[2]; Luma[3] = Y[3]; Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3]; Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3]; - Luma[12] = Y[0]; Luma[13] = Y[1]; Luma[14] = Y[2]; Luma[15] = Y[3]; + Luma[12] = Y[0]; Luma[13] = Y[1]; Luma[14] = Y[2]; Luma[15] = Y[3]; break; case 1: Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3]; Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3]; Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3]; - Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; + Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; break; case 2: Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3]; Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3]; Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2]; - Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; + Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2]; break; case 3: Luma[0] = Y[2]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3]; Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3]; Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2]; - Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[1]; + Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[1]; break; case 4: Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3]; Luma[4] = Y[2]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[2]; Luma[8] = Y[1]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[1]; - Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; + Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; break; case 5: Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[2]; Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[1]; Luma[8] = Y[2]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[0]; - Luma[12] = Y[1]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; + Luma[12] = Y[1]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0]; break; case 6: Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[2]; Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[1]; Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0]; - Luma[12] = Y[1]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; + Luma[12] = Y[1]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; break; case 7: Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[1]; Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[0]; Luma[8] = Y[3]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0]; - Luma[12] = Y[2]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; + Luma[12] = Y[2]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0]; break; default: Luma[0] = Y[0]; Luma[1] = Y[0]; Luma[2] = Y[1]; Luma[3] = Y[1]; Luma[4] = Y[0]; Luma[5] = Y[0]; Luma[6] = Y[1]; Luma[7] = Y[1]; Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[3]; Luma[11] = Y[3]; - Luma[12] = Y[2]; Luma[13] = Y[2]; Luma[14] = Y[3]; Luma[15] = Y[3]; + Luma[12] = Y[2]; Luma[13] = Y[2]; Luma[14] = Y[3]; Luma[15] = Y[3]; break; } - + ulti_convert_yuv(frame, x, y, Luma, chroma); } -static int ulti_decode_frame(AVCodecContext *avctx, +static int ulti_decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size) { @@ -222,12 +222,12 @@ static int ulti_decode_frame(AVCodecContext *avctx, av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } - + while(!done) { int idx; if(blocks >= s->blocks || y >= s->height) break;//all blocks decoded - + idx = *buf++; if((idx & 0xF8) == 0x70) { switch(idx) { @@ -258,7 +258,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, break; default: av_log(avctx, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", idx); - } + } } else { //handle one block int code; int cf; @@ -284,31 +284,31 @@ static int ulti_decode_frame(AVCodecContext *avctx, tx = x + block_coords[i * 2]; ty = y + block_coords[(i * 2) + 1]; switch(code) { - case 1: + case 1: tmp = *buf++; - + angle = angle_by_index[(tmp >> 6) & 0x3]; - + Y[0] = tmp & 0x3F; Y[1] = Y[0]; - + if (angle) { Y[2] = Y[0]+1; if (Y[2] > 0x3F) Y[2] = 0x3F; - Y[3] = Y[2]; + Y[3] = Y[2]; } else { Y[2] = Y[0]; Y[3] = Y[0]; } break; - + case 2: if (modifier) { // unpack four luma samples tmp = (*buf++) << 16; tmp += (*buf++) << 8; tmp += *buf++; - + Y[0] = (tmp >> 18) & 0x3F; Y[1] = (tmp >> 12) & 0x3F; Y[2] = (tmp >> 6) & 0x3F; @@ -317,7 +317,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, } else { // retrieve luma samples from codebook tmp = (*buf++) << 8; tmp += (*buf++); - + angle = (tmp >> 12) & 0xF; tmp &= 0xFFF; tmp <<= 2; @@ -327,11 +327,11 @@ static int ulti_decode_frame(AVCodecContext *avctx, Y[3] = s->ulti_codebook[tmp + 3]; } break; - + case 3: if (modifier) { // all 16 luma samples uint8_t Luma[16]; - + tmp = (*buf++) << 16; tmp += (*buf++) << 8; tmp += *buf++; @@ -339,7 +339,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, Luma[1] = (tmp >> 12) & 0x3F; Luma[2] = (tmp >> 6) & 0x3F; Luma[3] = tmp & 0x3F; - + tmp = (*buf++) << 16; tmp += (*buf++) << 8; tmp += *buf++; @@ -347,7 +347,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, Luma[5] = (tmp >> 12) & 0x3F; Luma[6] = (tmp >> 6) & 0x3F; Luma[7] = tmp & 0x3F; - + tmp = (*buf++) << 16; tmp += (*buf++) << 8; tmp += *buf++; @@ -355,7 +355,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, Luma[9] = (tmp >> 12) & 0x3F; Luma[10] = (tmp >> 6) & 0x3F; Luma[11] = tmp & 0x3F; - + tmp = (*buf++) << 16; tmp += (*buf++) << 8; tmp += *buf++; @@ -363,7 +363,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, Luma[13] = (tmp >> 12) & 0x3F; Luma[14] = (tmp >> 6) & 0x3F; Luma[15] = tmp & 0x3F; - + ulti_convert_yuv(&s->frame, tx, ty, Luma, chroma); } else { tmp = *buf++; @@ -397,7 +397,7 @@ static int ulti_decode_frame(AVCodecContext *avctx, } } } - + *data_size=sizeof(AVFrame); *(AVFrame*)data= s->frame; |