mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	Add support for ALSA compressed offload
See https://docs.kernel.org/sound/designs/compress-offload.html https://github.com/alsa-project/tinycompress
This commit is contained in:
		
							parent
							
								
									f3914e494c
								
							
						
					
					
						commit
						6a034cc398
					
				
					 7 changed files with 1212 additions and 2 deletions
				
			
		|  | @ -266,6 +266,15 @@ if not readline_dep.found() | |||
|   readline_dep = cc.find_library('readline', required : get_option('readline')) | ||||
| endif | ||||
| 
 | ||||
| need_avcodec = get_option('ffmpeg').enabled() or get_option('pw-cat').enabled() | ||||
| avcodec_dep = dependency('libavcodec', required: need_avcodec) | ||||
| avformat_dep = dependency('libavformat', required: get_option('pw-cat')) | ||||
| summary({'Libav for pw-cat': avcodec_dep.found() and avformat_dep.found()}, bool_yn: true, section: 'Support for ALSA Compress-Offload API') | ||||
| tinycompress_dep = cc.find_library('tinycompress', has_headers: ['tinycompress/tinycompress.h' ], required: get_option('compressed-offload')) | ||||
| summary({'Compressed offload sink': tinycompress_dep.found()}, bool_yn: true, section: 'Support for ALSA Compress-Offload API') | ||||
| compressed_offload_enabled = avcodec_dep.found() and avformat_dep.found() and tinycompress_dep.found() | ||||
| cdata.set('HAVE_COMPRESSED_OFFLOAD', compressed_offload_enabled) | ||||
| 
 | ||||
| summary({'readline (for pw-cli)': readline_dep.found()}, bool_yn: true, section: 'Misc dependencies') | ||||
| cdata.set('HAVE_READLINE', readline_dep.found()) | ||||
| ncurses_dep = dependency('ncursesw', required : false) | ||||
|  |  | |||
|  | @ -273,3 +273,7 @@ option('gsettings', | |||
|        description: 'Enable code that depends on gsettings', | ||||
|        type: 'feature', | ||||
|        value: 'auto') | ||||
| option('compressed-offload', | ||||
|        description: 'Enable compressed offload support', | ||||
|        type: 'feature', | ||||
|        value: 'auto') | ||||
|  |  | |||
							
								
								
									
										39
									
								
								spa/include/spa/param/audio/compressed.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								spa/include/spa/param/audio/compressed.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| /* Simple Plugin API
 | ||||
|  * | ||||
|  * Copyright © 2021 Wim Taymans | ||||
|  *           © 2022 Asymptotic Inc. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice (including the next | ||||
|  * paragraph) shall be included in all copies or substantial portions of the | ||||
|  * Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||
|  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||
|  * DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef SPA_AUDIO_COMPRESSED_H | ||||
| #define SPA_AUDIO_COMPRESSED_H | ||||
| 
 | ||||
| #include <spa/param/audio/aac.h> | ||||
| #include <spa/param/audio/alac.h> | ||||
| #include <spa/param/audio/amr.h> | ||||
| #include <spa/param/audio/ape.h> | ||||
| #include <spa/param/audio/flac.h> | ||||
| #include <spa/param/audio/mp3.h> | ||||
| #include <spa/param/audio/ra.h> | ||||
| #include <spa/param/audio/vorbis.h> | ||||
| #include <spa/param/audio/wma.h> | ||||
| 
 | ||||
| #endif /* SPA_AUDIO_COMPRESSED_H */ | ||||
|  | @ -74,7 +74,6 @@ if get_option('spa-plugins').allowed() | |||
|       summary({'ModemManager': mm_dep.found()}, bool_yn: true, section: 'Bluetooth backends') | ||||
|     endif | ||||
|   endif | ||||
|   avcodec_dep = dependency('libavcodec', required: get_option('ffmpeg')) | ||||
|   jack_dep = dependency('jack', version : '>= 1.9.10', required: get_option('jack')) | ||||
|   summary({'JACK2': jack_dep.found()}, bool_yn: true, section: 'Backend') | ||||
|   vulkan_dep = dependency('vulkan', disabler : true, version : '>= 1.1.69', required: get_option('vulkan')) | ||||
|  |  | |||
							
								
								
									
										1142
									
								
								spa/plugins/alsa/alsa-compressed-sink.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1142
									
								
								spa/plugins/alsa/alsa-compressed-sink.c
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -22,6 +22,8 @@ | |||
|  * DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| #include <errno.h> | ||||
| 
 | ||||
| #include <spa/support/plugin.h> | ||||
|  | @ -33,6 +35,9 @@ extern const struct spa_handle_factory spa_alsa_udev_factory; | |||
| extern const struct spa_handle_factory spa_alsa_device_factory; | ||||
| extern const struct spa_handle_factory spa_alsa_seq_bridge_factory; | ||||
| extern const struct spa_handle_factory spa_alsa_acp_device_factory; | ||||
| #ifdef HAVE_COMPRESSED_OFFLOAD | ||||
| extern const struct spa_handle_factory spa_alsa_compressed_sink_factory; | ||||
| #endif | ||||
| 
 | ||||
| struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.alsa"); | ||||
| struct spa_log_topic *alsa_log_topic = &log_topic; | ||||
|  | @ -62,6 +67,11 @@ int spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t | |||
| 	case 5: | ||||
| 		*factory = &spa_alsa_acp_device_factory; | ||||
| 		break; | ||||
| #ifdef HAVE_COMPRESSED_OFFLOAD | ||||
| 	case 6: | ||||
| 		*factory = &spa_alsa_compressed_sink_factory; | ||||
| 		break; | ||||
| #endif | ||||
| 	default: | ||||
| 		return 0; | ||||
| 	} | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| subdir('acp') | ||||
| subdir('mixer') | ||||
| 
 | ||||
| spa_alsa_dependencies = [ spa_dep, alsa_dep, libudev_dep, mathlib, epoll_shim_dep, libinotify_dep ] | ||||
| 
 | ||||
| spa_alsa_sources = ['alsa.c', | ||||
|                 'alsa.h', | ||||
|                 'alsa-udev.c', | ||||
|  | @ -12,12 +14,17 @@ spa_alsa_sources = ['alsa.c', | |||
|                 'alsa-seq-bridge.c', | ||||
|                 'alsa-seq.c'] | ||||
| 
 | ||||
| if tinycompress_dep.found() | ||||
|   spa_alsa_sources += [ 'alsa-compressed-sink.c' ] | ||||
|   spa_alsa_dependencies += tinycompress_dep | ||||
| endif | ||||
| 
 | ||||
| spa_alsa = shared_library( | ||||
|   'spa-alsa', | ||||
|   [ spa_alsa_sources ], | ||||
|   c_args : acp_c_args, | ||||
|   include_directories : [configinc], | ||||
|   dependencies : [ spa_dep, alsa_dep, libudev_dep, mathlib, epoll_shim_dep, libinotify_dep ], | ||||
|   dependencies : spa_alsa_dependencies, | ||||
|   link_with : [ acp_lib ], | ||||
|   install : true, | ||||
|   install_dir : spa_plugindir / 'alsa' | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sanchayan Maity
						Sanchayan Maity