41 |
* * |
* * |
42 |
* Revision history: * |
* Revision history: * |
43 |
* * |
* * |
44 |
* 28.10.2002 GMC support - gruel * |
* 05.01.2003 GMC support - gruel * |
45 |
* 04.10.2002 qpel support - Isibaar * |
* 04.10.2002 qpel support - Isibaar * |
46 |
* 11.07.2002 add VOP width & height return to dec when dec->width * |
* 11.07.2002 add VOP width & height return to dec when dec->width * |
47 |
* or dec->height is 0 (for use in examples/ex1.c) * |
* or dec->height is 0 (for use in examples/ex1.c) * |
230 |
if (coding_type == B_VOP && fcode_backward) |
if (coding_type == B_VOP && fcode_backward) |
231 |
{ |
{ |
232 |
*fcode_backward = BitstreamGetBits(bs, 3); |
*fcode_backward = BitstreamGetBits(bs, 3); |
233 |
DPRINTF(DPRINTF_HEADER,"fcode_backward %i", fcode_backward); |
DPRINTF(DPRINTF_HEADER,"fcode_backward %i", *fcode_backward); |
234 |
} |
} |
235 |
} |
} |
236 |
|
|
432 |
uint32_t * fcode_forward, |
uint32_t * fcode_forward, |
433 |
uint32_t * fcode_backward, |
uint32_t * fcode_backward, |
434 |
uint32_t * intra_dc_threshold, |
uint32_t * intra_dc_threshold, |
435 |
VECTOR * gmc_mv) |
WARPPOINTS *gmc_warp) |
436 |
{ |
{ |
437 |
uint32_t vol_ver_id; |
uint32_t vol_ver_id; |
438 |
uint32_t coding_type; |
uint32_t coding_type; |
827 |
READ_MARKER(); |
READ_MARKER(); |
828 |
seconds = BitstreamGetBits(bs, 6); |
seconds = BitstreamGetBits(bs, 6); |
829 |
|
|
830 |
DPRINTF(DPRINTF_HEADER, "time %ih%im%is", hours); |
DPRINTF(DPRINTF_HEADER, "time %ih%im%is", hours,minutes,seconds); |
831 |
} |
} |
832 |
BitstreamSkip(bs, 1); // closed_gov |
BitstreamSkip(bs, 1); // closed_gov |
833 |
BitstreamSkip(bs, 1); // broken_link |
BitstreamSkip(bs, 1); // broken_link |
1001 |
} |
} |
1002 |
READ_MARKER(); |
READ_MARKER(); |
1003 |
|
|
1004 |
gmc_mv[i].x = x; |
gmc_warp->duv[i].x = x; |
1005 |
gmc_mv[i].y = y; |
gmc_warp->duv[i].y = y; |
1006 |
|
|
1007 |
DPRINTF(DPRINTF_HEADER,"sprite_warping_point[%i] xy=(%i,%i)", i, x, y); |
DPRINTF(DPRINTF_HEADER,"sprite_warping_point[%i] xy=(%i,%i)", i, x, y); |
1008 |
} |
} |
1322 |
} |
} |
1323 |
|
|
1324 |
if (frame->coding_type == S_VOP) { |
if (frame->coding_type == S_VOP) { |
1325 |
if (1) { // no_of_sprite_warping_points>=1 |
if (1) { // no_of_sprite_warping_points>=1 (we use 2!) |
1326 |
|
int k; |
1327 |
|
for (k=0;k<2;k++) |
1328 |
|
{ |
1329 |
if (pParam->m_quarterpel) |
if (pParam->m_quarterpel) |
1330 |
bs_put_spritetrajectory(bs, frame->GMC_MV.x/2 ); // du[0] |
bs_put_spritetrajectory(bs, frame->warp.duv[k].x/2 ); // du[k] |
1331 |
else |
else |
1332 |
bs_put_spritetrajectory(bs, frame->GMC_MV.x ); // du[0] |
bs_put_spritetrajectory(bs, frame->warp.duv[k].x ); // du[k] |
1333 |
WRITE_MARKER(); |
WRITE_MARKER(); |
1334 |
|
|
1335 |
if (pParam->m_quarterpel) |
if (pParam->m_quarterpel) |
1336 |
bs_put_spritetrajectory(bs, frame->GMC_MV.y/2 ); // dv[0] |
bs_put_spritetrajectory(bs, frame->warp.duv[k].y/2 ); // dv[k] |
1337 |
else |
else |
1338 |
bs_put_spritetrajectory(bs, frame->GMC_MV.y ); // dv[0] |
bs_put_spritetrajectory(bs, frame->warp.duv[k].y ); // dv[k] |
1339 |
WRITE_MARKER(); |
WRITE_MARKER(); |
1340 |
|
|
|
|
|
1341 |
if (pParam->m_quarterpel) |
if (pParam->m_quarterpel) |
1342 |
{ |
{ |
1343 |
DPRINTF(DPRINTF_HEADER,"sprite_warping_point[%i] xy=(%i,%i) *QPEL*", 0, frame->GMC_MV.x/2, frame->GMC_MV.y/2); |
DPRINTF(DPRINTF_HEADER,"sprite_warping_point[%i] xy=(%i,%i) *QPEL*", k, frame->warp.duv[k].x/2, frame->warp.duv[k].y/2); |
1344 |
} |
} |
1345 |
else |
else |
1346 |
{ |
{ |
1347 |
DPRINTF(DPRINTF_HEADER,"sprite_warping_point[%i] xy=(%i,%i)", 0, frame->GMC_MV.x, frame->GMC_MV.y); |
DPRINTF(DPRINTF_HEADER,"sprite_warping_point[%i] xy=(%i,%i)", k, frame->warp.duv[k].x, frame->warp.duv[k].y); |
1348 |
|
} |
1349 |
} |
} |
|
|
|
1350 |
} |
} |
1351 |
/* GMC is halfpel in bitstream, even though GMC_MV was pseudo-qpel (2*halfpel) */ |
/* GMC is halfpel in bitstream, even though GMC_MV was pseudo-qpel (2*halfpel) */ |
1352 |
|
|
|
if (2) { // no_of_sprite_warping_points>=2 (for DivX5 compat) |
|
|
bs_put_spritetrajectory(bs, 0 ); |
|
|
WRITE_MARKER(); |
|
|
bs_put_spritetrajectory(bs, 0 ); |
|
|
WRITE_MARKER(); |
|
|
} |
|
1353 |
// no support for brightness_change! |
// no support for brightness_change! |
1354 |
} |
} |
1355 |
|
|