aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcm_convert.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-11-12include config.h in all sourcesMax Kellermann1-0/+1
After we've been hit by Large File Support problems several times in the past week (which only occur on 32 bit platforms, which I don't have), this is yet another attempt to fix the issue.
2009-07-23pcm_convert: use GError for error handlingMax Kellermann1-32/+77
Don't abort the whole MPD process when the conversion fails. This has been a denial-of-service attack vector for years.
2009-07-22pcm_byteswap: converted NULL checks to assertionsMax Kellermann1-6/+3
It is illegal to pass a NULL buffer to pcm_byteswap_X(). The result of this is that pcm_byteswap_X() never returns NULL.
2009-07-22pcm_convert: added pcm_convert_state.byteswap_bufferMax Kellermann1-3/+5
Currently, byteswapping is performed on the format_buffer. This can go wrong when this buffer is used twice during one run. Add a separate buffer for swapping the byte order.
2009-07-19Add reverse_endian field to struct audio_format and handle conversionDavid Woodhouse1-0/+19
2009-03-14pcm_convert: return NULL on failureMax Kellermann1-1/+1
Changed "0" to "NULL".
2009-03-13all: Update copyright header.Avuton Olrich1-3/+4
This updates the copyright header to all be the same, which is pretty much an update of where to mail request for a copy of the GPL and the years of the MPD project. This also puts all committers under 'The Music Player Project' umbrella. These entries should go individually in the AUTHORS file, for consistancy.
2009-03-02pcm_convert: added 32 bit supportMax Kellermann1-0/+42
All PCM sub libraries have 32 bit support now. Add support to the glue function pcm_convert().
2009-02-17pcm_convert: removed pcm_convert_size()Max Kellermann1-17/+0
The function is unused, since we added the pcm_buffer library.
2009-01-17pcm_convert: return PCM buffer from pcm_convert()Max Kellermann1-29/+27
Removed yet another superfluous buffer layer: return the PCM buffer from pcm_convert() instead of copying PCM data into the caller-supplied buffer.
2009-01-15log, pcm_convert: added return statements after g_error()Max Kellermann1-0/+1
gcc doesn't know that g_error() never returns. Work around the gcc warning.
2009-01-15pcm_convert: removed unused variable "dest_size"Max Kellermann1-4/+2
dest_size is only used in an assertion. Remove its declaration and move the formula into the assertion.
2009-01-08pcm_resample: use pcm_buffer (1/2)Max Kellermann1-16/+14
Return a temporary buffer from pcm_resample_*() and pcm_convert().
2009-01-07pcm_channels: use pcm_bufferMax Kellermann1-2/+6
Replace a "static" buffer with the PCM buffer library.
2009-01-07pcm_format: use the pcm_buffer libraryMax Kellermann1-3/+8
Replace a "static" buffer with the PCM buffer library.
2009-01-07pcm: added pcm_convert_deinit(), pcm_resample_deinit()Max Kellermann1-0/+5
Free memory allocated by libsamplerate when the output or the decoder is closed.
2009-01-07pcm: pass void pointers to PCM functionsMax Kellermann1-5/+4
In generic PCM functions allowing all sample formats, pass a void pointer instead of a char pointer.
2009-01-07pcm_utils: moved conversion code to pcm_convert.cMax Kellermann1-5/+4
All what's left in pcm_utils.h is the pcm_range() utility function, which is only used internally by pcm_volume and pcm_mix.
2009-01-07pcm_format: pass struct pcm_dither_24 to pcm_convert_to_16()Max Kellermann1-1/+1
The function does not need the full pcm_convert_state struct.
2009-01-07pcm_utils: moved code to pcm_format.cMax Kellermann1-126/+1
Moved all code which converts the sample format to a separate library.
2009-01-07pcm_utils: moved code to pcm_mix.cMax Kellermann1-89/+0
Moved the software mixing code (used by crossfading) to a separate library.
2009-01-07pcm_utils: moved code to pcm_volume.cMax Kellermann1-86/+1
Moved the software volume code to a separate library.
2009-01-07pcm_utils: export pcm_range()Max Kellermann1-14/+0
We are going to split the pcm_utils.c library, and pcm_range() will be useful for several sub libraries.
2009-01-03pcm: use GLib instead of utils.hMax Kellermann1-9/+8
2009-01-03pcm_utils: use the custom PRNG for volume ditheringMax Kellermann1-1/+7
Don't use libc's rand() function, because it is slow. Our own trivial linear congruential generator is good enough for dithering.
2008-12-29pcm: use GLib loggingMax Kellermann1-7/+9
2008-12-24pcm_utils: check pcm_convert()==0Max Kellermann1-4/+0
It is illegal to pass an empty audio buffer around. pcm_resample() sometimes seems to result in 0 samples, maybe related to libsamplerate. To work around that problem, add special checks after both pcm_convert() invocations. Removed the pcm_resample()==0 checks from pcm_convert().
2008-12-08pcm_utils: always round up resampling buffer sizeMax Kellermann1-1/+1
libsamplerate produces cracks in the sound output when the destination buffer is too small. This is the case when pcm_convert_size() rounds down. Use ceil(x) instead of floor(0.5+x) there to prevent a buffer overrun.
2008-12-02replaced mpd_likely/mpd_unlikely by G_LIKELY/G_UNLIKELYThomas Jansen1-2/+3
We want to remove gcc.h eventually. This takes care of all the G_LIKELY/G_UNLIKELY macros.
2008-11-11pcm_utils: allow volume levels greater than 100% in pcm_volume()Max Kellermann1-1/+1
Allow pcm_volume() to increase volume.
2008-11-11pcm_volume: added constant PCM_VOLUME_1Max Kellermann1-10/+13
It may be desirable to change the range of integer volume levels (e.g. to 1024, which may utilize shifts instead of expensive integer divisions). Introduce the constant PCM_VOLUME_1 which describes the integer value for "100% volume". This is currently 1000.
2008-10-23pcm_utils: added 24 bit conversion functionsMax Kellermann1-0/+108
24 bit output is as important as 16 bit output. Provide a pcm_convert() implementation which can convert to 24 bit with as little quality loss as possible.
2008-10-23pcm_utils: generic pcm_convert_size() implementationMax Kellermann1-21/+2
The old pcm_convert_size() ignored most of the destination format, e.g. it did not check its sample size, and assumed it is 16 bit. Simplify and universalize it by using audio_format_frame_size().
2008-10-23pcm_utils: moved code to pcm_convert_16()Max Kellermann1-21/+39
pcm_convert() converted only to 16 bit. To be able to support other sample sizes, move that 16 bit specific code to a separate function.
2008-10-23pcm_utils: moved channel conversion functions to pcm_channels.cMax Kellermann1-82/+4
Separate code from pcm_utils.c to keep it small and simple.
2008-10-23pcm_utils: moved code to pcm_resample.cMax Kellermann1-162/+6
Separate the resampling code from the rest of pcm_utils.c. Create two sub-libraries: pcm_resample_libsamplerate.c and pcm_resample_fallback.c.
2008-10-23pcm_dither: added generic 24 to 16 bit ditheringMax Kellermann1-8/+10
Copied and adapted code from the mp3 decoder plugin. This library now replaces the old and low-quality function pcm_convert_24_to_16().
2008-10-23output_buffer: don't split framesMax Kellermann1-0/+3
Splitting a frame between two buffer chunks causes distortion in the output. MPD used to assume that the chunk size 1020 would never cause splitted frames, but that isn't the case for 24 bit stereo (127.5 frames), and even less for files with even more channels.
2008-10-21pcm_utils: added pcm_convert_init()Max Kellermann1-0/+5
Instead of manually calling memset(0) on the pcm_convert_state struct, client code should use a library function from pcm_utils.c. This way, we can change the semantics of the struct easily.
2008-10-21pcm_utils: no CamelCaseMax Kellermann1-64/+63
Renamed all functions which were still in CamelCase.
2008-10-21pcm_utils: renamed ConvState to struct pcm_convert_stateMax Kellermann1-3/+5
No CamelCase, and a struct instead of a typedef.
2008-10-12pcm_utils: support any number of channels in pcm_sizeOfConvBuffer()Max Kellermann1-11/+2
When calculating the conversion buffer size, don't hard-code the formulas for only mono<->stereo.
2008-10-12pcm_utils: support converting N channels to stereoMax Kellermann1-0/+26
Convert any number of channels to stereo. In fact, this isn't really stereo, it's rater mono blown up to stereo. This patch should only make it possible to play 5.1 files at all; "real" conversion to stereo should be implemented, but for now, this is better than nothing.
2008-10-12pcm_utils: pass output channel count to pcm_convertChannels()Max Kellermann1-35/+22
In order to be able to deal with non-trivial conversions, pcm_convertChannels() needs to know both the input and the output channel count. Simplify buffer allocation in that function.
2008-10-12pcm_utils: moved code from pcm_convertChannels() to separate functionsMax Kellermann1-20/+32
Moved code from pcm_convertChannels() to pcm_convert_channels_1_to_2() and pcm_convert_channels_2_to_1(). Improved the quality of pcm_convert_channels_2_to_1() by calculating the arithmetic mean value of both samples.
2008-10-12pcm_utils: pass int16_t* where appropriateMax Kellermann1-12/+15
Pass int16_t pointers instead of char pointers to functions which can deal with 16 bit audio only.
2008-10-10audio_format: renamed sampleRate to sample_rateMax Kellermann1-5/+5
The last bit of CamelCase in audio_format.h. Additionally, rename a bunch of local variables.
2008-10-10audio_format: unsigned integersMax Kellermann1-3/+3
"bits" and "channels" cannot be negative.
2008-10-09pcm: fix const flac in pcm_convertSampleRate()Max Kellermann1-1/+1
In the libsamplerate fallback code, a "const" attribute was missing.
2008-10-09pcm: fixed software volume, broken by unsigned integerMax Kellermann1-6/+3
"volume" was passed as an unsigned integer, which is correct. It's just that when it was multiplied with the sample value, the whole operation was changed to unsigned, breaking the algorithm (and Qball's ears). Internally change "volume" to signed.