diff --git a/pipewire/meson.build b/pipewire/meson.build index d8bb893f..7f155b49 100644 --- a/pipewire/meson.build +++ b/pipewire/meson.build @@ -8,18 +8,12 @@ if get_option('pipewire') deps_pipewire = [ dep_libweston_private ] dep_libpipewire = dependency('libpipewire-0.3', required: false) - if not dep_libpipewire.found() - dep_libpipewire = dependency('libpipewire-0.2', required: false) - endif if not dep_libpipewire.found() error('Pipewire plugin requires libpipewire which was not found. ' + user_hint) endif deps_pipewire += dep_libpipewire dep_libspa = dependency('libspa-0.2', required: false) - if not dep_libspa.found() - dep_libspa = dependency('libspa-0.1', required: false) - endif if not dep_libspa.found() error('Pipewire plugin requires libspa which was not found. ' + user_hint) endif diff --git a/pipewire/pipewire-plugin.c b/pipewire/pipewire-plugin.c index 55705acf..b194f4c6 100644 --- a/pipewire/pipewire-plugin.c +++ b/pipewire/pipewire-plugin.c @@ -42,22 +42,11 @@ #include #include -#if PW_CHECK_VERSION(0, 2, 90) #include #include -#endif #define PROP_RANGE(min, max) 2, (min), (max) -#if !PW_CHECK_VERSION(0, 2, 90) -struct type { - struct spa_type_media_type media_type; - struct spa_type_media_subtype media_subtype; - struct spa_type_format_video format_video; - struct spa_type_video_format video_format; -}; -#endif - struct weston_pipewire { struct weston_compositor *compositor; struct wl_list output_list; @@ -69,19 +58,10 @@ struct weston_pipewire { struct pw_loop *loop; struct wl_event_source *loop_source; -#if PW_CHECK_VERSION(0, 2, 90) struct pw_context *context; -#endif struct pw_core *core; struct pw_type *t; -#if PW_CHECK_VERSION(0, 2, 90) struct spa_hook core_listener; -#else - struct type type; - - struct pw_remote *remote; - struct spa_hook remote_listener; -#endif }; struct pipewire_output { @@ -116,16 +96,6 @@ struct pipewire_frame_data { struct wl_event_source *fence_sync_event_source; }; -#if !PW_CHECK_VERSION(0, 2, 90) -static inline void init_type(struct type *type, struct spa_type_map *map) -{ - spa_type_media_type_map(map, &type->media_type); - spa_type_media_subtype_map(map, &type->media_subtype); - spa_type_format_video_map(map, &type->format_video); - spa_type_video_format_map(map, &type->video_format); -} -#endif - static void pipewire_debug_impl(struct weston_pipewire *pipewire, struct pipewire_output *output, @@ -159,18 +129,6 @@ pipewire_debug_impl(struct weston_pipewire *pipewire, free(logstr); } -#if !PW_CHECK_VERSION(0, 2, 90) -static void -pipewire_debug(struct weston_pipewire *pipewire, const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - pipewire_debug_impl(pipewire, NULL, fmt, ap); - va_end(ap); -} -#endif - static void pipewire_output_debug(struct pipewire_output *output, const char *fmt, ...) { @@ -205,9 +163,6 @@ pipewire_output_handle_frame(struct pipewire_output *output, int fd, const struct weston_drm_virtual_output_api *api = output->pipewire->virtual_output_api; size_t size = output->output->height * stride; -#if !PW_CHECK_VERSION(0, 2, 90) - struct pw_type *t = output->pipewire->t; -#endif struct pw_buffer *buffer; struct spa_buffer *spa_buffer; struct spa_meta_header *h; @@ -225,12 +180,8 @@ pipewire_output_handle_frame(struct pipewire_output *output, int fd, spa_buffer = buffer->buffer; -#if PW_CHECK_VERSION(0, 2, 90) if ((h = spa_buffer_find_meta_data(spa_buffer, SPA_META_Header, sizeof(struct spa_meta_header)))) { -#else - if ((h = spa_buffer_find_meta(spa_buffer, t->meta.Header))) { -#endif h->pts = -1; h->flags = 0; h->seq = output->seq++; @@ -402,23 +353,15 @@ pipewire_set_dpms(struct weston_output *base_output, enum dpms_enum level) static int pipewire_output_connect(struct pipewire_output *output) { -#if !PW_CHECK_VERSION(0, 2, 90) - struct weston_pipewire *pipewire = output->pipewire; - struct type *type = &pipewire->type; -#endif uint8_t buffer[1024]; struct spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer)); const struct spa_pod *params[1]; -#if !PW_CHECK_VERSION(0, 2, 90) - struct pw_type *t = pipewire->t; -#endif int frame_rate = output->output->current_mode->refresh / 1000; int width = output->output->width; int height = output->output->height; int ret; -#if PW_CHECK_VERSION(0, 2, 90) params[0] = spa_pod_builder_add_object(&builder, SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat, SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video), @@ -435,27 +378,6 @@ pipewire_output_connect(struct pipewire_output *output) (PW_STREAM_FLAG_DRIVER | PW_STREAM_FLAG_MAP_BUFFERS), params, 1); -#else - params[0] = spa_pod_builder_object(&builder, - t->param.idEnumFormat, t->spa_format, - "I", type->media_type.video, - "I", type->media_subtype.raw, - ":", type->format_video.format, - "I", type->video_format.BGRx, - ":", type->format_video.size, - "R", &SPA_RECTANGLE(width, height), - ":", type->format_video.framerate, - "F", &SPA_FRACTION(0, 1), - ":", type->format_video.max_framerate, - "Fru", &SPA_FRACTION(frame_rate, 1), - PROP_RANGE(&SPA_FRACTION(1, 1), - &SPA_FRACTION(frame_rate, 1))); - - ret = pw_stream_connect(output->stream, PW_DIRECTION_OUTPUT, NULL, - (PW_STREAM_FLAG_DRIVER | - PW_STREAM_FLAG_MAP_BUFFERS), - params, 1); -#endif if (ret != 0) { weston_log("Failed to connect pipewire stream: %s", spa_strerror(ret)); @@ -532,42 +454,23 @@ pipewire_output_stream_state_changed(void *data, enum pw_stream_state old, } static void -#if PW_CHECK_VERSION(0, 2, 90) pipewire_output_stream_param_changed(void *data, uint32_t id, const struct spa_pod *format) -#else -pipewire_output_stream_format_changed(void *data, const struct spa_pod *format) -#endif { struct pipewire_output *output = data; -#if !PW_CHECK_VERSION(0, 2, 90) - struct weston_pipewire *pipewire = output->pipewire; -#endif uint8_t buffer[1024]; struct spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer)); const struct spa_pod *params[2]; -#if !PW_CHECK_VERSION(0, 2, 90) - struct pw_type *t = pipewire->t; -#endif int32_t width, height, stride, size; const int bpp = 4; if (!format) { pipewire_output_debug(output, "format = None"); -#if PW_CHECK_VERSION(0, 2, 90) pw_stream_update_params(output->stream, NULL, 0); -#else - pw_stream_finish_format(output->stream, 0, NULL, 0); -#endif return; } -#if PW_CHECK_VERSION(0, 2, 90) spa_format_video_raw_parse(format, &output->video_format); -#else - spa_format_video_raw_parse(format, &output->video_format, - &pipewire->type.format_video); -#endif width = output->video_format.size.width; height = output->video_format.size.height; @@ -576,7 +479,6 @@ pipewire_output_stream_format_changed(void *data, const struct spa_pod *format) pipewire_output_debug(output, "format = %dx%d", width, height); -#if PW_CHECK_VERSION(0, 2, 90) params[0] = spa_pod_builder_add_object(&builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, SPA_PARAM_BUFFERS_size, SPA_POD_Int(size), @@ -590,35 +492,12 @@ pipewire_output_stream_format_changed(void *data, const struct spa_pod *format) SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_header))); pw_stream_update_params(output->stream, params, 2); -#else - params[0] = spa_pod_builder_object(&builder, - t->param.idBuffers, t->param_buffers.Buffers, - ":", t->param_buffers.size, - "i", size, - ":", t->param_buffers.stride, - "i", stride, - ":", t->param_buffers.buffers, - "iru", 4, PROP_RANGE(2, 8), - ":", t->param_buffers.align, - "i", 16); - - params[1] = spa_pod_builder_object(&builder, - t->param.idMeta, t->param_meta.Meta, - ":", t->param_meta.type, "I", t->meta.Header, - ":", t->param_meta.size, "i", sizeof(struct spa_meta_header)); - - pw_stream_finish_format(output->stream, 0, params, 2); -#endif } static const struct pw_stream_events stream_events = { PW_VERSION_STREAM_EVENTS, .state_changed = pipewire_output_stream_state_changed, -#if PW_CHECK_VERSION(0, 2, 90) .param_changed = pipewire_output_stream_param_changed, -#else - .format_changed = pipewire_output_stream_format_changed, -#endif }; static struct weston_output * @@ -647,11 +526,7 @@ pipewire_output_create(struct weston_compositor *c, char *name) if (!head) goto err; -#if PW_CHECK_VERSION(0, 2, 90) output->stream = pw_stream_new(pipewire->core, name, NULL); -#else - output->stream = pw_stream_new(pipewire->remote, name, NULL); -#endif if (!output->stream) { weston_log("Cannot initialize pipewire stream\n"); goto err; @@ -797,49 +672,17 @@ weston_pipewire_loop_handler(int fd, uint32_t mask, void *data) return 0; } -#if PW_CHECK_VERSION(0, 2, 90) static void weston_pipewire_error(void *data, uint32_t id, int seq, int res, const char *error) { weston_log("pipewire remote error: %s\n", error); } -#else -static void -weston_pipewire_state_changed(void *data, enum pw_remote_state old, - enum pw_remote_state state, const char *error) -{ - struct weston_pipewire *pipewire = data; - pipewire_debug(pipewire, "[remote] state changed %s -> %s", - pw_remote_state_as_string(old), - pw_remote_state_as_string(state)); - - switch (state) { - case PW_REMOTE_STATE_ERROR: - weston_log("pipewire remote error: %s\n", error); - break; - case PW_REMOTE_STATE_CONNECTED: - weston_log("connected to pipewire daemon\n"); - break; - default: - break; - } -} -#endif - - -#if PW_CHECK_VERSION(0, 2, 90) static const struct pw_core_events core_events = { PW_VERSION_CORE_EVENTS, .error = weston_pipewire_error, }; -#else -static const struct pw_remote_events remote_events = { - PW_VERSION_REMOTE_EVENTS, - .state_changed = weston_pipewire_state_changed, -}; -#endif static int weston_pipewire_init(struct weston_pipewire *pipewire) @@ -854,49 +697,12 @@ weston_pipewire_init(struct weston_pipewire *pipewire) pw_loop_enter(pipewire->loop); -#if PW_CHECK_VERSION(0, 2, 90) pipewire->context = pw_context_new(pipewire->loop, NULL, 0); pipewire->core = pw_context_connect(pipewire->context, NULL, 0); -#else - pipewire->core = pw_core_new(pipewire->loop, NULL); - pipewire->t = pw_core_get_type(pipewire->core); - init_type(&pipewire->type, pipewire->t->map); -#endif -#if PW_CHECK_VERSION(0, 2, 90) pw_core_add_listener(pipewire->core, &pipewire->core_listener, &core_events, pipewire); -#else - pipewire->remote = pw_remote_new(pipewire->core, NULL, 0); - pw_remote_add_listener(pipewire->remote, - &pipewire->remote_listener, - &remote_events, pipewire); - - pw_remote_connect(pipewire->remote); - - while (true) { - enum pw_remote_state state; - const char *error = NULL; - int ret; - - state = pw_remote_get_state(pipewire->remote, &error); - if (state == PW_REMOTE_STATE_CONNECTED) - break; - - if (state == PW_REMOTE_STATE_ERROR) { - weston_log("pipewire error: %s\n", error); - goto err; - } - - ret = pw_loop_iterate(pipewire->loop, -1); - if (ret < 0) { - weston_log("pipewire_loop_iterate failed: %s", - spa_strerror(ret)); - goto err; - } - } -#endif loop = wl_display_get_event_loop(pipewire->compositor->wl_display); pipewire->loop_source = @@ -906,14 +712,6 @@ weston_pipewire_init(struct weston_pipewire *pipewire) pipewire); return 0; -#if !PW_CHECK_VERSION(0, 2, 90) -err: - if (pipewire->remote) - pw_remote_destroy(pipewire->remote); - pw_loop_leave(pipewire->loop); - pw_loop_destroy(pipewire->loop); - return -1; -#endif } static const struct weston_pipewire_api pipewire_api = {