@@ -143,6 +143,10 @@ typedef struct {
143143 AVBufferRef *handle;
144144} bare_ffmpeg_hw_frames_context_t ;
145145
146+ typedef struct {
147+ AVHWFramesConstraints *handle;
148+ } bare_ffmpeg_hw_frames_constraints_t ;
149+
146150static uv_once_t bare_ffmpeg__init_guard = UV_ONCE_INIT ;
147151
148152static void
@@ -2718,6 +2722,113 @@ bare_ffmpeg_hw_frames_context_get_buffer(
27182722 }
27192723}
27202724
2725+ static js_arraybuffer_t
2726+ bare_ffmpeg_hw_frames_context_get_constraints (
2727+ js_env_t *env,
2728+ js_receiver_t ,
2729+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_context_t , 1 > hw_frames_ctx
2730+ ) {
2731+ int err;
2732+
2733+ AVHWFramesContext *frames_ctx = reinterpret_cast <AVHWFramesContext *>(hw_frames_ctx->handle ->data );
2734+
2735+ AVHWFramesConstraints *constraints = av_hwdevice_get_hwframe_constraints (frames_ctx->device_ref , NULL );
2736+ if (!constraints) {
2737+ err = js_throw_error (env, NULL , " Failed to get hardware frame constraints" );
2738+ assert (err == 0 );
2739+ throw js_pending_exception;
2740+ }
2741+
2742+ js_arraybuffer_t handle;
2743+ bare_ffmpeg_hw_frames_constraints_t *hw_frames_constraints;
2744+
2745+ err = js_create_arraybuffer (env, hw_frames_constraints, handle);
2746+ assert (err == 0 );
2747+
2748+ hw_frames_constraints->handle = constraints;
2749+
2750+ return handle;
2751+ }
2752+
2753+ static void
2754+ bare_ffmpeg_hw_frames_constraints_destroy (
2755+ js_env_t *env,
2756+ js_receiver_t ,
2757+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2758+ ) {
2759+ av_hwframe_constraints_free (&hw_frames_constraints->handle );
2760+ }
2761+
2762+ static std::vector<int32_t >
2763+ bare_ffmpeg_hw_frames_constraints_get_valid_sw_formats (
2764+ js_env_t *env,
2765+ js_receiver_t ,
2766+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2767+ ) {
2768+ std::vector<int32_t > formats;
2769+
2770+ if (hw_frames_constraints->handle ->valid_sw_formats ) {
2771+ for (int i = 0 ; hw_frames_constraints->handle ->valid_sw_formats [i] != AV_PIX_FMT_NONE ; i++) {
2772+ formats.push_back (hw_frames_constraints->handle ->valid_sw_formats [i]);
2773+ }
2774+ }
2775+
2776+ return formats;
2777+ }
2778+
2779+ static std::vector<int32_t >
2780+ bare_ffmpeg_hw_frames_constraints_get_valid_hw_formats (
2781+ js_env_t *env,
2782+ js_receiver_t ,
2783+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2784+ ) {
2785+ std::vector<int32_t > formats;
2786+
2787+ if (hw_frames_constraints->handle ->valid_hw_formats ) {
2788+ for (int i = 0 ; hw_frames_constraints->handle ->valid_hw_formats [i] != AV_PIX_FMT_NONE ; i++) {
2789+ formats.push_back (hw_frames_constraints->handle ->valid_hw_formats [i]);
2790+ }
2791+ }
2792+
2793+ return formats;
2794+ }
2795+
2796+ static int32_t
2797+ bare_ffmpeg_hw_frames_constraints_get_min_width (
2798+ js_env_t *env,
2799+ js_receiver_t ,
2800+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2801+ ) {
2802+ return hw_frames_constraints->handle ->min_width ;
2803+ }
2804+
2805+ static int32_t
2806+ bare_ffmpeg_hw_frames_constraints_get_max_width (
2807+ js_env_t *env,
2808+ js_receiver_t ,
2809+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2810+ ) {
2811+ return hw_frames_constraints->handle ->max_width ;
2812+ }
2813+
2814+ static int32_t
2815+ bare_ffmpeg_hw_frames_constraints_get_min_height (
2816+ js_env_t *env,
2817+ js_receiver_t ,
2818+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2819+ ) {
2820+ return hw_frames_constraints->handle ->min_height ;
2821+ }
2822+
2823+ static int32_t
2824+ bare_ffmpeg_hw_frames_constraints_get_max_height (
2825+ js_env_t *env,
2826+ js_receiver_t ,
2827+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_constraints_t , 1 > hw_frames_constraints
2828+ ) {
2829+ return hw_frames_constraints->handle ->max_height ;
2830+ }
2831+
27212832static int32_t
27222833bare_ffmpeg_hw_frames_context_get_format (
27232834 js_env_t *env,
@@ -2802,6 +2913,27 @@ bare_ffmpeg_hw_frames_context_set_height(
28022913 ctx->height = height;
28032914}
28042915
2916+ static int32_t
2917+ bare_ffmpeg_hw_frames_context_get_initial_pool_size (
2918+ js_env_t *env,
2919+ js_receiver_t ,
2920+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_context_t , 1 > hw_frames_ctx
2921+ ) {
2922+ AVHWFramesContext *ctx = reinterpret_cast <AVHWFramesContext *>(hw_frames_ctx->handle ->data );
2923+ return ctx->initial_pool_size ;
2924+ }
2925+
2926+ static void
2927+ bare_ffmpeg_hw_frames_context_set_initial_pool_size (
2928+ js_env_t *env,
2929+ js_receiver_t ,
2930+ js_arraybuffer_span_of_t <bare_ffmpeg_hw_frames_context_t , 1 > hw_frames_ctx,
2931+ int32_t initial_pool_size
2932+ ) {
2933+ AVHWFramesContext *ctx = reinterpret_cast <AVHWFramesContext *>(hw_frames_ctx->handle ->data );
2934+ ctx->initial_pool_size = initial_pool_size;
2935+ }
2936+
28052937static js_arraybuffer_t
28062938bare_ffmpeg_image_init (
28072939 js_env_t *env,
@@ -4559,7 +4691,18 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
45594691 V (" setHWFramesContextWidth" , bare_ffmpeg_hw_frames_context_set_width)
45604692 V (" getHWFramesContextHeight" , bare_ffmpeg_hw_frames_context_get_height)
45614693 V (" setHWFramesContextHeight" , bare_ffmpeg_hw_frames_context_set_height)
4694+ V (" getHWFramesContextInitialPoolSize" , bare_ffmpeg_hw_frames_context_get_initial_pool_size)
4695+ V (" setHWFramesContextInitialPoolSize" , bare_ffmpeg_hw_frames_context_set_initial_pool_size)
45624696 V (" getHWFramesContextBuffer" , bare_ffmpeg_hw_frames_context_get_buffer)
4697+ V (" getHWFramesContextConstraints" , bare_ffmpeg_hw_frames_context_get_constraints)
4698+
4699+ V (" destroyHWFramesConstraints" , bare_ffmpeg_hw_frames_constraints_destroy)
4700+ V (" getHWFramesConstraintsValidSwFormats" , bare_ffmpeg_hw_frames_constraints_get_valid_sw_formats)
4701+ V (" getHWFramesConstraintsValidHwFormats" , bare_ffmpeg_hw_frames_constraints_get_valid_hw_formats)
4702+ V (" getHWFramesConstraintsMinWidth" , bare_ffmpeg_hw_frames_constraints_get_min_width)
4703+ V (" getHWFramesConstraintsMaxWidth" , bare_ffmpeg_hw_frames_constraints_get_max_width)
4704+ V (" getHWFramesConstraintsMinHeight" , bare_ffmpeg_hw_frames_constraints_get_min_height)
4705+ V (" getHWFramesConstraintsMaxHeight" , bare_ffmpeg_hw_frames_constraints_get_max_height)
45634706
45644707 V (" initImage" , bare_ffmpeg_image_init)
45654708 V (" fillImage" , bare_ffmpeg_image_fill)
0 commit comments