73 |
Bitstream * bs, |
Bitstream * bs, |
74 |
uint32_t * pBits, |
uint32_t * pBits, |
75 |
bool force_inter, |
bool force_inter, |
76 |
bool vol_header); |
bool vol_header, |
77 |
|
int interpolate); |
78 |
|
|
79 |
static void FrameCodeB(Encoder * pEnc, |
static void FrameCodeB(Encoder * pEnc, |
80 |
FRAMEINFO * frame, |
FRAMEINFO * frame, |
81 |
Bitstream * bs, |
Bitstream * bs, |
82 |
uint32_t * pBits); |
uint32_t * pBits, |
83 |
|
int interpolate_forward, |
84 |
|
int interpolate_backward); |
85 |
|
|
86 |
/***************************************************************************** |
/***************************************************************************** |
87 |
* Local data |
* Local data |
680 |
|
|
681 |
int input_valid = 1; |
int input_valid = 1; |
682 |
int bframes_count = 0; |
int bframes_count = 0; |
683 |
|
int interpolate_forward = 1; |
684 |
|
int interpolate_backward = 1; |
685 |
|
|
686 |
ENC_CHECK(pEnc); |
ENC_CHECK(pEnc); |
687 |
ENC_CHECK(pFrame); |
ENC_CHECK(pFrame); |
716 |
|
|
717 |
SWAP(FRAMEINFO *, pEnc->current, pEnc->bframes[pEnc->bframenum_tail]); |
SWAP(FRAMEINFO *, pEnc->current, pEnc->bframes[pEnc->bframenum_tail]); |
718 |
|
|
719 |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
if (pEnc->mbParam.m_quarterpel) |
720 |
|
pEnc->current->global_flags |= XVID_QUARTERPEL; |
721 |
|
else |
722 |
|
pEnc->current->global_flags &= ~XVID_QUARTERPEL; |
723 |
|
|
724 |
|
FrameCodeP(pEnc, &bs, &bits, 1, 0, interpolate_backward); |
725 |
bframes_count = 0; |
bframes_count = 0; |
726 |
|
interpolate_forward = 0; |
727 |
|
interpolate_backward = 1; |
728 |
|
|
729 |
BitstreamPadAlways(&bs); |
BitstreamPadAlways(&bs); |
730 |
pFrame->length = BitstreamLength(&bs); |
pFrame->length = BitstreamLength(&bs); |
739 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
740 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
741 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
742 |
|
pResult->iblks = pEnc->current->sStat.iblks; |
743 |
|
pResult->qblks = pEnc->current->sStat.qblks; |
744 |
} |
} |
745 |
|
|
746 |
return XVID_ERR_OK; |
return XVID_ERR_OK; |
751 |
pEnc->bframenum_head, pEnc->bframenum_tail, |
pEnc->bframenum_head, pEnc->bframenum_tail, |
752 |
pEnc->queue_head, pEnc->queue_tail, pEnc->queue_size); |
pEnc->queue_head, pEnc->queue_tail, pEnc->queue_size); |
753 |
|
|
754 |
FrameCodeB(pEnc, pEnc->bframes[pEnc->bframenum_head], &bs, &bits); |
if (pEnc->mbParam.m_quarterpel) |
755 |
|
pEnc->current->global_flags |= XVID_QUARTERPEL; |
756 |
|
else |
757 |
|
pEnc->current->global_flags &= ~XVID_QUARTERPEL; |
758 |
|
|
759 |
|
FrameCodeB(pEnc, pEnc->bframes[pEnc->bframenum_head], &bs, |
760 |
|
&bits, interpolate_forward, interpolate_backward); |
761 |
pEnc->bframenum_head++; |
pEnc->bframenum_head++; |
762 |
|
|
763 |
|
interpolate_forward = 0; |
764 |
|
interpolate_backward = 0; |
765 |
|
|
766 |
BitstreamPadAlways(&bs); |
BitstreamPadAlways(&bs); |
767 |
pFrame->length = BitstreamLength(&bs); |
pFrame->length = BitstreamLength(&bs); |
768 |
pFrame->intra = 2; |
pFrame->intra = 2; |
773 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
774 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
775 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
776 |
|
pResult->iblks = pEnc->current->sStat.iblks; |
777 |
|
pResult->qblks = pEnc->current->sStat.qblks; |
778 |
} |
} |
779 |
|
|
780 |
emms(); |
emms(); |
824 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
825 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
826 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
827 |
|
pResult->iblks = pEnc->current->sStat.iblks; |
828 |
|
pResult->qblks = pEnc->current->sStat.qblks; |
829 |
} |
} |
830 |
|
|
831 |
emms(); |
emms(); |
937 |
pResult->kblks = 0; |
pResult->kblks = 0; |
938 |
pResult->mblks = 0; |
pResult->mblks = 0; |
939 |
pResult->ublks = 0; |
pResult->ublks = 0; |
940 |
|
pResult->iblks = 0; |
941 |
|
pResult->qblks = 0; |
942 |
} |
} |
943 |
} else { |
} else { |
944 |
|
|
948 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
949 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
950 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
951 |
|
pResult->iblks = pEnc->current->sStat.iblks; |
952 |
|
pResult->qblks = pEnc->current->sStat.qblks; |
953 |
} |
} |
954 |
|
|
955 |
} |
} |
1088 |
if ((pEnc->mbParam.global & XVID_GLOBAL_DEBUG)) { |
if ((pEnc->mbParam.global & XVID_GLOBAL_DEBUG)) { |
1089 |
image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 100, "DX50 BVOP->PVOP"); |
image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 100, "DX50 BVOP->PVOP"); |
1090 |
} |
} |
1091 |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
|
1092 |
|
if (pEnc->mbParam.m_quarterpel) |
1093 |
|
pEnc->current->global_flags |= XVID_QUARTERPEL; |
1094 |
|
else |
1095 |
|
pEnc->current->global_flags &= ~XVID_QUARTERPEL; |
1096 |
|
|
1097 |
|
FrameCodeP(pEnc, &bs, &bits, 1, 0, interpolate_backward); |
1098 |
bframes_count = 0; |
bframes_count = 0; |
1099 |
pFrame->intra = 0; |
pFrame->intra = 0; |
1100 |
|
interpolate_forward = 0; |
1101 |
|
interpolate_backward = 1; |
1102 |
|
|
1103 |
} else { |
} else { |
1104 |
|
|
1105 |
|
if (pEnc->mbParam.m_quarterpel) |
1106 |
|
pEnc->current->global_flags |= XVID_QUARTERPEL; |
1107 |
|
else |
1108 |
|
pEnc->current->global_flags &= ~XVID_QUARTERPEL; |
1109 |
|
|
1110 |
FrameCodeI(pEnc, &bs, &bits); |
FrameCodeI(pEnc, &bs, &bits); |
1111 |
bframes_count = 0; |
bframes_count = 0; |
1112 |
|
interpolate_forward = 1; |
1113 |
|
interpolate_backward = 1; |
1114 |
pFrame->intra = 1; |
pFrame->intra = 1; |
1115 |
|
|
1116 |
pEnc->bframenum_dx50bvop = -1; |
pEnc->bframenum_dx50bvop = -1; |
1141 |
image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 200, "PVOP"); |
image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 200, "PVOP"); |
1142 |
} |
} |
1143 |
|
|
1144 |
FrameCodeP(pEnc, &bs, &bits, 1, 0); |
if (pEnc->mbParam.m_quarterpel) |
1145 |
|
pEnc->current->global_flags |= XVID_QUARTERPEL; |
1146 |
|
else |
1147 |
|
pEnc->current->global_flags &= ~XVID_QUARTERPEL; |
1148 |
|
|
1149 |
|
FrameCodeP(pEnc, &bs, &bits, 1, 0, interpolate_backward); |
1150 |
bframes_count = 0; |
bframes_count = 0; |
1151 |
pFrame->intra = 0; |
pFrame->intra = 0; |
1152 |
|
interpolate_forward = 0; |
1153 |
|
interpolate_backward = 1; |
1154 |
pEnc->flush_bframes = 1; |
pEnc->flush_bframes = 1; |
1155 |
|
|
1156 |
if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) { |
if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) { |
1208 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
1209 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
1210 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
1211 |
|
pResult->iblks = pEnc->current->sStat.iblks; |
1212 |
|
pResult->qblks = pEnc->current->sStat.qblks; |
1213 |
|
|
1214 |
if (pFrame->general & XVID_EXTRASTATS) |
if (pFrame->general & XVID_EXTRASTATS) |
1215 |
{ pResult->sse_y = |
{ pResult->sse_y = |
1263 |
Bitstream bs; |
Bitstream bs; |
1264 |
uint32_t bits; |
uint32_t bits; |
1265 |
uint16_t write_vol_header = 0; |
uint16_t write_vol_header = 0; |
1266 |
|
unsigned int old_qpel; |
1267 |
|
|
1268 |
float psnr; |
float psnr; |
1269 |
char temp[128]; |
char temp[128]; |
1317 |
pEnc->current->quant = pFrame->quant; |
pEnc->current->quant = pFrame->quant; |
1318 |
} |
} |
1319 |
|
|
1320 |
|
old_qpel = pEnc->mbParam.m_quarterpel; |
1321 |
|
|
1322 |
if ((pEnc->current->global_flags & XVID_QUARTERPEL)) |
if ((pEnc->current->global_flags & XVID_QUARTERPEL)) |
1323 |
pEnc->mbParam.m_quarterpel = 1; |
pEnc->mbParam.m_quarterpel = 1; |
1324 |
else |
else |
1389 |
&& (pEnc->iFrameNum >= pEnc->mbParam.iMaxKeyInterval))) { |
&& (pEnc->iFrameNum >= pEnc->mbParam.iMaxKeyInterval))) { |
1390 |
pFrame->intra = FrameCodeI(pEnc, &bs, &bits); |
pFrame->intra = FrameCodeI(pEnc, &bs, &bits); |
1391 |
} else { |
} else { |
1392 |
pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 0, write_vol_header); |
if (old_qpel != pEnc->mbParam.m_quarterpel) |
1393 |
|
pEnc->mbParam.m_quarterpel = old_qpel; |
1394 |
|
pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 0, write_vol_header, 1); |
1395 |
} |
} |
1396 |
} else { |
} else { |
1397 |
if (pFrame->intra == 1) { |
if (pFrame->intra == 1) { |
1398 |
pFrame->intra = FrameCodeI(pEnc, &bs, &bits); |
pFrame->intra = FrameCodeI(pEnc, &bs, &bits); |
1399 |
} else { |
} else { |
1400 |
pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 1, write_vol_header); |
if (old_qpel != pEnc->mbParam.m_quarterpel) |
1401 |
|
pEnc->mbParam.m_quarterpel = old_qpel; |
1402 |
|
pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 1, write_vol_header, 1); |
1403 |
} |
} |
1404 |
|
|
1405 |
} |
} |
1418 |
pResult->kblks = pEnc->current->sStat.kblks; |
pResult->kblks = pEnc->current->sStat.kblks; |
1419 |
pResult->mblks = pEnc->current->sStat.mblks; |
pResult->mblks = pEnc->current->sStat.mblks; |
1420 |
pResult->ublks = pEnc->current->sStat.ublks; |
pResult->ublks = pEnc->current->sStat.ublks; |
1421 |
|
pResult->iblks = pEnc->current->sStat.iblks; |
1422 |
|
pResult->qblks = pEnc->current->sStat.qblks; |
1423 |
} |
} |
1424 |
|
|
1425 |
emms(); |
emms(); |
1710 |
pEnc->current->sStat.iTextBits = 0; |
pEnc->current->sStat.iTextBits = 0; |
1711 |
pEnc->current->sStat.kblks = mb_width * mb_height; |
pEnc->current->sStat.kblks = mb_width * mb_height; |
1712 |
pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0; |
pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0; |
1713 |
|
pEnc->current->sStat.iblks = pEnc->current->sStat.qblks = 0; |
1714 |
|
|
1715 |
for (y = 0; y < mb_height; y++) |
for (y = 0; y < mb_height; y++) |
1716 |
for (x = 0; x < mb_width; x++) { |
for (x = 0; x < mb_width; x++) { |
1766 |
Bitstream * bs, |
Bitstream * bs, |
1767 |
uint32_t * pBits, |
uint32_t * pBits, |
1768 |
bool force_inter, |
bool force_inter, |
1769 |
bool vol_header) |
bool vol_header, |
1770 |
|
int interpolate) |
1771 |
{ |
{ |
1772 |
float fSigma; |
float fSigma; |
1773 |
|
|
1781 |
int x, y, k; |
int x, y, k; |
1782 |
int iSearchRange; |
int iSearchRange; |
1783 |
int bIntra, skip_possible; |
int bIntra, skip_possible; |
1784 |
|
IMAGE *refh, *refv, *refhv; |
1785 |
|
|
1786 |
/* IMAGE *pCurrent = &pEnc->current->image; */ |
/* IMAGE *pCurrent = &pEnc->current->image; */ |
1787 |
IMAGE *pRef = &pEnc->reference->image; |
IMAGE *pRef = &pEnc->reference->image; |
1792 |
mb_height = (pEnc->mbParam.height + 31) / 32; |
mb_height = (pEnc->mbParam.height + 31) / 32; |
1793 |
} |
} |
1794 |
|
|
|
start_timer(); |
|
|
image_setedges(pRef, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, |
|
|
pEnc->mbParam.width, pEnc->mbParam.height); |
|
|
stop_edges_timer(); |
|
|
|
|
1795 |
pEnc->mbParam.m_rounding_type = 1 - pEnc->mbParam.m_rounding_type; |
pEnc->mbParam.m_rounding_type = 1 - pEnc->mbParam.m_rounding_type; |
1796 |
pEnc->current->rounding_type = pEnc->mbParam.m_rounding_type; |
pEnc->current->rounding_type = pEnc->mbParam.m_rounding_type; |
1797 |
pEnc->current->quarterpel = pEnc->mbParam.m_quarterpel; |
pEnc->current->quarterpel = pEnc->mbParam.m_quarterpel; |
1802 |
else |
else |
1803 |
iLimit = mb_width * mb_height + 1; |
iLimit = mb_width * mb_height + 1; |
1804 |
|
|
1805 |
|
if((interpolate) || (pEnc->current->rounding_type != 0)) { |
1806 |
|
start_timer(); |
1807 |
|
image_setedges(pRef, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, |
1808 |
|
pEnc->mbParam.width, pEnc->mbParam.height); |
1809 |
|
stop_edges_timer(); |
1810 |
|
|
1811 |
if ((pEnc->current->global_flags & XVID_HALFPEL)) { |
if ((pEnc->current->global_flags & XVID_HALFPEL)) { |
1812 |
start_timer(); |
start_timer(); |
1813 |
image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV, |
image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV, |
1818 |
stop_inter_timer(); |
stop_inter_timer(); |
1819 |
} |
} |
1820 |
|
|
1821 |
|
refh = &pEnc->vInterH; |
1822 |
|
refv = &pEnc->vInterV; |
1823 |
|
refhv = &pEnc->vInterHV; |
1824 |
|
} |
1825 |
|
else { |
1826 |
|
refh = &pEnc->f_refh; |
1827 |
|
refv = &pEnc->f_refv; |
1828 |
|
refhv = &pEnc->f_refhv; |
1829 |
|
} |
1830 |
|
|
1831 |
pEnc->current->coding_type = P_VOP; |
pEnc->current->coding_type = P_VOP; |
1832 |
|
|
1833 |
start_timer(); |
start_timer(); |
1836 |
else |
else |
1837 |
bIntra = |
bIntra = |
1838 |
MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference, |
MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference, |
1839 |
&pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, |
refh, refv, refhv, |
1840 |
iLimit); |
iLimit); |
1841 |
|
|
1842 |
stop_motion_timer(); |
stop_motion_timer(); |
1872 |
|
|
1873 |
pEnc->current->sStat.iTextBits = pEnc->current->sStat.iMvSum = pEnc->current->sStat.iMvCount = |
pEnc->current->sStat.iTextBits = pEnc->current->sStat.iMvSum = pEnc->current->sStat.iMvCount = |
1874 |
pEnc->current->sStat.kblks = pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0; |
pEnc->current->sStat.kblks = pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0; |
1875 |
|
pEnc->current->sStat.iblks = pEnc->current->sStat.qblks = 0; |
1876 |
|
|
1877 |
|
|
1878 |
for (y = 0; y < mb_height; y++) { |
for (y = 0; y < mb_height; y++) { |
1934 |
|
|
1935 |
start_timer(); |
start_timer(); |
1936 |
MBMotionCompensation(pMB, x, y, &pEnc->reference->image, |
MBMotionCompensation(pMB, x, y, &pEnc->reference->image, |
1937 |
&pEnc->vInterH, &pEnc->vInterV, |
refh, refv, |
1938 |
&pEnc->vInterHV, &pEnc->vGMC, |
refhv, &pEnc->vGMC, |
1939 |
&pEnc->current->image, |
&pEnc->current->image, |
1940 |
dct_codes, pEnc->mbParam.width, |
dct_codes, pEnc->mbParam.width, |
1941 |
pEnc->mbParam.height, |
pEnc->mbParam.height, |
1974 |
pEnc->current->sStat.ublks++; |
pEnc->current->sStat.ublks++; |
1975 |
} |
} |
1976 |
|
|
1977 |
|
if(pEnc->mbParam.m_quarterpel) { |
1978 |
|
for (k = 0; k < ((pMB->mode == MODE_INTER4V) ? 4 : 1); k++) { |
1979 |
|
if (((pMB->qmvs[k].x % 4) != 0) || ((pMB->qmvs[k].y % 4) != 0)) |
1980 |
|
pEnc->current->sStat.iblks++; |
1981 |
|
|
1982 |
|
if (((pMB->qmvs[k].x % 4) & 1) || ((pMB->qmvs[k].y % 4) & 1)) |
1983 |
|
pEnc->current->sStat.qblks++; |
1984 |
|
} |
1985 |
|
} |
1986 |
|
|
1987 |
start_timer(); |
start_timer(); |
1988 |
|
|
1989 |
/* Finished processing the MB, now check if to CODE or SKIP */ |
/* Finished processing the MB, now check if to CODE or SKIP */ |
2178 |
FrameCodeB(Encoder * pEnc, |
FrameCodeB(Encoder * pEnc, |
2179 |
FRAMEINFO * frame, |
FRAMEINFO * frame, |
2180 |
Bitstream * bs, |
Bitstream * bs, |
2181 |
uint32_t * pBits) |
uint32_t * pBits, |
2182 |
|
int interpolate_forward, |
2183 |
|
int interpolate_backward) |
2184 |
{ |
{ |
2185 |
DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE); |
DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE); |
2186 |
DECLARE_ALIGNED_MATRIX(qcoeff, 6, 64, int16_t, CACHE_LINE); |
DECLARE_ALIGNED_MATRIX(qcoeff, 6, 64, int16_t, CACHE_LINE); |
2205 |
|
|
2206 |
frame->quarterpel = pEnc->mbParam.m_quarterpel; |
frame->quarterpel = pEnc->mbParam.m_quarterpel; |
2207 |
|
|
2208 |
|
if ((interpolate_forward) || ((pEnc->mbParam.m_rounding_type != 1) && interpolate_backward)) { |
2209 |
|
|
2210 |
/* forward */ |
/* forward */ |
2211 |
image_setedges(f_ref, pEnc->mbParam.edged_width, |
image_setedges(f_ref, pEnc->mbParam.edged_width, |
2212 |
pEnc->mbParam.edged_height, pEnc->mbParam.width, |
pEnc->mbParam.edged_height, pEnc->mbParam.width, |
2213 |
pEnc->mbParam.height); |
pEnc->mbParam.height); |
2214 |
start_timer(); |
start_timer(); |
2215 |
image_interpolate(f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv, |
image_interpolate(f_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, |
2216 |
pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, |
pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, |
2217 |
pEnc->mbParam.m_quarterpel, 0); |
pEnc->mbParam.m_quarterpel, 0); |
2218 |
stop_inter_timer(); |
stop_inter_timer(); |
2219 |
|
} |
2220 |
|
|
2221 |
|
if (interpolate_backward) { |
2222 |
|
|
2223 |
/* backward */ |
/* backward */ |
2224 |
image_setedges(b_ref, pEnc->mbParam.edged_width, |
image_setedges(b_ref, pEnc->mbParam.edged_width, |
2225 |
pEnc->mbParam.edged_height, pEnc->mbParam.width, |
pEnc->mbParam.edged_height, pEnc->mbParam.width, |
2226 |
pEnc->mbParam.height); |
pEnc->mbParam.height); |
2227 |
start_timer(); |
start_timer(); |
2228 |
image_interpolate(b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV, |
image_interpolate(b_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv, |
2229 |
pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, |
pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, |
2230 |
pEnc->mbParam.m_quarterpel, 0); |
pEnc->mbParam.m_quarterpel, 0); |
2231 |
stop_inter_timer(); |
stop_inter_timer(); |
2232 |
|
} |
2233 |
|
|
2234 |
start_timer(); |
start_timer(); |
2235 |
|
|
2236 |
MotionEstimationBVOP(&pEnc->mbParam, frame, |
MotionEstimationBVOP(&pEnc->mbParam, frame, |
2237 |
((int32_t)(pEnc->current->stamp - frame->stamp)), /* time_bp */ |
((int32_t)(pEnc->current->stamp - frame->stamp)), /* time_bp */ |
2238 |
((int32_t)(pEnc->current->stamp - pEnc->reference->stamp)), /* time_pp */ |
((int32_t)(pEnc->current->stamp - pEnc->reference->stamp)), /* time_pp */ |
2239 |
pEnc->reference->mbs, f_ref, |
pEnc->reference->mbs, f_ref, &pEnc->vInterH, |
2240 |
&pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv, |
&pEnc->vInterV, &pEnc->vInterHV, |
2241 |
pEnc->current, b_ref, &pEnc->vInterH, |
pEnc->current, b_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv); |
|
&pEnc->vInterV, &pEnc->vInterHV); |
|
|
|
|
2242 |
|
|
2243 |
stop_motion_timer(); |
stop_motion_timer(); |
2244 |
/* |
/* |
2258 |
frame->sStat.iMvSum = 0; |
frame->sStat.iMvSum = 0; |
2259 |
frame->sStat.iMvCount = 0; |
frame->sStat.iMvCount = 0; |
2260 |
frame->sStat.kblks = frame->sStat.mblks = frame->sStat.ublks = 0; |
frame->sStat.kblks = frame->sStat.mblks = frame->sStat.ublks = 0; |
2261 |
|
frame->sStat.iblks = frame->sStat.qblks = 0; |
2262 |
|
|
2263 |
|
|
2264 |
for (y = 0; y < pEnc->mbParam.mb_height; y++) { |
for (y = 0; y < pEnc->mbParam.mb_height; y++) { |
2274 |
|
|
2275 |
if (mb->mode != MODE_DIRECT_NONE_MV) { |
if (mb->mode != MODE_DIRECT_NONE_MV) { |
2276 |
MBMotionCompensationBVOP(&pEnc->mbParam, mb, x, y, &frame->image, |
MBMotionCompensationBVOP(&pEnc->mbParam, mb, x, y, &frame->image, |
2277 |
f_ref, &pEnc->f_refh, &pEnc->f_refv, |
f_ref, &pEnc->vInterH, &pEnc->vInterV, |
2278 |
&pEnc->f_refhv, b_ref, &pEnc->vInterH, |
&pEnc->vInterHV, b_ref, &pEnc->f_refh, |
2279 |
&pEnc->vInterV, &pEnc->vInterHV, |
&pEnc->f_refv, &pEnc->f_refhv, |
2280 |
dct_codes); |
dct_codes); |
2281 |
|
|
2282 |
if (mb->mode == MODE_DIRECT_NO4V) mb->mode = MODE_DIRECT; |
if (mb->mode == MODE_DIRECT_NO4V) mb->mode = MODE_DIRECT; |