83 |
|
|
84 |
uint32_t stride = pParam->edged_width; |
uint32_t stride = pParam->edged_width; |
85 |
uint32_t stride2 = stride / 2; |
uint32_t stride2 = stride / 2; |
86 |
uint32_t next_block = stride * ((frame->global_flags & XVID_REDUCED)?16:8); |
uint32_t next_block = stride * ((frame->vop_flags & XVID_REDUCED)?16:8); |
87 |
uint32_t i; |
uint32_t i; |
88 |
uint32_t iQuant = frame->quant; |
uint32_t iQuant = frame->quant; |
89 |
uint8_t *pY_Cur, *pU_Cur, *pV_Cur; |
uint8_t *pY_Cur, *pU_Cur, *pV_Cur; |
90 |
IMAGE *pCurrent = &frame->image; |
IMAGE *pCurrent = &frame->image; |
91 |
|
|
92 |
start_timer(); |
start_timer(); |
93 |
if ((frame->global_flags & XVID_REDUCED)) |
if ((frame->vop_flags & XVID_REDUCED)) |
94 |
{ |
{ |
95 |
pY_Cur = pCurrent->y + (y_pos << 5) * stride + (x_pos << 5); |
pY_Cur = pCurrent->y + (y_pos << 5) * stride + (x_pos << 5); |
96 |
pU_Cur = pCurrent->u + (y_pos << 4) * stride2 + (x_pos << 4); |
pU_Cur = pCurrent->u + (y_pos << 4) * stride2 + (x_pos << 4); |
119 |
/* XXX: rrv+interlacing is buggy */ |
/* XXX: rrv+interlacing is buggy */ |
120 |
start_timer(); |
start_timer(); |
121 |
pMB->field_dct = 0; |
pMB->field_dct = 0; |
122 |
if ((frame->global_flags & XVID_INTERLACING) && |
if ((frame->vol_flags & XVID_INTERLACING) && |
123 |
(x_pos>0) && (x_pos<pParam->mb_width-1) && |
(x_pos>0) && (x_pos<pParam->mb_width-1) && |
124 |
(y_pos>0) && (y_pos<pParam->mb_height-1)) { |
(y_pos>0) && (y_pos<pParam->mb_height-1)) { |
125 |
pMB->field_dct = MBDecideFieldDCT(data); |
pMB->field_dct = MBDecideFieldDCT(data); |
133 |
fdct(&data[i * 64]); |
fdct(&data[i * 64]); |
134 |
stop_dct_timer(); |
stop_dct_timer(); |
135 |
|
|
136 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
137 |
start_timer(); |
start_timer(); |
138 |
quant_intra(&qcoeff[i * 64], &data[i * 64], iQuant, iDcScaler); |
quant_intra(&qcoeff[i * 64], &data[i * 64], iQuant, iDcScaler); |
139 |
stop_quant_timer(); |
stop_quant_timer(); |
146 |
/* speedup: dont decode when encoding only ivops */ |
/* speedup: dont decode when encoding only ivops */ |
147 |
if (pParam->iMaxKeyInterval != 1 || pParam->max_bframes > 0) |
if (pParam->iMaxKeyInterval != 1 || pParam->max_bframes > 0) |
148 |
{ |
{ |
149 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
150 |
start_timer(); |
start_timer(); |
151 |
dequant_intra(&data[i * 64], &qcoeff[i * 64], iQuant, iDcScaler); |
dequant_intra(&data[i * 64], &qcoeff[i * 64], iQuant, iDcScaler); |
152 |
stop_iquant_timer(); |
stop_iquant_timer(); |
172 |
} |
} |
173 |
|
|
174 |
start_timer(); |
start_timer(); |
175 |
if ((frame->global_flags & XVID_REDUCED)) |
if ((frame->vop_flags & XVID_REDUCED)) |
176 |
{ |
{ |
177 |
copy_upsampled_8x8_16to8(pY_Cur, &data[0 * 64], stride); |
copy_upsampled_8x8_16to8(pY_Cur, &data[0 * 64], stride); |
178 |
copy_upsampled_8x8_16to8(pY_Cur + 16, &data[1 * 64], stride); |
copy_upsampled_8x8_16to8(pY_Cur + 16, &data[1 * 64], stride); |
207 |
|
|
208 |
uint32_t stride = pParam->edged_width; |
uint32_t stride = pParam->edged_width; |
209 |
uint32_t stride2 = stride / 2; |
uint32_t stride2 = stride / 2; |
210 |
uint32_t next_block = stride * ((frame->global_flags & XVID_REDUCED)?16:8); |
uint32_t next_block = stride * ((frame->vop_flags & XVID_REDUCED)?16:8); |
211 |
uint32_t i; |
uint32_t i; |
212 |
uint32_t iQuant = frame->quant; |
uint32_t iQuant = frame->quant; |
213 |
uint8_t *pY_Cur, *pU_Cur, *pV_Cur; |
uint8_t *pY_Cur, *pU_Cur, *pV_Cur; |
215 |
uint32_t sum; |
uint32_t sum; |
216 |
IMAGE *pCurrent = &frame->image; |
IMAGE *pCurrent = &frame->image; |
217 |
|
|
218 |
if ((frame->global_flags & XVID_REDUCED)) |
if ((frame->vop_flags & XVID_REDUCED)) |
219 |
{ |
{ |
220 |
pY_Cur = pCurrent->y + (y_pos << 5) * stride + (x_pos << 5); |
pY_Cur = pCurrent->y + (y_pos << 5) * stride + (x_pos << 5); |
221 |
pU_Cur = pCurrent->u + (y_pos << 4) * stride2 + (x_pos << 4); |
pU_Cur = pCurrent->u + (y_pos << 4) * stride2 + (x_pos << 4); |
228 |
|
|
229 |
start_timer(); |
start_timer(); |
230 |
pMB->field_dct = 0; |
pMB->field_dct = 0; |
231 |
if ((frame->global_flags & XVID_INTERLACING) && |
if ((frame->vol_flags & XVID_INTERLACING) && |
232 |
(x_pos>0) && (x_pos<pParam->mb_width-1) && |
(x_pos>0) && (x_pos<pParam->mb_width-1) && |
233 |
(y_pos>0) && (y_pos<pParam->mb_height-1)) { |
(y_pos>0) && (y_pos<pParam->mb_height-1)) { |
234 |
pMB->field_dct = MBDecideFieldDCT(data); |
pMB->field_dct = MBDecideFieldDCT(data); |
246 |
fdct(&data[i * 64]); |
fdct(&data[i * 64]); |
247 |
stop_dct_timer(); |
stop_dct_timer(); |
248 |
|
|
249 |
if (pParam->m_quant_type == 0) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
250 |
start_timer(); |
start_timer(); |
251 |
sum = quant_inter(&qcoeff[i * 64], &data[i * 64], iQuant); |
sum = quant_inter(&qcoeff[i * 64], &data[i * 64], iQuant); |
252 |
stop_quant_timer(); |
stop_quant_timer(); |
259 |
if ((sum >= TOOSMALL_LIMIT + increase_limit) || (qcoeff[i*64] != 0) || |
if ((sum >= TOOSMALL_LIMIT + increase_limit) || (qcoeff[i*64] != 0) || |
260 |
(qcoeff[i*64+1] != 0) || (qcoeff[i*64+8] != 0)) { |
(qcoeff[i*64+1] != 0) || (qcoeff[i*64+8] != 0)) { |
261 |
|
|
262 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
263 |
start_timer(); |
start_timer(); |
264 |
dequant_inter(&data[i * 64], &qcoeff[i * 64], iQuant); |
dequant_inter(&data[i * 64], &qcoeff[i * 64], iQuant); |
265 |
stop_iquant_timer(); |
stop_iquant_timer(); |
283 |
} |
} |
284 |
|
|
285 |
start_timer(); |
start_timer(); |
286 |
if ((frame->global_flags & XVID_REDUCED)) |
if ((frame->vop_flags & XVID_REDUCED)) |
287 |
{ |
{ |
288 |
if (cbp & 32) |
if (cbp & 32) |
289 |
add_upsampled_8x8_16to8(pY_Cur, &data[0 * 64], stride); |
add_upsampled_8x8_16to8(pY_Cur, &data[0 * 64], stride); |
387 |
|
|
388 |
start_timer(); |
start_timer(); |
389 |
pMB->field_dct = 0; |
pMB->field_dct = 0; |
390 |
if ((frame->global_flags & XVID_INTERLACING)) { |
if ((frame->vol_flags & XVID_INTERLACING)) { |
391 |
pMB->field_dct = MBDecideFieldDCT(data); |
pMB->field_dct = MBDecideFieldDCT(data); |
392 |
} |
} |
393 |
stop_interlacing_timer(); |
stop_interlacing_timer(); |
411 |
|
|
412 |
start_timer(); |
start_timer(); |
413 |
pMB->field_dct = 0; |
pMB->field_dct = 0; |
414 |
if ((frame->global_flags & XVID_INTERLACING)) { |
if ((frame->vol_flags & XVID_INTERLACING)) { |
415 |
pMB->field_dct = MBDecideFieldDCT(data); |
pMB->field_dct = MBDecideFieldDCT(data); |
416 |
} |
} |
417 |
stop_interlacing_timer(); |
stop_interlacing_timer(); |
419 |
for (i = 0; i < 6; i++) { |
for (i = 0; i < 6; i++) { |
420 |
uint32_t iDcScaler = get_dc_scaler(iQuant, i < 4); |
uint32_t iDcScaler = get_dc_scaler(iQuant, i < 4); |
421 |
|
|
422 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
423 |
start_timer(); |
start_timer(); |
424 |
quant_intra(&qcoeff[i * 64], &data[i * 64], iQuant, iDcScaler); |
quant_intra(&qcoeff[i * 64], &data[i * 64], iQuant, iDcScaler); |
425 |
stop_quant_timer(); |
stop_quant_timer(); |
451 |
|
|
452 |
start_timer(); |
start_timer(); |
453 |
pMB->field_dct = 0; |
pMB->field_dct = 0; |
454 |
if ((frame->global_flags & XVID_INTERLACING)) { |
if ((frame->vol_flags & XVID_INTERLACING)) { |
455 |
pMB->field_dct = MBDecideFieldDCT(data); |
pMB->field_dct = MBDecideFieldDCT(data); |
456 |
} |
} |
457 |
stop_interlacing_timer(); |
stop_interlacing_timer(); |
459 |
for (i = 0; i < 6; i++) { |
for (i = 0; i < 6; i++) { |
460 |
uint32_t iDcScaler = get_dc_scaler(iQuant, i < 4); |
uint32_t iDcScaler = get_dc_scaler(iQuant, i < 4); |
461 |
|
|
462 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
463 |
start_timer(); |
start_timer(); |
464 |
quant_intra(&qcoeff[i * 64], &data[i * 64], iQuant, iDcScaler); |
quant_intra(&qcoeff[i * 64], &data[i * 64], iQuant, iDcScaler); |
465 |
stop_quant_timer(); |
stop_quant_timer(); |
482 |
for (i = 0; i < 6; i++) { |
for (i = 0; i < 6; i++) { |
483 |
uint32_t iDcScaler = get_dc_scaler(iQuant, i < 4); |
uint32_t iDcScaler = get_dc_scaler(iQuant, i < 4); |
484 |
|
|
485 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
486 |
start_timer(); |
start_timer(); |
487 |
dequant_intra(&data[i * 64], &qcoeff[i * 64], iQuant, iDcScaler); |
dequant_intra(&data[i * 64], &qcoeff[i * 64], iQuant, iDcScaler); |
488 |
stop_iquant_timer(); |
stop_iquant_timer(); |
507 |
|
|
508 |
for (i = 0; i < 6; i++) { |
for (i = 0; i < 6; i++) { |
509 |
|
|
510 |
if (pParam->m_quant_type == 0) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
511 |
start_timer(); |
start_timer(); |
512 |
sum = quant_inter(&qcoeff[i * 64], &data[i * 64], iQuant); |
sum = quant_inter(&qcoeff[i * 64], &data[i * 64], iQuant); |
513 |
stop_quant_timer(); |
stop_quant_timer(); |
536 |
for (i = 0; i < 6; i++) { |
for (i = 0; i < 6; i++) { |
537 |
if (cbp & (1 << (5 - i))) |
if (cbp & (1 << (5 - i))) |
538 |
{ |
{ |
539 |
if (pParam->m_quant_type == H263_QUANT) { |
if (!(pParam->vol_flags & XVID_MPEGQUANT)) { |
540 |
start_timer(); |
start_timer(); |
541 |
dequant_inter(&data[i * 64], &qcoeff[i * 64], iQuant); |
dequant_inter(&data[i * 64], &qcoeff[i * 64], iQuant); |
542 |
stop_iquant_timer(); |
stop_iquant_timer(); |