mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pulse-server: make a function to silence a buffer
This commit is contained in:
		
							parent
							
								
									c0a6a7ea32
								
							
						
					
					
						commit
						cf7e917024
					
				
					 3 changed files with 20 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -221,6 +221,24 @@ uint32_t sample_spec_frame_size(const struct sample_spec *ss)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sample_spec_silence(const struct sample_spec *ss, void *data, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	switch (ss->format) {
 | 
			
		||||
	case SPA_AUDIO_FORMAT_U8:
 | 
			
		||||
		memset(data, 0x80, size);
 | 
			
		||||
		break;
 | 
			
		||||
	case SPA_AUDIO_FORMAT_ALAW:
 | 
			
		||||
		memset(data, 0x80 ^ 0x55, size);
 | 
			
		||||
		break;
 | 
			
		||||
	case SPA_AUDIO_FORMAT_ULAW:
 | 
			
		||||
		memset(data, 0x00 ^ 0xff, size);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		memset(data, 0, size);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool sample_spec_valid(const struct sample_spec *ss)
 | 
			
		||||
{
 | 
			
		||||
	return (sample_spec_frame_size(ss) > 0 &&
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -182,6 +182,7 @@ const char *format_encoding2name(enum encoding enc);
 | 
			
		|||
uint32_t format_encoding2id(enum encoding enc);
 | 
			
		||||
 | 
			
		||||
uint32_t sample_spec_frame_size(const struct sample_spec *ss);
 | 
			
		||||
void sample_spec_silence(const struct sample_spec *ss, void *data, size_t size);
 | 
			
		||||
bool sample_spec_valid(const struct sample_spec *ss);
 | 
			
		||||
 | 
			
		||||
void sample_spec_fix(struct sample_spec *ss, struct channel_map *map,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1390,20 +1390,7 @@ static void stream_process(void *data)
 | 
			
		|||
		if (avail < (int32_t)minreq || stream->corked) {
 | 
			
		||||
			/* underrun, produce a silence buffer */
 | 
			
		||||
			size = SPA_MIN(d->maxsize, minreq);
 | 
			
		||||
			switch (stream->ss.format) {
 | 
			
		||||
			case SPA_AUDIO_FORMAT_U8:
 | 
			
		||||
				memset(p, 0x80, size);
 | 
			
		||||
				break;
 | 
			
		||||
			case SPA_AUDIO_FORMAT_ALAW:
 | 
			
		||||
				memset(p, 0x80 ^ 0x55, size);
 | 
			
		||||
				break;
 | 
			
		||||
			case SPA_AUDIO_FORMAT_ULAW:
 | 
			
		||||
				memset(p, 0x00 ^ 0xff, size);
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				memset(p, 0, size);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			sample_spec_silence(&stream->ss, p, size);
 | 
			
		||||
 | 
			
		||||
			if (stream->draining && !stream->corked) {
 | 
			
		||||
				stream->draining = false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue