mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	audioconvert: don't negottiate rate when resample is disabled
This will leave the negotiated rate 0 when parsed and instructs the stream to follow the graph rate.
This commit is contained in:
		
							parent
							
								
									4cc22d60d2
								
							
						
					
					
						commit
						0156d63109
					
				
					 2 changed files with 18 additions and 6 deletions
				
			
		| 
						 | 
					@ -1893,11 +1893,13 @@ static int port_enum_formats(void *object,
 | 
				
			||||||
				SPA_FORMAT_mediaType,      SPA_POD_Id(SPA_MEDIA_TYPE_application),
 | 
									SPA_FORMAT_mediaType,      SPA_POD_Id(SPA_MEDIA_TYPE_application),
 | 
				
			||||||
				SPA_FORMAT_mediaSubtype,   SPA_POD_Id(SPA_MEDIA_SUBTYPE_control));
 | 
									SPA_FORMAT_mediaSubtype,   SPA_POD_Id(SPA_MEDIA_SUBTYPE_control));
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 | 
								struct spa_pod_frame f[1];
 | 
				
			||||||
			uint32_t rate = this->io_position ?
 | 
								uint32_t rate = this->io_position ?
 | 
				
			||||||
				this->io_position->clock.target_rate.denom : DEFAULT_RATE;
 | 
									this->io_position->clock.target_rate.denom : DEFAULT_RATE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			*param = spa_pod_builder_add_object(builder,
 | 
								spa_pod_builder_push_object(builder, &f[0],
 | 
				
			||||||
				SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
 | 
										SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat);
 | 
				
			||||||
 | 
								spa_pod_builder_add(builder,
 | 
				
			||||||
				SPA_FORMAT_mediaType,      SPA_POD_Id(SPA_MEDIA_TYPE_audio),
 | 
									SPA_FORMAT_mediaType,      SPA_POD_Id(SPA_MEDIA_TYPE_audio),
 | 
				
			||||||
				SPA_FORMAT_mediaSubtype,   SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
 | 
									SPA_FORMAT_mediaSubtype,   SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
 | 
				
			||||||
				SPA_FORMAT_AUDIO_format,   SPA_POD_CHOICE_ENUM_Id(25,
 | 
									SPA_FORMAT_AUDIO_format,   SPA_POD_CHOICE_ENUM_Id(25,
 | 
				
			||||||
| 
						 | 
					@ -1926,10 +1928,18 @@ static int port_enum_formats(void *object,
 | 
				
			||||||
							SPA_AUDIO_FORMAT_U8,
 | 
												SPA_AUDIO_FORMAT_U8,
 | 
				
			||||||
							SPA_AUDIO_FORMAT_ULAW,
 | 
												SPA_AUDIO_FORMAT_ULAW,
 | 
				
			||||||
							SPA_AUDIO_FORMAT_ALAW),
 | 
												SPA_AUDIO_FORMAT_ALAW),
 | 
				
			||||||
 | 
									0);
 | 
				
			||||||
 | 
								if (!this->props.resample_disabled) {
 | 
				
			||||||
 | 
									spa_pod_builder_add(builder,
 | 
				
			||||||
					SPA_FORMAT_AUDIO_rate,     SPA_POD_CHOICE_RANGE_Int(
 | 
										SPA_FORMAT_AUDIO_rate,     SPA_POD_CHOICE_RANGE_Int(
 | 
				
			||||||
						rate, 1, INT32_MAX),
 | 
											rate, 1, INT32_MAX),
 | 
				
			||||||
 | 
										0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								spa_pod_builder_add(builder,
 | 
				
			||||||
				SPA_FORMAT_AUDIO_channels, SPA_POD_CHOICE_RANGE_Int(
 | 
									SPA_FORMAT_AUDIO_channels, SPA_POD_CHOICE_RANGE_Int(
 | 
				
			||||||
					DEFAULT_CHANNELS, 1, SPA_AUDIO_MAX_CHANNELS));
 | 
										DEFAULT_CHANNELS, 1, SPA_AUDIO_MAX_CHANNELS),
 | 
				
			||||||
 | 
									0);
 | 
				
			||||||
 | 
								*param = spa_pod_builder_pop(builder, &f[0]);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
| 
						 | 
					@ -2205,7 +2215,7 @@ static int port_set_format(void *object,
 | 
				
			||||||
				return res;
 | 
									return res;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (info.info.raw.format == 0 ||
 | 
								if (info.info.raw.format == 0 ||
 | 
				
			||||||
			    info.info.raw.rate == 0 ||
 | 
								    (!this->props.resample_disabled && info.info.raw.rate == 0) ||
 | 
				
			||||||
			    info.info.raw.channels == 0 ||
 | 
								    info.info.raw.channels == 0 ||
 | 
				
			||||||
			    info.info.raw.channels > SPA_AUDIO_MAX_CHANNELS) {
 | 
								    info.info.raw.channels > SPA_AUDIO_MAX_CHANNELS) {
 | 
				
			||||||
				spa_log_error(this->log, "invalid format:%d rate:%d channels:%d",
 | 
									spa_log_error(this->log, "invalid format:%d rate:%d channels:%d",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -519,6 +519,8 @@ int format_parse_param(const struct spa_pod *param, bool collect,
 | 
				
			||||||
			if (ss != NULL)
 | 
								if (ss != NULL)
 | 
				
			||||||
				*ss = *def_ss;
 | 
									*ss = *def_ss;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 | 
								if (info.info.raw.rate == 0)
 | 
				
			||||||
 | 
									info.info.raw.rate = 48000;
 | 
				
			||||||
			if (info.info.raw.format == 0 ||
 | 
								if (info.info.raw.format == 0 ||
 | 
				
			||||||
			    info.info.raw.rate == 0 ||
 | 
								    info.info.raw.rate == 0 ||
 | 
				
			||||||
			    info.info.raw.channels == 0 ||
 | 
								    info.info.raw.channels == 0 ||
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue