Index: libs/libmythtv/avformatdecoder.cpp =================================================================== --- libs/libmythtv/avformatdecoder.cpp (revision 25926) +++ libs/libmythtv/avformatdecoder.cpp (working copy) @@ -2953,7 +2953,14 @@ } else { + if (pkt->pts != (int64_t)AV_NOPTS_VALUE) + context->reordered_opaque = (int64_t)(av_q2d(curstream->time_base) * pkt->pts * 100000000000); + else + context->reordered_opaque = 0; + VERBOSE(VB_PLAYBACK+VB_TIMESTAMP, LOC + + QString("private_dec pkt->pts %1 context->reordered_opaque %2").arg(pkt->pts).arg(context->reordered_opaque)); ret = private_dec->GetFrame(context, &mpa_pic, &gotpicture, pkt); + usleep(10000); } } else @@ -3073,6 +3080,7 @@ } pts = (long long)(av_q2d(curstream->time_base) * pts * 1000); + pts = (long long)(mpa_pic.reordered_opaque / 100000); long long temppts = pts; // Validate the video pts against the last pts. If it's Index: libs/libmythtv/privatedecoder_crystalhd.cpp =================================================================== --- libs/libmythtv/privatedecoder_crystalhd.cpp (revision 25926) +++ libs/libmythtv/privatedecoder_crystalhd.cpp (working copy) @@ -372,7 +372,7 @@ // TODO check for busy state and available buffer size INIT_ST - st = DtsProcInput(m_device, buf, size, pkt->pts * 1000, false); + st = DtsProcInput(m_device, buf, size, avctx->reordered_opaque, false); CHECK_ST if (free_buf) @@ -536,10 +536,14 @@ found = true; break; } + VERBOSE(VB_IMPORTANT, ERR + + QString("AddFrameToQueue :: m_frame->timecode %1 m_decoded_frames[%2] timecode %3") + .arg(m_frame->timecode).arg(i).arg(m_decoded_frames[i]->timecode)); } if (!found) i = m_decoded_frames.size(); - m_decoded_frames.insert(i, m_frame); + //m_decoded_frames.insert(i, m_frame); + m_decoded_frames.insert(0, m_frame); m_frame = NULL; }