Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

P5.js createCapture failure callback

Is there a callback function for p5.js’ createCapture function fails? (i.e. when user permission is denied or video camera stream is unsupported by user browser).

I notice in the src there is a success callback, but can’t seem to find one for failure. In the browser console, p5 also reports ‘DOMException: Permission denied’, however, I would like to handle this in a more user-friendly fashion.

If there is no callback, what is the best practice for handling media failure with createCapture as it doesn’t seem to be discussed in the docs.

like image 225
Ryan Achten Avatar asked Nov 17 '22 13:11

Ryan Achten


1 Answers

Ok so this answer is more than a year late but posting this as it may be useful for others stuck on the same issue. Rather than error testing the capture itself as suggested in comments below or perhaps reworking createCapture() (best done through opening an issue request if you feel it should be changed) I suggest testing the pixels array of the capture and only if it has been set then proceeding with doing whatever your script does. This could be done simply like so:

//load pixel data of webcam capture
cap.loadPixels();

//all values in the pixel array start as zero so just test if they are 
//greater than zero 
if (cap.pixels[1] > 0)
{
    //put the rest of your script here
}

A full example of this in action is below:

var canvas;
var cap;
var xpos = 0;

function setup()
{
    canvas = createCanvas(windowWidth, windowHeight);
    canvas.style("display", "block");
    background("#666666");

    //create an instance of the webcam
    cap = createCapture(VIDEO);

    cap.size(640, 480);
    cap.hide();
}


function draw()
{
    //load pixel data of webcam capture
    cap.loadPixels();

    //if the first pixel's R value is set continue with the rest of the script
    if (cap.pixels[1] > 0)
    {
        var w = cap.width;
        var h = cap.height;

        copy(cap, w/2, 0, 10, h, xpos, (height / 2) - (h / 2), 10, h);

        xpos = xpos + 1;

        if (xpos > width) xpos = 0;
    }
}
like image 77
garrettlynchirl Avatar answered Nov 24 '22 01:11

garrettlynchirl