Commit 3bf5c4a4 authored by michaelni's avatar michaelni

fixing chroma MC

minor cleanup
postprocessing support


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@2128 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent b442dc54
...@@ -288,6 +288,7 @@ typedef struct Vp3DecodeContext { ...@@ -288,6 +288,7 @@ typedef struct Vp3DecodeContext {
int last_coded_c_fragment; int last_coded_c_fragment;
uint8_t edge_emu_buffer[9*2048]; //FIXME dynamic alloc uint8_t edge_emu_buffer[9*2048]; //FIXME dynamic alloc
uint8_t qscale_table[2048]; //FIXME dynamic alloc (width+15)/16
} Vp3DecodeContext; } Vp3DecodeContext;
/************************************************************************ /************************************************************************
...@@ -1187,6 +1188,8 @@ static void init_dequantizer(Vp3DecodeContext *s) ...@@ -1187,6 +1188,8 @@ static void init_dequantizer(Vp3DecodeContext *s)
s->inter_dequant[j] *= SCALER; s->inter_dequant[j] *= SCALER;
} }
memset(s->qscale_table, (FFMAX(s->intra_y_dequant[1], s->intra_c_dequant[1])+8)/16, 512); //FIXME finetune
/* print debug information as requested */ /* print debug information as requested */
debug_dequantizers("intra Y dequantizers:\n"); debug_dequantizers("intra Y dequantizers:\n");
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
...@@ -2403,29 +2406,22 @@ static void render_fragments(Vp3DecodeContext *s, ...@@ -2403,29 +2406,22 @@ static void render_fragments(Vp3DecodeContext *s,
int src_x, src_y; int src_x, src_y;
motion_x = s->all_fragments[i].motion_x; motion_x = s->all_fragments[i].motion_x;
motion_y = s->all_fragments[i].motion_y; motion_y = s->all_fragments[i].motion_y;
if(plane){
motion_x= (motion_x>>1) | (motion_x&1);
motion_y= (motion_y>>1) | (motion_y&1);
}
src_x= (motion_x>>1) + x; src_x= (motion_x>>1) + x;
src_y= (motion_y>>1) + y; src_y= (motion_y>>1) + y;
if ((motion_x == 0xbeef) || (motion_y == 0xbeef)) if ((motion_x == 0xbeef) || (motion_y == 0xbeef))
printf (" help! got beefy vector! (%X, %X)\n", motion_x, motion_y); printf (" help! got beefy vector! (%X, %X)\n", motion_x, motion_y);
if (motion_x >= 0) {
motion_halfpel_index = motion_x & 0x01; motion_halfpel_index = motion_x & 0x01;
motion_source += (motion_x >> 1); motion_source += (motion_x >> 1);
} else {
motion_x = -motion_x;
motion_halfpel_index = motion_x & 0x01;
motion_source -= ((motion_x + 1) >> 1);
}
// motion_y = -motion_y; // motion_y = -motion_y;
if (motion_y >= 0) {
motion_halfpel_index |= (motion_y & 0x01) << 1; motion_halfpel_index |= (motion_y & 0x01) << 1;
motion_source += ((motion_y >> 1) * stride); motion_source += ((motion_y >> 1) * stride);
} else {
motion_y = -motion_y;
motion_halfpel_index |= (motion_y & 0x01) << 1;
motion_source -= (((motion_y + 1) >> 1) * stride);
}
if(src_x<0 || src_y<0 || src_x + 9 >= width || src_y + 9 >= height){ if(src_x<0 || src_y<0 || src_x + 9 >= width || src_y + 9 >= height){
uint8_t *temp= s->edge_emu_buffer; uint8_t *temp= s->edge_emu_buffer;
...@@ -2735,6 +2731,9 @@ static int vp3_decode_frame(AVCodecContext *avctx, ...@@ -2735,6 +2731,9 @@ static int vp3_decode_frame(AVCodecContext *avctx,
} }
} }
s->current_frame.qscale_table= s->qscale_table; //FIXME allocate individual tables per AVFrame
s->current_frame.qstride= 0;
init_frame(s, &gb); init_frame(s, &gb);
#if KEYFRAMES_ONLY #if KEYFRAMES_ONLY
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment