1713 |
generate_GMCimage(&pEnc->current->gmc_data, &pEnc->reference->image, |
generate_GMCimage(&pEnc->current->gmc_data, &pEnc->reference->image, |
1714 |
pEnc->mbParam.mb_width, pEnc->mbParam.mb_height, |
pEnc->mbParam.mb_width, pEnc->mbParam.mb_height, |
1715 |
pEnc->mbParam.edged_width, pEnc->mbParam.edged_width/2, |
pEnc->mbParam.edged_width, pEnc->mbParam.edged_width/2, |
1716 |
pEnc->mbParam.m_fcode, 0, 0, |
pEnc->mbParam.m_fcode, pEnc->mbParam.m_quarterpel, 0, |
1717 |
pEnc->current->rounding_type, pEnc->current->mbs, &pEnc->vGMC); |
pEnc->current->rounding_type, pEnc->current->mbs, &pEnc->vGMC); |
1718 |
|
|
1719 |
} |
} |
|
|
|
1720 |
if (vol_header) |
if (vol_header) |
1721 |
BitstreamWriteVolHeader(bs, &pEnc->mbParam, pEnc->current); |
BitstreamWriteVolHeader(bs, &pEnc->mbParam, pEnc->current); |
1722 |
|
|
1737 |
/* Mode decision: Check, if the block should be INTRA / INTER or GMC-coded */ |
/* Mode decision: Check, if the block should be INTRA / INTER or GMC-coded */ |
1738 |
/* For a start, leave INTRA decision as is, only choose only between INTER/GMC - gruel, 9.1.2002 */ |
/* For a start, leave INTRA decision as is, only choose only between INTER/GMC - gruel, 9.1.2002 */ |
1739 |
|
|
|
|
|
1740 |
bIntra = (pMB->mode == MODE_INTRA) || (pMB->mode == MODE_INTRA_Q); |
bIntra = (pMB->mode == MODE_INTRA) || (pMB->mode == MODE_INTRA_Q); |
1741 |
|
|
1742 |
if (bIntra) { |
if (bIntra) { |
1751 |
pEnc->current->sStat.kblks++; |
pEnc->current->sStat.kblks++; |
1752 |
|
|
1753 |
MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->current->sStat); |
MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->current->sStat); |
1754 |
|
stop_coding_timer(); |
1755 |
continue; |
continue; |
1756 |
} |
} |
1757 |
|
|
1762 |
pEnc->mbParam.edged_width,65536); |
pEnc->mbParam.edged_width,65536); |
1763 |
|
|
1764 |
if (iSAD <= pMB->sad16) { /* mode decision GMC */ |
if (iSAD <= pMB->sad16) { /* mode decision GMC */ |
1765 |
|
|
1766 |
if (pEnc->mbParam.m_quarterpel) |
if (pEnc->mbParam.m_quarterpel) |
1767 |
pMB->qmvs[0] = pMB->qmvs[1] =pMB->qmvs[2] =pMB->qmvs[3] = pMB->amv; |
pMB->qmvs[0] = pMB->qmvs[1] =pMB->qmvs[2] =pMB->qmvs[3] = pMB->amv; |
1768 |
else |
else |
1774 |
} else { |
} else { |
1775 |
pMB->mcsel = 0; |
pMB->mcsel = 0; |
1776 |
} |
} |
1777 |
} else |
} else { |
|
{ |
|
1778 |
pMB->mcsel = 0; /* just a precaution */ |
pMB->mcsel = 0; /* just a precaution */ |
1779 |
} |
} |
1780 |
|
|
1812 |
dct_codes, qcoeff); |
dct_codes, qcoeff); |
1813 |
} |
} |
1814 |
|
|
|
|
|
1815 |
if (pMB->cbp || pMB->mvs[0].x || pMB->mvs[0].y || |
if (pMB->cbp || pMB->mvs[0].x || pMB->mvs[0].y || |
1816 |
pMB->mvs[1].x || pMB->mvs[1].y || pMB->mvs[2].x || |
pMB->mvs[1].x || pMB->mvs[1].y || pMB->mvs[2].x || |
1817 |
pMB->mvs[2].y || pMB->mvs[3].x || pMB->mvs[3].y) { |
pMB->mvs[2].y || pMB->mvs[3].x || pMB->mvs[3].y) { |
1824 |
|
|
1825 |
/* Finished processing the MB, now check if to CODE or SKIP */ |
/* Finished processing the MB, now check if to CODE or SKIP */ |
1826 |
|
|
1827 |
skip_possible = (pMB->cbp == 0) & (pMB->mode == MODE_INTER) & |
skip_possible = (pMB->cbp == 0) && (pMB->mode == MODE_INTER) && |
1828 |
(pMB->dquant == NO_CHANGE); |
(pMB->dquant == NO_CHANGE); |
1829 |
|
|
1830 |
if (pEnc->current->coding_type == S_VOP) |
if (pEnc->current->coding_type == S_VOP) |
1831 |
skip_possible &= (pMB->mcsel == 1); |
skip_possible &= (pMB->mcsel == 1); |
1832 |
else if (pEnc->current->coding_type == P_VOP) { |
else if (pEnc->current->coding_type == P_VOP) { |
1833 |
if (pEnc->mbParam.m_quarterpel) |
if (pEnc->mbParam.m_quarterpel) |
1834 |
skip_possible &= (pMB->qmvs[0].x == 0) & (pMB->qmvs[0].y == 0); |
skip_possible &= ( (pMB->qmvs[0].x == 0) && (pMB->qmvs[0].y == 0) ); |
1835 |
else |
else |
1836 |
skip_possible &= (pMB->mvs[0].x == 0) & (pMB->mvs[0].y == 0); |
skip_possible &= ( (pMB->mvs[0].x == 0) && (pMB->mvs[0].y == 0) ); |
1837 |
} |
} |
1838 |
|
|
1839 |
if ( (pMB->mode == MODE_NOT_CODED) || (skip_possible)) { |
if ( (pMB->mode == MODE_NOT_CODED) || (skip_possible)) { |
1871 |
pMB->cbp = 0; |
pMB->cbp = 0; |
1872 |
MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->current->sStat); |
MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->current->sStat); |
1873 |
stop_coding_timer(); |
stop_coding_timer(); |
1874 |
|
|
1875 |
continue; /* next MB */ |
continue; /* next MB */ |
1876 |
} |
} |
1877 |
} |
} |
1921 |
|
|
1922 |
} |
} |
1923 |
} |
} |
1924 |
|
|
1925 |
MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->current->sStat); |
MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->current->sStat); |
1926 |
stop_coding_timer(); |
stop_coding_timer(); |
1927 |
|
|
1928 |
} |
} |
1929 |
} |
} |
1930 |
|
|