From 3767c9c4e8107a3e78f387466b45384d64644d94 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Mon, 28 Feb 2011 10:53:41 +0530 Subject: format: Add some properties and internal API The properties will be used by clients to set the sample format, sampling rate, etc. The functions will be used internally. --- src/pulse/internal.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/pulse/internal.h') diff --git a/src/pulse/internal.h b/src/pulse/internal.h index ab702b99..53fcca60 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -291,6 +291,11 @@ pa_tagstruct *pa_tagstruct_command(pa_context *c, uint32_t command, uint32_t *ta void pa_ext_device_manager_command(pa_context *c, uint32_t tag, pa_tagstruct *t); void pa_ext_stream_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t); +pa_bool_t pa_format_info_is_compatible(pa_format_info *first, pa_format_info *second); +pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_map *map); +void pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); +void pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss); + pa_bool_t pa_mainloop_is_our_api(pa_mainloop_api*m); #endif -- cgit From 0ac2cfce6d1a3d7ab5af6aca659e46625c32d3c4 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Mon, 28 Feb 2011 13:23:23 +0530 Subject: core: Add extended stream API to support compressed formats This is the beginning of work to support compressed formats natively in PulseAudio. This adds a pa_stream_new_extended() that takes a format structure, sends it to the server (=> protocol extension) and has the server negotiate with the appropropriate sink to figure out what format it should use. This is work in progress, and works only with PCM streams. Actual compressed format support in some sink needs to be implemented, and extensive testing is required. More details on how this is supposed to work is available at: http://pulseaudio.org/wiki/PassthroughSupport --- src/pulse/internal.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/pulse/internal.h') diff --git a/src/pulse/internal.h b/src/pulse/internal.h index 53fcca60..d7151653 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -122,6 +122,8 @@ typedef struct pa_index_correction { pa_bool_t corrupt:1; } pa_index_correction; +#define PA_MAX_FORMATS (PA_ENCODING_MAX) + struct pa_stream { PA_REFCNT_DECLARE; PA_LLIST_FIELDS(pa_stream); @@ -137,6 +139,9 @@ struct pa_stream { pa_sample_spec sample_spec; pa_channel_map channel_map; + uint8_t n_formats; + pa_format_info *req_formats[PA_MAX_FORMATS]; + pa_format_info *format; pa_proplist *proplist; -- cgit From 13229fb39e7b8cff3f114c98f8236d9123442243 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Wed, 2 Mar 2011 11:16:07 +0530 Subject: sink-input: Don't assert on bad formats Handles bad format input more gracefully and returns an error instead. --- src/pulse/internal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/pulse/internal.h') diff --git a/src/pulse/internal.h b/src/pulse/internal.h index d7151653..228e8dc4 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -298,8 +298,8 @@ void pa_ext_stream_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t) pa_bool_t pa_format_info_is_compatible(pa_format_info *first, pa_format_info *second); pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_map *map); -void pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); -void pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss); +pa_bool_t pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); +pa_bool_t pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss); pa_bool_t pa_mainloop_is_our_api(pa_mainloop_api*m); -- cgit From e418e49ecbd643f3cac87438d00baaf86275927c Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Wed, 2 Mar 2011 11:31:51 +0530 Subject: format: Avoid some code duplication We frequently need to free an idxset containing pa_format_infos, so define an internal free function that can be used directly with this (instead of defining it once-per-file). --- src/pulse/internal.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/pulse/internal.h') diff --git a/src/pulse/internal.h b/src/pulse/internal.h index 228e8dc4..351aeec9 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -296,6 +296,7 @@ pa_tagstruct *pa_tagstruct_command(pa_context *c, uint32_t command, uint32_t *ta void pa_ext_device_manager_command(pa_context *c, uint32_t tag, pa_tagstruct *t); void pa_ext_stream_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t); +void pa_format_info_free2(pa_format_info *f, void *userdata); pa_bool_t pa_format_info_is_compatible(pa_format_info *first, pa_format_info *second); pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_map *map); pa_bool_t pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); -- cgit From 13a33abf45f31417076f283ca7da9d9f74892286 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Tue, 29 Mar 2011 17:16:08 +0530 Subject: format: Export pa_format_info_is_compatible in API This allows clients to perform checks between formats as well. --- src/pulse/internal.h | 1 - 1 file changed, 1 deletion(-) (limited to 'src/pulse/internal.h') diff --git a/src/pulse/internal.h b/src/pulse/internal.h index 351aeec9..a659576a 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -297,7 +297,6 @@ void pa_ext_device_manager_command(pa_context *c, uint32_t tag, pa_tagstruct *t) void pa_ext_stream_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t); void pa_format_info_free2(pa_format_info *f, void *userdata); -pa_bool_t pa_format_info_is_compatible(pa_format_info *first, pa_format_info *second); pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_map *map); pa_bool_t pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); pa_bool_t pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss); -- cgit From 8d076d09902fe618e69f3d71e42299bffe2af437 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Wed, 13 Apr 2011 14:05:18 +0530 Subject: format: Extend properties to handle lists/ranges This replaces the simple string used by pa_format_info's proplist with a JSON string (accessed via new API only). This allows us to express lists and ranges more cleanly, and embed type information for future extensibility. We use json-c for JSON parsing. This is a lightweight depdency (32 KB on my system) and avoids the hassle of having to reinvent a JSON parser. Also included is a test which verifies functionality and is valgrind-clean. --- src/pulse/internal.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/pulse/internal.h') diff --git a/src/pulse/internal.h b/src/pulse/internal.h index a659576a..40f6804a 100644 --- a/src/pulse/internal.h +++ b/src/pulse/internal.h @@ -300,6 +300,8 @@ void pa_format_info_free2(pa_format_info *f, void *userdata); pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_map *map); pa_bool_t pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); pa_bool_t pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss); +pa_bool_t pa_format_info_get_prop_int(pa_format_info *f, const char *key, int *v); +pa_bool_t pa_format_info_get_prop_string(pa_format_info *f, const char *key, char **v); pa_bool_t pa_mainloop_is_our_api(pa_mainloop_api*m); -- cgit