# HG changeset patch # User melanson # Date 1007525844 0 # Node ID 09f972eef7a3484375e7a2d9b3468e4423a12c76 # Parent 00ebfe9072e84c7c8f24f869e65edfadc19c1969 fixed Video 1 bug which cut off decoding too soon, resulting in torn frames diff -r 00ebfe9072e8 -r 09f972eef7a3 msvidc.c --- a/msvidc.c Wed Dec 05 04:16:04 2001 +0000 +++ b/msvidc.c Wed Dec 05 04:17:24 2001 +0000 @@ -43,6 +43,7 @@ int bytes_per_pixel) { int block_ptr, pixel_ptr; + int total_blocks; int pixel_x, pixel_y; // pixel width and height iterators int block_x, block_y; // block width and height iterators int blocks_wide, blocks_high; // width and height in 4x4 blocks @@ -59,6 +60,7 @@ skip_blocks = 0; blocks_wide = width / 4; blocks_high = height / 4; + total_blocks = blocks_wide * blocks_high; block_inc = 4 * bytes_per_pixel; row_dec = (width + 4) * bytes_per_pixel; @@ -72,6 +74,7 @@ { block_ptr += block_inc; skip_blocks--; + total_blocks--; continue; } @@ -82,7 +85,7 @@ byte_b = encoded[stream_ptr++]; // check if the decode is finished - if ((byte_a == 0) && (byte_b == 0)) + if ((byte_a == 0) && (byte_b == 0) && (total_blocks == 0)) return; // check if this is a skip code @@ -204,6 +207,7 @@ } block_ptr += block_inc; + total_blocks--; } } } @@ -218,6 +222,7 @@ int bytes_per_pixel) { int block_ptr, pixel_ptr; + int total_blocks; int pixel_x, pixel_y; // pixel width and height iterators int block_x, block_y; // block width and height iterators int blocks_wide, blocks_high; // width and height in 4x4 blocks @@ -234,6 +239,7 @@ skip_blocks = 0; blocks_wide = width / 4; blocks_high = height / 4; + total_blocks = blocks_wide * blocks_high; block_inc = 4 * bytes_per_pixel; row_dec = (width + 4) * bytes_per_pixel; @@ -247,6 +253,7 @@ { block_ptr += block_inc; skip_blocks--; + total_blocks--; continue; } @@ -257,7 +264,7 @@ byte_b = encoded[stream_ptr++]; // check if the decode is finished - if ((byte_a == 0) && (byte_b == 0)) + if ((byte_a == 0) && (byte_b == 0) && (total_blocks == 0)) return; // check if this is a skip code @@ -376,6 +383,7 @@ } block_ptr += block_inc; + total_blocks--; } } }