mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-18 07:15:04 +02:00
looking better all the time! motion compensation is starting to work
Originally committed as revision 1841 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
44ae98ddef
commit
4e80eb21af
@ -2022,7 +2022,7 @@ static void render_fragments(Vp3DecodeContext *s,
|
||||
int motion_x, motion_y;
|
||||
int motion_x_limit, motion_y_limit;
|
||||
int motion_halfpel_index;
|
||||
unsigned char *motion_source;
|
||||
unsigned int motion_source;
|
||||
|
||||
debug_vp3(" vp3: rendering final fragments for %s\n",
|
||||
(plane == 0) ? "Y plane" : (plane == 1) ? "U plane" : "V plane");
|
||||
@ -2059,12 +2059,12 @@ static void render_fragments(Vp3DecodeContext *s,
|
||||
|
||||
/* transform if this block was coded */
|
||||
if (s->all_fragments[i].coding_method != MODE_COPY) {
|
||||
// if (s->all_fragments[i].coding_method == MODE_INTRA) {
|
||||
|
||||
/* sort out the motion vector */
|
||||
motion_x = x + s->all_fragments[i].motion_x;
|
||||
motion_y = y + s->all_fragments[i].motion_y;
|
||||
motion_x = s->all_fragments[i].motion_x;
|
||||
motion_y = s->all_fragments[i].motion_y;
|
||||
motion_halfpel_index = s->all_fragments[i].motion_halfpel_index;
|
||||
/*
|
||||
|
||||
if (motion_x < 0)
|
||||
motion_x = 0;
|
||||
@ -2074,31 +2074,27 @@ static void render_fragments(Vp3DecodeContext *s,
|
||||
motion_x = motion_x_limit;
|
||||
if (motion_y > motion_y_limit)
|
||||
motion_y = motion_y_limit;
|
||||
*/
|
||||
motion_source = s->all_fragments[i].first_pixel;
|
||||
motion_source += motion_x;
|
||||
motion_source += (motion_y * stride);
|
||||
|
||||
/* first, take care of copying a block from either the
|
||||
* previous or the golden frame */
|
||||
if ((s->all_fragments[i].coding_method == MODE_USING_GOLDEN) ||
|
||||
(s->all_fragments[i].coding_method == MODE_GOLDEN_MV)) {
|
||||
|
||||
motion_source = golden_plane;
|
||||
motion_source += motion_x;
|
||||
motion_source += (motion_y * -stride);
|
||||
|
||||
s->dsp.put_pixels_tab[1][motion_halfpel_index](
|
||||
output_plane + s->all_fragments[i].first_pixel,
|
||||
motion_source,
|
||||
golden_plane + motion_source,
|
||||
stride, 8);
|
||||
|
||||
} else
|
||||
if (s->all_fragments[i].coding_method != MODE_INTRA) {
|
||||
|
||||
motion_source = last_plane;
|
||||
motion_source += motion_x;
|
||||
motion_source += (motion_y * -stride);
|
||||
|
||||
s->dsp.put_pixels_tab[1][motion_halfpel_index](
|
||||
output_plane + s->all_fragments[i].first_pixel,
|
||||
motion_source,
|
||||
last_plane + motion_source,
|
||||
stride, 8);
|
||||
}
|
||||
|
||||
@ -2110,7 +2106,6 @@ static void render_fragments(Vp3DecodeContext *s,
|
||||
dequant_block[dequant_index[j]] =
|
||||
s->all_fragments[i].coeffs[j] *
|
||||
dequantizer[j];
|
||||
dequant_block[0] += 1024;
|
||||
|
||||
debug_idct("dequantized block:\n");
|
||||
for (m = 0; m < 8; m++) {
|
||||
@ -2121,17 +2116,18 @@ static void render_fragments(Vp3DecodeContext *s,
|
||||
}
|
||||
debug_idct("\n");
|
||||
|
||||
/* invert DCT and place in final output */
|
||||
/* invert DCT and place (or add) in final output */
|
||||
|
||||
if (s->all_fragments[i].coding_method == MODE_INTRA)
|
||||
if (s->all_fragments[i].coding_method == MODE_INTRA) {
|
||||
dequant_block[0] += 1024;
|
||||
s->dsp.idct_put(
|
||||
output_plane + s->all_fragments[i].first_pixel,
|
||||
stride, dequant_block);
|
||||
else
|
||||
// s->dsp.idct_add(
|
||||
s->dsp.idct_put(
|
||||
} else {
|
||||
s->dsp.idct_add(
|
||||
output_plane + s->all_fragments[i].first_pixel,
|
||||
stride, dequant_block);
|
||||
}
|
||||
|
||||
debug_idct("block after idct_%s():\n",
|
||||
(s->all_fragments[i].coding_method == MODE_INTRA)?
|
||||
|
Loading…
Reference in New Issue
Block a user