Mercurial > mplayer.hg
changeset 3373:e5b881ac961e
Corrected front:surround levels
author | steve |
---|---|
date | Fri, 07 Dec 2001 22:36:33 +0000 |
parents | 0704cb60a223 |
children | c49a9b272c44 |
files | libao2/pl_surround.c |
diffstat | 1 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libao2/pl_surround.c Fri Dec 07 17:43:20 2001 +0000 +++ b/libao2/pl_surround.c Fri Dec 07 22:36:33 2001 +0000 @@ -155,9 +155,20 @@ out = pl_surround.databuf; in = (int16_t *)ao_plugin_data.data; for (i=0; i<samples; i++) { + + // About the .707 here and the /2 for surround: + // Surround encoding does the following: + // Lt=L+.707*C+.707*S, Rt=R+.707*C-.707*S + // So S needs to be extracted as: + // .707*(L-R) + // But L-R could still be as much as 32767-(-32768), way off scale + // for signed 16 bits, so to avoid running out of bits, whilst still + // keeping levels in balance, we scale L and R down by 3dB (*.707), + // and scale the surround down by 6dB (.707*.707=.5) + // front left and right - out[0] = in[0]; - out[1] = in[1]; + out[0] = in[0]*.707; + out[1] = in[1]*.707; // surround - from 15msec ago out[2] = pl_surround.delaybuf[pl_surround.delaybuf_ptr]; out[3] = -out[2];