- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I have a crash in the MPEG-4 encoder when i set the
IVOPdist to 64 and the BVOPdist 10. The crash occurs in the following code in the EncodeBVOP function at the red line.
mvLumaForwDirect[0].dx = (Ipp16s)(mTRB * MBcurr->mv[0].dx / mTRD);
mvLumaForwDirect[0].dy = (Ipp16s)(mTRB * MBcurr->mv[0].dy / mTRD);
mvLumaBackDirect[0].dx = (Ipp16s)((mTRB - mTRD) * MBcurr->mv[0].dx / mTRD);
mvLumaBackDirect[0].dy = (Ipp16s)((mTRB - mTRD) * MBcurr->mv[0].dy / mTRD);
if (VOL.quarter_sample)
{
mp4_Copy16x16QP_8u(pYf, mStepLuma, mcPredD, 16, &mvLumaForwDirect[0], 0);
mp4_Copy16x16QP_8u(pYb, mStepLuma, mcTmp, 16, &mvLumaBackDirect[0], 0);
}
else
{
mp4_Copy16x16HP_8u(pYf, mStepLuma, mcPredD, 16, &mvLumaForwDirect[0], 0);
mp4_Copy16x16HP_8u(pYb, mStepLuma, mcTmp, 16, &mvLumaBackDirect[0], 0);
}
Do you have any idea?
Thanks,
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
BVOPsearchWidthForw, BVOPsearchWidthBack, BVOPsearchHeightForw, BVOPsearchHeightBack, PVOPsearchWidth andPVOPsearchHeight valuesis1022 for all.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
there is answer from our experts:
Yes, there seem to be an issue with backward MV limitation in version 5.1,
the issue will be fixed in the next version of IPP,
as a temporary workaround you can add the following methods in mp4_enc_misc.cpp
(and define them in mp4_enc.hpp):
void
ippVideoEncoderMPEG4::LimitMV(IppMotionVector *pMV, Ipp32s x, Ipp32s y){
mp4_Clip(pMV->dx, (Ipp16s)((-16 - x) << 1), (Ipp16s)((VOL.video_object_layer_width - x) << 1));
mp4_Clip(pMV->dy, (Ipp16s)((-16 - y) << 1), (Ipp16s)((VOL.video_object_layer_height - y) << 1));
}
void
ippVideoEncoderMPEG4::LimitMVQ(IppMotionVector *pMV, Ipp32s x, Ipp32s y){
mp4_Clip(pMV->dx, (Ipp16s)((-16 - x) << 2), (Ipp16s)((VOL.video_object_layer_width - x) << 2));
mp4_Clip(pMV->dy, (Ipp16s)((-16 - y) << 2), (Ipp16s)((VOL.video_object_layer_height - y) << 2));
}
void
ippVideoEncoderMPEG4::Limit4MV(IppMotionVector *pMV, Ipp32s x, Ipp32s y){
mp4_Clip(pMV[0].dx, (Ipp16s)((-8 - x) << 1), (Ipp16s)((VOL.video_object_layer_width - x) << 1));
mp4_Clip(pMV[0].dy, (Ipp16s)((-8 - y) << 1), (Ipp16s)((VOL.video_object_layer_height - y) << 1));
mp4_Clip(pMV[1].dx, (Ipp16s)((-8 - x) << 1), (Ipp16s)((VOL.video_object_layer_width - x - 8) << 1));
mp4_Clip(pMV[1].dy, (Ipp16s)((-8 - y) << 1), (Ipp16s)((VOL.video_object_layer_height - y) << 1));
mp4_Clip(pMV[2].dx, (Ipp16s)((-8 - x) << 1), (Ipp16s)((VOL.video_object_layer_width - x) << 1));
mp4_Clip(pMV[2].dy, (Ipp16s)((-8 - y) << 1), (Ipp16s)((VOL.video_object_layer_height - y - 8) << 1));
mp4_Clip(pMV[3].dx, (Ipp16s)((-8 - x) << 1), (Ipp16s)((VOL.video_object_layer_width - x - 8) << 1));
mp4_Clip(pMV[3].dy, (Ipp16s)((-8 - y) << 1), (Ipp16s)((VOL.video_object_layer_height - y - 8) << 1));
}
void
ippVideoEncoderMPEG4::Limit4MVQ(IppMotionVector *pMV, Ipp32s x, Ipp32s y){
mp4_Clip(pMV[0].dx, (Ipp16s)((-8 - x) << 2), (Ipp16s)((VOL.video_object_layer_width - x) << 2));
mp4_Clip(pMV[0].dy, (Ipp16s)((-8 - y) << 2), (Ipp16s)((VOL.video_object_layer_height - y) << 2));
mp4_Clip(pMV[1].dx, (Ipp16s)((-8 - x) << 2), (Ipp16s)((VOL.video_object_layer_width - x - 8) << 2));
mp4_Clip(pMV[1].dy, (Ipp16s)((-8 - y) << 2), (Ipp16s)((VOL.video_object_layer_height - y) << 2));
mp4_Clip(pMV[2].dx, (Ipp16s)((-8 - x) << 2), (Ipp16s)((VOL.video_object_layer_width - x) << 2));
mp4_Clip(pMV[2].dy, (Ipp16s)((-8 - y) << 2), (Ipp16s)((VOL.video_object_layer_height - y - 8) << 2));
mp4_Clip(pMV[3].dx, (Ipp16s)((-8 - x) << 2), (Ipp16s)((VOL.video_object_layer_width - x - 8) << 2));
mp4_Clip(pMV[3].dy, (Ipp16s)((-8 - y) << 2), (Ipp16s)((VOL.video_object_layer_height - y - 8) << 2 ));
}
Then, in mp4_enc_vop.cpp, insert
LimitMV(mvLumaBackDirect, j << 4, i << 4);
in line 3526LimitMVQ(mvLumaBackDirect, j << 4, i << 4);
line 3523Limit4MV(mvLumaBackDirect, j << 4, i << 4);
line 3507Limit4MV
Q(mvLumaBackDirect, j << 4, i << 4); line 3498and
LimitMV(mvLumaBackDirect, j << 4,
curRow << 4); in line 3135LimitMVQ(mvLumaBackDirect, j << 4,
curRow << 4); line 3132Limit4MV(mvLumaBackDirect, j << 4,
curRow << 4); line 3116Limit4MV
Q(mvLumaBackDirect, j << 4, curRow << 4); line 3107
Regards,
Vladimir
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page