56 |
char *max_run_ptr = max_run[last + (intra << 1)]; |
char *max_run_ptr = max_run[last + (intra << 1)]; |
57 |
|
|
58 |
for(l = 0; l < 64; l++) { // run |
for(l = 0; l < 64; l++) { // run |
59 |
int32_t level = k, run = l; |
int32_t level = k; |
60 |
|
uint32_t run = l; |
61 |
|
|
62 |
if(abs(level) <= max_level_ptr[run] && run <= max_run_ptr[abs(level)]) { |
if(abs(level) <= max_level_ptr[run] && run <= max_run_ptr[abs(level)]) { |
63 |
|
|
101 |
level += max_level_ptr[run]; |
level += max_level_ptr[run]; |
102 |
else |
else |
103 |
level -= max_level_ptr[run]; |
level -= max_level_ptr[run]; |
104 |
DEBUG1("1) run:", run); |
|
105 |
run -= max_run_ptr[abs(level)] + 1; |
run -= max_run_ptr[abs(level)] + 1; |
|
DEBUG1("2) run:", run); |
|
106 |
|
|
107 |
if(abs(level) <= max_level_ptr[run] && |
if(abs(level) <= max_level_ptr[run] && |
108 |
run <= max_run_ptr[abs(level)]) { |
run <= max_run_ptr[abs(level)]) { |
127 |
else |
else |
128 |
run++; |
run++; |
129 |
|
|
|
DEBUG1("3) run:", run); |
|
|
|
|
130 |
vlc[intra]->code = (uint32_t) ((0x1e + last) << 20) | |
vlc[intra]->code = (uint32_t) ((0x1e + last) << 20) | |
131 |
(l << 14) | (1 << 13) | ((k & 0xfff) << 1) | 1; |
(l << 14) | (1 << 13) | ((k & 0xfff) << 1) | 1; |
132 |
|
|
291 |
if(pMB->mode == MODE_INTRA_Q) |
if(pMB->mode == MODE_INTRA_Q) |
292 |
BitstreamPutBits(bs, pMB->dquant, 2); |
BitstreamPutBits(bs, pMB->dquant, 2); |
293 |
|
|
294 |
|
// write interlacing |
295 |
|
if (pParam->global_flags & XVID_INTERLACING) |
296 |
|
{ |
297 |
|
BitstreamPutBit(bs, pMB->field_dct); |
298 |
|
} |
299 |
|
|
300 |
// code block coeffs |
// code block coeffs |
301 |
for(i = 0; i < 6; i++) |
for(i = 0; i < 6; i++) |
302 |
{ |
{ |
339 |
if(pMB->mode == MODE_INTER_Q) |
if(pMB->mode == MODE_INTER_Q) |
340 |
BitstreamPutBits(bs, pMB->dquant, 2); |
BitstreamPutBits(bs, pMB->dquant, 2); |
341 |
|
|
342 |
|
// interlacing |
343 |
|
if (pParam->global_flags & XVID_INTERLACING) |
344 |
|
{ |
345 |
|
BitstreamPutBit(bs, pMB->field_dct); |
346 |
|
DEBUG1("codep: field_dct: ", pMB->field_dct); |
347 |
|
|
348 |
|
// if inter block, write field ME flag |
349 |
|
if (pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q) |
350 |
|
{ |
351 |
|
BitstreamPutBit(bs, pMB->field_pred); |
352 |
|
DEBUG1("codep: field_pred: ", pMB->field_pred); |
353 |
|
|
354 |
|
// write field prediction references |
355 |
|
if (pMB->field_pred) |
356 |
|
{ |
357 |
|
BitstreamPutBit(bs, pMB->field_for_top); |
358 |
|
BitstreamPutBit(bs, pMB->field_for_bot); |
359 |
|
} |
360 |
|
} |
361 |
|
} |
362 |
|
|
363 |
// code motion vector(s) |
// code motion vector(s) |
364 |
for(i = 0; i < (pMB->mode == MODE_INTER4V ? 4 : 1); i++) |
for(i = 0; i < (pMB->mode == MODE_INTER4V ? 4 : 1); i++) |
365 |
{ |
{ |