- graph_->update_value("tick-time", perf_timer_.elapsed()*format_desc_.fps*0.5);\r
- perf_timer_.restart();\r
- \r
- core::pixel_format_desc desc;\r
- desc.pix_fmt = core::pixel_format::ycbcr;\r
- desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width, format_desc_.height, 1));\r
- desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width/2, format_desc_.height, 1));\r
- desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width/2, format_desc_.height, 1)); \r
- auto frame = frame_factory_->create_frame(this, desc);\r
- \r
- void* bytes = nullptr;\r
- video->GetBytes(&bytes);\r
- unsigned char* data = reinterpret_cast<unsigned char*>(bytes);\r
- const size_t frame_size = (format_desc_.width * 16 / 8) * format_desc_.height;\r
-\r
- // Convert to planar YUV422\r
- unsigned char* y = frame->image_data(0).begin();\r
- unsigned char* cb = frame->image_data(1).begin();\r
- unsigned char* cr = frame->image_data(2).begin();\r
- \r
- tbb::parallel_for(tbb::blocked_range<size_t>(0, frame_size/4), [&](const tbb::blocked_range<size_t>& r)\r
- {\r
- for(auto n = r.begin(); n != r.end(); ++n)\r
- {\r
- cb[n] = data[n*4+0];\r
- y [n*2+0] = data[n*4+1];\r
- cr[n] = data[n*4+2];\r
- y [n*2+1] = data[n*4+3];\r
- }\r
- });\r
-\r
- frame->commit();\r