You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.6 KiB
C++

// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright The Music Player Daemon Project
#pragma once
#include <cstddef> // for std::byte
#include <cstdint>
#include <span>
class PcmBuffer;
/**
* Changes the number of channels in 16 bit PCM data.
*
* @param buffer the destination pcm_buffer object
* @param dest_channels the number of channels requested
* @param src_channels the number of channels in the source buffer
* @param src the source PCM buffer
* @return the destination buffer
*/
std::span<const int16_t>
pcm_convert_channels_16(PcmBuffer &buffer,
unsigned dest_channels,
unsigned src_channels,
std::span<const int16_t> src) noexcept;
/**
* Changes the number of channels in 24 bit PCM data (aligned at 32
* bit boundaries).
*
* @param buffer the destination pcm_buffer object
* @param dest_channels the number of channels requested
* @param src_channels the number of channels in the source buffer
* @param src the source PCM buffer
* @return the destination buffer
*/
std::span<const int32_t>
pcm_convert_channels_24(PcmBuffer &buffer,
unsigned dest_channels,
unsigned src_channels,
std::span<const int32_t> src) noexcept;
/**
* Changes the number of channels in 32 bit PCM data.
*
* @param buffer the destination pcm_buffer object
* @param dest_channels the number of channels requested
* @param src_channels the number of channels in the source buffer
* @param src the source PCM buffer
* @return the destination buffer
*/
std::span<const int32_t>
pcm_convert_channels_32(PcmBuffer &buffer,
unsigned dest_channels,
unsigned src_channels,
std::span<const int32_t> src) noexcept;
/**
* Changes the number of channels in 32 bit float PCM data.
*
* @param buffer the destination pcm_buffer object
* @param dest_channels the number of channels requested
* @param src_channels the number of channels in the source buffer
* @param src the source PCM buffer
* @return the destination buffer
*/
std::span<const float>
pcm_convert_channels_float(PcmBuffer &buffer,
unsigned dest_channels,
unsigned src_channels,
std::span<const float> src) noexcept;
/**
* Changes the number of channels in DSD data.
*
* @param buffer the destination pcm_buffer object
* @param dest_channels the number of channels requested
* @param src_channels the number of channels in the source buffer
* @param src the source PCM buffer
* @return the destination buffer
*/
std::span<const std::byte>
pcm_convert_channels_dsd(PcmBuffer &buffer,
unsigned dest_channels,
unsigned src_channels,
std::span<const std::byte> src) noexcept;