am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
break;
case VFORMAT_H264_4K2K:
- if (aml_get_cputype() >= 8) {
+ if (aml_get_cputype() >= AML_DEVICE_TYPE_M8) {
am_private->gcodec.format = VIDEO_DEC_FORMAT_H264_4K2K;
am_private->gcodec.param = (void*)EXTERNAL_PTS;
// h264 in an avi file
pDvdVideoPicture->iDuration = (double)(am_private->video_rate * DVD_TIME_BASE) / UNIT_FREQ;
pDvdVideoPicture->dts = DVD_NOPTS_VALUE;
- pDvdVideoPicture->pts = GetPlayerPtsSeconds() * (double)DVD_TIME_BASE;
- // video pts cannot be late or dvdplayer goes nuts,
- // so run it one frame ahead
- pDvdVideoPicture->pts += 1 * pDvdVideoPicture->iDuration;
+ if (m_speed == DVD_PLAYSPEED_NORMAL)
+ {
+ pDvdVideoPicture->pts = GetPlayerPtsSeconds() * (double)DVD_TIME_BASE;
+ // video pts cannot be late or dvdplayer goes nuts,
+ // so run it one frame ahead
+ pDvdVideoPicture->pts += 1 * pDvdVideoPicture->iDuration;
+ }
+ else
+ {
+ // We are FF/RW; Do not use the Player clock or it just doesn't work
+ if (m_cur_pts == 0)
+ pDvdVideoPicture->pts = (double)m_1st_pts / PTS_FREQ * DVD_TIME_BASE;
+ else
+ pDvdVideoPicture->pts = (double)m_cur_pts / PTS_FREQ * DVD_TIME_BASE;
+ }
return true;
}