bool run() { SharedPtr<VideoFrame> src; FpsCalc fps; uint32_t count = 0; while (m_input->read(src)) { SharedPtr<VideoFrame> dest = m_allocator->alloc(); if (!dest) { ERROR("failed to get output frame"); break; } //disable scale for performance measure //#define DISABLE_SCALE 1 #ifndef DISABLE_SCALE YamiStatus status = m_vpp->process(src, dest); if (status != YAMI_SUCCESS) { ERROR("failed to scale yami return %d", status); break; } #else dest = src; #endif if(!m_output->output(dest)) break; count++; fps.addFrame(); if(count >= m_cmdParam.frameCount) break; } fps.log(); return true; }
void renderOutputs() { SharedPtr<VideoFrame> frame; FpsCalc fps; int width = m_width / m_col; int height = m_height / m_row; do { SharedPtr<VideoFrame> dest = m_renderer->dequeue(); for (int i = 0; i < m_row; i++) { for (int j = 0; j < m_col; j++) { SharedPtr<VppInputDecode>& input = m_inputs[i * m_col + j]; if (!input->read(frame)) { m_renderer->discard(dest); m_renderer->flush(); goto DONE; } dest->crop.x = j * width; dest->crop.y = i * height; dest->crop.width = width; dest->crop.height = height; m_vpp->process(frame, dest); } } if (!m_renderer->queue(dest)) { ERROR("queue to drm failed"); goto DONE; } fps.addFrame(); } while (1); DONE: fps.log(); }
bool run() { FpsCalc fps; SharedPtr<VideoFrame> src; uint32_t count = 0; while (m_vppInput->read(src)) { if (!m_output->output(src)) break; count++; fps.addFrame(); if (count == m_params.renderFrames) break; } fps.log(); return true; }