// read interface virtual UINT32 read_data(void *_dest, UINT64 offset, UINT32 length) { assert(offset % m_source.hunk_bytes() == 0); assert(length % m_source.hunk_bytes() == 0); UINT32 startfield = offset / m_source.hunk_bytes(); UINT32 endfield = startfield + length / m_source.hunk_bytes(); UINT8 *dest = reinterpret_cast<UINT8 *>(_dest); for (UINT32 fieldnum = startfield; fieldnum < endfield; fieldnum++) { generate_one_frame(dest, m_source.hunk_bytes(), fieldnum); dest += m_source.hunk_bytes(); } return length; }
static void RGB3Source_tick(Instance *pi) { RGB3Source_private *priv = (RGB3Source_private *)pi; Handler_message *hm; int wait_flag = (priv->enable ? 0 : 1); hm = GetData(pi, wait_flag); if (hm) { hm->handler(pi, hm->data); ReleaseMessage(&hm,pi); } if (!priv->enable) { return; } generate_one_frame(pi); int sec = priv->period_ms/1000; long nsec = (priv->period_ms % 1000) * 1000000; nanosleep(&(struct timespec) { .tv_sec = sec, .tv_nsec = nsec}, NULL);