Skip to main content

src/mob_camera_nif.erl

%% mob_camera_nif — Erlang NIF module for the camera tier-1/2 plugin.
%%
%% iOS: priv/native/ios/mob_camera_nif.m (Objective-C: UIImagePickerController
%% capture, a shared AVCaptureSession for live preview + frame streaming with a
%% vImage resize/convert path, and the :camera permission flow). Android:
%% priv/native/jni/mob_camera_nif.zig bridging to CameraX via the
%% io.mob.camera.MobCameraBridge Kotlin bridge. Both register this module via
%% ERL_NIF_INIT and are statically linked into the host binary on device. On a
%% host dev build neither is linked, so on_load tolerates the failure and the
%% NIFs fall back to nif_error until the native merge links one.
-module(mob_camera_nif).
-export([
    camera_capture_photo/1,
    camera_capture_video/1,
    camera_start_preview/1,
    camera_stop_preview/0,
    camera_start_frame_stream/1,
    camera_stop_frame_stream/0
]).
-on_load(init/0).

init() ->
    case erlang:load_nif("mob_camera_nif", 0) of
        ok -> ok;
        {error, _} -> ok
    end.

camera_capture_photo(_Quality) ->
    erlang:nif_error(nif_not_loaded).

camera_capture_video(_MaxDuration) ->
    erlang:nif_error(nif_not_loaded).

camera_start_preview(_Json) ->
    erlang:nif_error(nif_not_loaded).

camera_stop_preview() ->
    erlang:nif_error(nif_not_loaded).

camera_start_frame_stream(_Json) ->
    erlang:nif_error(nif_not_loaded).

camera_stop_frame_stream() ->
    erlang:nif_error(nif_not_loaded).