diff --git a/include/pipewire_screencast.h b/include/pipewire_screencast.h index 940188c..67dcca3 100644 --- a/include/pipewire_screencast.h +++ b/include/pipewire_screencast.h @@ -6,6 +6,7 @@ #define XDPW_PWR_BUFFERS 1 #define XDPW_PWR_ALIGN 16 +void pwr_update_stream_param(struct xdpw_screencast_instance *cast); void xdpw_pwr_stream_create(struct xdpw_screencast_instance *cast); void xdpw_pwr_stream_destroy(struct xdpw_screencast_instance *cast); int xdpw_pwr_context_create(struct xdpw_state *state); diff --git a/src/screencast/pipewire_screencast.c b/src/screencast/pipewire_screencast.c index 24432b0..b7f8162 100644 --- a/src/screencast/pipewire_screencast.c +++ b/src/screencast/pipewire_screencast.c @@ -169,6 +169,22 @@ static const struct pw_stream_events pwr_stream_events = { .param_changed = pwr_handle_stream_param_changed, }; +void pwr_update_stream_param(struct xdpw_screencast_instance *cast) { + logprint(TRACE, "pipewire: stream update parameters"); + struct pw_stream *stream = cast->stream; + uint8_t params_buffer[1024]; + struct spa_pod_builder b = + SPA_POD_BUILDER_INIT(params_buffer, sizeof(params_buffer)); + const struct spa_pod *params[1]; + + enum spa_video_format format = xdpw_format_pw_from_wl_shm(cast->simple_frame.format); + + params[0] = build_format(&b, format, + cast->simple_frame.width, cast->simple_frame.height, cast->framerate); + + pw_stream_update_params(stream, params, 1); +} + void xdpw_pwr_stream_create(struct xdpw_screencast_instance *cast) { struct xdpw_screencast_context *ctx = cast->ctx; struct xdpw_state *state = ctx->state;