const uint8_t* CCodec_ScanlineDecoder::GetScanline(int line) { if (m_NextLine == line + 1) return m_pLastScanline; if (m_NextLine < 0 || m_NextLine > line) { if (!v_Rewind()) return nullptr; m_NextLine = 0; } while (m_NextLine < line) { ReadNextLine(); m_NextLine++; } m_pLastScanline = ReadNextLine(); m_NextLine++; return m_pLastScanline; }
bool CCodec_ScanlineDecoder::SkipToScanline(int line, IFX_Pause* pPause) { if (m_NextLine == line || m_NextLine == line + 1) return false; if (m_NextLine < 0 || m_NextLine > line) { v_Rewind(); m_NextLine = 0; } m_pLastScanline = nullptr; while (m_NextLine < line) { m_pLastScanline = ReadNextLine(); m_NextLine++; if (pPause && pPause->NeedToPauseNow()) { return true; } } return false; }
FX_BOOL CCodec_ScanlineDecoder::SkipToScanline(int line, IFX_Pause* pPause) { if (m_pDataCache && line < m_pDataCache->NumLines()) return FALSE; if (m_NextLine == line || m_NextLine == line + 1) return FALSE; if (m_NextLine < 0 || m_NextLine > line) { v_Rewind(); m_NextLine = 0; } m_pLastScanline = nullptr; while (m_NextLine < line) { m_pLastScanline = ReadNextLine(); m_NextLine++; if (pPause && pPause->NeedToPauseNow()) { return TRUE; } } return FALSE; }
uint8_t* CCodec_ScanlineDecoder::GetScanline(int line) { if (m_pDataCache && line < m_pDataCache->m_nCachedLines) { return &m_pDataCache->m_Data + line * m_Pitch; } if (m_NextLine == line + 1) { return m_pLastScanline; } if (m_NextLine < 0 || m_NextLine > line) { if (!v_Rewind()) { return NULL; } m_NextLine = 0; } while (m_NextLine < line) { ReadNextLine(); m_NextLine ++; } m_pLastScanline = ReadNextLine(); m_NextLine ++; return m_pLastScanline; }