Lambdas don't currently work with val. You could do something like this:

struct Init {
void output(val frame) {
EM_ASM(
console.log("Got frame: ", frame);
);
}
void error(val e) {
EM_ASM(
console.error("Error initializing decoder: ", e);
);
}
};

EMSCRIPTEN_BINDINGS(xxx) {
class_<Init>("Init")
.function("output", &Init::output)
.function("error", &Init::error)
;
}
....
// This needs to be deleted at some pointed...
Init* init = new Init();

val decoder = VideoDecoder.new_(init);

On Tuesday, July 2, 2024 at 7:25:22 AM UTC-7 fidel....@gmail.com wrote:

> I'm quite new to emscripten, so please be patient with me :)
>
> My goal is to create a wrapper class with an instance of a VideoDecoder 
> object from WebCodecs API and pass some configurations inside it from C++.
>
>  I'm trying to pass an object called 'init' on the global "VideoDecoder" 
> object, which accepts a callback function on its members: output and error:
>
> LVideoDecoderWebCodecs::LVideoDecoderWebCodecs()
> {
>     val VideoDecoder = val::global("VideoDecoder");
>
>     if (!VideoDecoder.as<bool>()) {
>         EM_ASM(
>             console.error("WebCodecs API not available");
>         );
>     }
>
>     val config = val::object();
>     config.set("codec", val("vp8"));
>     config.set("codedWidth", val(640));
>     config.set("codedHeight", val(480));
>
>     val init = val::object();
>     init.set("output", [](val frame) {
>         EM_ASM(
>             console.log("Got frame: ", frame);
>         );
>     });
>
>     init.set("error", [](val e) {
>         EM_ASM(
>             console.error("Error initializing decoder: ", e);
>         );
>     });
>
>     val decoder = VideoDecoder.new_(init);
>     decoder.call<void>("configure", config);
> }
>
> The module compiles successfully but when I run it on the browser it says,
> wasmapi.js:4543 Uncaught BindingError: _emval_take_value has unknown type
>
> It seems that I can't set a callback function on the init object.
>
> Is there a solution to this? Or what can you suggest I handle this one.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to emscripten-discuss+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/emscripten-discuss/e2e02c70-f50f-4440-a68b-fafbd9874cb0n%40googlegroups.com.

Reply via email to