📄 me_epzs.c
字号:
{
epzs_scale[1][j][i] = epzs_scale[0][j][i];
epzs_scale[1][j + 1][i] = epzs_scale[0][j + 1][i];
}
}
}
if (img->MbaffFrameFlag)
{
fs_top = listX[list + 2][0];
fs_bottom = listX[list + 4][0];
if (listXsize[0]> 1)
{
fs_top1 = listX[list + 2][1];
fs_bottom = listX[list + 4][1];
}
}
else
{
if (img->structure != FRAME)
{
if ((img->structure != fs->structure) && (fs->coded_frame))
{
if (img->structure == TOP_FIELD)
{
fs_top = fs_bottom = fs = listX[list][0]->top_field;
fs_top1 = fs_bottom1 = fs1 = listX[list][0]->bottom_field;
}
else
{
fs_top = fs_bottom = fs = listX[list][0]->bottom_field;
fs_top1 = fs_bottom1 = fs1 = listX[list][0]->top_field;
}
}
}
}
if (!active_sps->frame_mbs_only_flag)
{
if (img->MbaffFrameFlag)
{
for (j = 0; j < fs->size_y >> 2; j++)
{
jj = j >> 1;
jdiv = jj + 4 * (j >> 3);
for (i = 0; i < fs->size_x >> 2; i++)
{
if (fs->motion.field_frame[j][i])
{
//! Assign frame buffers for field MBs
//! Check whether we should use top or bottom field mvs.
//! Depending on the assigned poc values.
if (iabs (enc_picture->poc - fs_bottom->poc) > iabs (enc_picture->poc - fs_top->poc))
{
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs->motion.ref_id [LIST_0][jdiv][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs_top1;
loffset = 1;
}
else
{
fsx = fs_top;
loffset = 0;
}
if (fs->motion.ref_id [LIST_0][jdiv][i] != -1)
{
for (iref = 0; iref < imin(img->num_ref_idx_l0_active,listXsize[LIST_0]); iref++)
{
if (enc_picture->ref_pic_num[LIST_0][iref]==fs->motion.ref_id [LIST_0][jdiv][i])
{
tempmv_scale[LIST_0] = epzs_scale[loffset][LIST_0][iref];
tempmv_scale[LIST_1] = epzs_scale[loffset][LIST_1][iref];
break;
}
}
p->frame[LIST_0][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][jj][i][0]), invmv_precision));
p->frame[LIST_0][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][jj][i][1]), invmv_precision));
p->frame[LIST_1][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][jj][i][0]), invmv_precision));
p->frame[LIST_1][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][jj][i][1]), invmv_precision));
}
else
{
p->frame[LIST_0][j][i].mv_x = 0;
p->frame[LIST_0][j][i].mv_y = 0;
p->frame[LIST_1][j][i].mv_x = 0;
p->frame[LIST_1][j][i].mv_y = 0;
}
}
else
{
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs->motion.ref_id [LIST_0][jdiv + 4][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs_bottom1;
loffset = 1;
}
else
{
fsx = fs_bottom;
loffset = 0;
}
if (fs->motion.ref_id [LIST_0][jdiv + 4][i] != -1)
{
for (iref = 0; iref < imin(img->num_ref_idx_l0_active,listXsize[LIST_0]); iref++)
{
if (enc_picture->ref_pic_num[LIST_0][iref]==fs->motion.ref_id [LIST_0][jdiv + 4][i])
{
tempmv_scale[LIST_0] = epzs_scale[loffset][LIST_0][iref];
tempmv_scale[LIST_1] = epzs_scale[loffset][LIST_1][iref];
break;
}
}
p->frame[LIST_0][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][jj][i][0]), invmv_precision));
p->frame[LIST_0][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][jj][i][1]), invmv_precision));
p->frame[LIST_1][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][jj][i][0]), invmv_precision));
p->frame[LIST_1][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][jj][i][1]), invmv_precision));
}
else
{
p->frame[LIST_0][j][i].mv_x = 0;
p->frame[LIST_0][j][i].mv_y = 0;
p->frame[LIST_1][j][i].mv_x = 0;
p->frame[LIST_1][j][i].mv_y = 0;
}
}
}
else
{
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs->motion.ref_id [LIST_0][j][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs1;
loffset = 1;
}
else
{
fsx = fs;
loffset = 0;
}
if (fsx->motion.ref_id [LIST_0][j][i] != -1)
{
for (iref = 0; iref < imin(img->num_ref_idx_l0_active,listXsize[LIST_0]); iref++)
{
if (enc_picture->ref_pic_num[LIST_0][iref]==fsx->motion.ref_id [LIST_0][j][i])
{
tempmv_scale[LIST_0] = epzs_scale[loffset][LIST_0][iref];
tempmv_scale[LIST_1] = epzs_scale[loffset][LIST_1][iref];
break;
}
}
p->frame[LIST_0][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->frame[LIST_0][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
p->frame[LIST_1][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->frame[LIST_1][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
}
else
{
p->frame[LIST_0][j][i].mv_x = 0;
p->frame[LIST_0][j][i].mv_y = 0;
p->frame[LIST_1][j][i].mv_x = 0;
p->frame[LIST_1][j][i].mv_y = 0;
}
}
}
}
}
else
{
for (j = 0; j < fs->size_y >> 2; j++)
{
jj = j >> 1;
jdiv = jj + 4 * (j >> 3);
for (i = 0; i < fs->size_x >> 2; i++)
{
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs->motion.ref_id [LIST_0][j][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs1;
loffset = 1;
}
else
{
fsx = fs;
loffset = 0;
}
if (fsx->motion.ref_id [LIST_0][j][i] != -1)
{
for (iref = 0; iref < imin(img->num_ref_idx_l0_active,listXsize[LIST_0]); iref++)
{
if (enc_picture->ref_pic_num[LIST_0][iref]==fsx->motion.ref_id [LIST_0][j][i])
{
tempmv_scale[LIST_0] = epzs_scale[loffset][LIST_0][iref];
tempmv_scale[LIST_1] = epzs_scale[loffset][LIST_1][iref];
break;
}
}
p->frame[LIST_0][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->frame[LIST_0][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
p->frame[LIST_1][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->frame[LIST_1][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
}
else
{
p->frame[LIST_0][j][i].mv_x = 0;
p->frame[LIST_0][j][i].mv_y = 0;
p->frame[LIST_1][j][i].mv_x = 0;
p->frame[LIST_1][j][i].mv_y = 0;
}
}
}
}
//! Generate field MVs from Frame MVs
if (img->structure || img->MbaffFrameFlag)
{
for (j = 0; j < fs->size_y / 8; j++)
{
for (i = 0; i < fs->size_x / 4; i++)
{
if (!img->MbaffFrameFlag)
{
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs->motion.ref_id [LIST_0][j][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs1;
loffset = 1;
}
else
{
fsx = fs;
loffset = 0;
}
if (fsx->motion.ref_id [LIST_0][j][i] != -1)
{
for (iref = 0; iref < imin(img->num_ref_idx_l0_active,listXsize[LIST_0]); iref++)
{
if (enc_picture->ref_pic_num[LIST_0][iref]==fsx->motion.ref_id [LIST_0][j][i])
{
tempmv_scale[LIST_0] = epzs_scale[loffset][LIST_0][iref];
tempmv_scale[LIST_1] = epzs_scale[loffset][LIST_1][iref];
break;
}
}
p->frame[LIST_0][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->frame[LIST_0][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
p->frame[LIST_1][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->frame[LIST_1][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
}
else
{
p->frame[LIST_0][j][i].mv_x = 0;
p->frame[LIST_0][j][i].mv_y = 0;
p->frame[LIST_1][j][i].mv_x = 0;
p->frame[LIST_1][j][i].mv_y = 0;
}
}
else
{
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs_bottom->motion.ref_id [LIST_0][j][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs_bottom1;
loffset = 1;
}
else
{
fsx = fs_bottom;
loffset = 0;
}
if (fsx->motion.ref_id [LIST_0][j][i] != -1)
{
for (iref = 0; iref < imin(2*img->num_ref_idx_l0_active,listXsize[LIST_0 + 4]); iref++)
{
if (enc_picture->ref_pic_num[LIST_0 + 4][iref]==fsx->motion.ref_id [LIST_0][j][i])
{
tempmv_scale[LIST_0] = epzs_scale[loffset][LIST_0 + 4][iref];
tempmv_scale[LIST_1] = epzs_scale[loffset][LIST_1 + 4][iref];
break;
}
}
p->bot[LIST_0][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->bot[LIST_0][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_0] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
p->bot[LIST_1][j][i].mv_x = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][0]), invmv_precision));
p->bot[LIST_1][j][i].mv_y = iClip3 (-32768, 32767, rshift_rnd_sf((tempmv_scale[LIST_1] * fsx->motion.mv[LIST_0][j][i][1]), invmv_precision));
}
else
{
p->bot[LIST_0][j][i].mv_x = 0;
p->bot[LIST_0][j][i].mv_y = 0;
p->bot[LIST_1][j][i].mv_x = 0;
p->bot[LIST_1][j][i].mv_y = 0;
}
if (!fs->motion.field_frame[2 * j][i])
{
p->bot[LIST_0][j][i].mv_y = (p->bot[LIST_0][j][i].mv_y + 1) >> 1;
p->bot[LIST_1][j][i].mv_y = (p->bot[LIST_1][j][i].mv_y + 1) >> 1;
}
tempmv_scale[LIST_0] = 256;
tempmv_scale[LIST_1] = 0;
if (fs_top->motion.ref_id [LIST_0][j][i] < 0 && listXsize[LIST_0] > 1)
{
fsx = fs_top1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -