}
}
- if (VFORMAT_H264 == para->video_format /*|| VFORMAT_H264MVC == para->video_format*/) {
+ if (VFORMAT_H264 == para->video_format || VFORMAT_H264_4K2K == para->video_format) {
ret = h264_write_header(para, pkt);
if (ret != PLAYER_SUCCESS) {
return ret;
am_private->video_rotation_degree = 3;
// handle extradata
am_private->video_format = codecid_to_vformat(hints.codec);
+ if (am_private->video_format == VFORMAT_H264) {
+ if (hints.width > 1920 || hints.height > 1088) {
+ am_private->video_format = VFORMAT_H264_4K2K;
+ }
+ }
switch (am_private->video_format)
{
default:
if (m_hints.ptsinvalid)
am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
break;
+ case VFORMAT_H264_4K2K:
+ 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
+ if (m_hints.ptsinvalid)
+ am_private->gcodec.param = (void*)(EXTERNAL_PTS | SYNC_OUTSIDE);
+ } else {
+ CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder codec init failed, 4K supported only on Meson8.");
+ return false;
+ }
+ break;
case VFORMAT_REAL:
am_private->stream_type = AM_STREAM_RM;
am_private->vcodec.noblock = 1;
CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder codec init failed, ret=0x%x", -ret);
return false;
}
+
am_private->dumpdemux = false;
dumpfile_open(am_private);
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;
}
break;
default:
m_dll->codec_resume(&am_private->vcodec);
- if (am_private->video_format == VFORMAT_H264)
+ if ((am_private->video_format == VFORMAT_H264) || (am_private->video_format == VFORMAT_H264_4K2K))
m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_FFFB);
else
m_dll->codec_set_cntl_mode(&am_private->vcodec, TRICKMODE_I);