mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	Fix wrong scales in linear volume calculation
Fixed wrong scales of dB values (TLV is 0.01dB unit) in the linear volume calculation.
This commit is contained in:
		
							parent
							
								
									70825bb7e6
								
							
						
					
					
						commit
						9d2518bb91
					
				
					 1 changed files with 5 additions and 5 deletions
				
			
		| 
						 | 
					@ -1091,8 +1091,8 @@ static int do_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
 | 
				
			||||||
					maxdb;
 | 
										maxdb;
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				/* FIXME: precalculate and cache these values */
 | 
									/* FIXME: precalculate and cache these values */
 | 
				
			||||||
				double lmin = pow(10.0, mindb/20.0);
 | 
									double lmin = pow(10.0, mindb/2000.0);
 | 
				
			||||||
				double lmax = pow(10.0, maxdb/20.0);
 | 
									double lmax = pow(10.0, maxdb/2000.0);
 | 
				
			||||||
				val = (lmax - lmin) * val + lmin;
 | 
									val = (lmax - lmin) * val + lmin;
 | 
				
			||||||
				*db_gain = (long)(100.0 * 20.0 * log10(val));
 | 
									*db_gain = (long)(100.0 * 20.0 * log10(val));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -1293,9 +1293,9 @@ static int do_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
 | 
				
			||||||
			/* FIXME: precalculate and cache vmin and vmax */
 | 
								/* FIXME: precalculate and cache vmin and vmax */
 | 
				
			||||||
			double vmin, vmax, v;
 | 
								double vmin, vmax, v;
 | 
				
			||||||
			vmin = (min <= SND_CTL_TLV_DB_GAIN_MUTE) ? 0.0 :
 | 
								vmin = (min <= SND_CTL_TLV_DB_GAIN_MUTE) ? 0.0 :
 | 
				
			||||||
				pow(10.0,  (double)min / 20.0);
 | 
									pow(10.0,  (double)min / 2000.0);
 | 
				
			||||||
			vmax = !max ? 1.0 : pow(10.0,  (double)max / 20.0);
 | 
								vmax = !max ? 1.0 : pow(10.0,  (double)max / 2000.0);
 | 
				
			||||||
			v = pow(10.0, (double)db_gain / 20.0);
 | 
								v = pow(10.0, (double)db_gain / 2000.0);
 | 
				
			||||||
			v = (v - vmin) * (rangemax - rangemin) / (vmax - vmin);
 | 
								v = (v - vmin) * (rangemax - rangemin) / (vmax - vmin);
 | 
				
			||||||
			if (xdir > 0)
 | 
								if (xdir > 0)
 | 
				
			||||||
				v = ceil(v);
 | 
									v = ceil(v);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue