bool CDVDVideoCodecAmlogic::GetPicture(DVDVideoPicture* pDvdVideoPicture) { if (m_Codec) m_Codec->GetPicture(&m_videobuffer); *pDvdVideoPicture = m_videobuffer; CDVDAmlogicInfo* info = new CDVDAmlogicInfo(this, m_Codec, (int)m_Codec->GetCurPts()); { CSingleLock lock(m_secure); m_inflight.insert(info); } pDvdVideoPicture->amlcodec = info->Retain(); // check for mpeg2 aspect ratio changes if (m_mpeg2_sequence && pDvdVideoPicture->pts >= m_mpeg2_sequence_pts) m_aspect_ratio = m_mpeg2_sequence->ratio; pDvdVideoPicture->iDisplayWidth = pDvdVideoPicture->iWidth; pDvdVideoPicture->iDisplayHeight = pDvdVideoPicture->iHeight; if (m_aspect_ratio > 1.0 && !m_hints.forced_aspect) { pDvdVideoPicture->iDisplayWidth = ((int)lrint(pDvdVideoPicture->iHeight * m_aspect_ratio)) & ~3; if (pDvdVideoPicture->iDisplayWidth > pDvdVideoPicture->iWidth) { pDvdVideoPicture->iDisplayWidth = pDvdVideoPicture->iWidth; pDvdVideoPicture->iDisplayHeight = ((int)lrint(pDvdVideoPicture->iWidth / m_aspect_ratio)) & ~3; } } return true; }
bool CRendererAML::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha) { ManageRenderArea(); CDVDAmlogicInfo *amli = static_cast<CDVDAmlogicInfo *>(m_buffers[m_iYV12RenderBuffer].hwDec); if (amli) { CAMLCodec *amlcodec = amli->getAmlCodec(); if (amlcodec) amlcodec->SetVideoRect(m_sourceRect, m_destRect); } return true; }
bool CRendererAML::RenderUpdateVideoHook(bool clear, DWORD flags, DWORD alpha) { ManageRenderArea(); CDVDAmlogicInfo *amli = static_cast<CDVDAmlogicInfo *>(m_buffers[m_iYV12RenderBuffer].hwDec); if (amli && amli->GetOmxPts() != m_prevPts) { m_prevPts = amli->GetOmxPts(); SysfsUtils::SetInt("/sys/module/amvideo/parameters/omx_pts", amli->GetOmxPts()); CAMLCodec *amlcodec = amli->getAmlCodec(); if (amlcodec) amlcodec->SetVideoRect(m_sourceRect, m_destRect); } usleep(10000); return true; }