renderFrame method
void
renderFrame(
- num epoch
)
Implementation
void renderFrame(num epoch) {
try {
//const int HAVE_NOTHING = 0; // no information whether or not the video is ready
//const int HAVE_METADATA = 1; // metadata for the video is ready
//const int HAVE_CURRENT_DATA = 2; // data for the current playback position is available, but not enough data to play next frame/millisecond
//const int HAVE_FUTURE_DATA = 3; // data for the current and at least the next frame is available
const int haveEnoughData = 4; // enough data available to start playing
if (video.readyState == haveEnoughData) {
// scale and horizontally center the camera image
var videoStreamSize = {
'width': video.videoWidth,
'height': video.videoHeight
};
var videoDisplaySize = {
'width': video.scrollWidth,
'height': video.scrollHeight
};
var videoRenderSize = calculateSize(videoStreamSize, videoDisplaySize);
var xOffset =
(videoDisplaySize['width']! - videoRenderSize['width']) / 2;
widget.model.streamwidth = videoStreamSize["width"];
widget.model.streamheight = videoStreamSize["height"];
widget.model.displaywidth = videoDisplaySize["width"];
widget.model.displayheight = videoDisplaySize["height"];
widget.model.renderwidth = videoRenderSize["width"];
widget.model.renderheight = videoRenderSize["height"];
if (widget.model.scale) {
canvas.width = toInt(videoRenderSize["width"]);
canvas.height = toInt(videoRenderSize["height"]);
canvas.context2D.drawImageScaled(video, xOffset, 0,
videoRenderSize["width"], videoRenderSize["height"]);
} else {
canvas.width = videoStreamSize["width"];
canvas.height = videoStreamSize["height"];
canvas.context2D.drawImage(video, 0, 0);
}
lastFrame = epoch;
}
} catch (e) {
// System.toast("Error in video");
}
// Request another frame
if (abort != true) window.requestAnimationFrame(renderFrame);
}