| 167 | } |
| 168 | |
| 169 | void |
| 170 | WaveEncoder::Write(std::span<const std::byte> src) |
| 171 | { |
| 172 | std::size_t length = src.size(); |
| 173 | std::byte *dst = buffer.Write(length); |
| 174 | |
| 175 | if (IsLittleEndian()) { |
| 176 | switch (bits) { |
| 177 | case 8: |
| 178 | case 16: |
| 179 | case 32:// optimized cases |
| 180 | memcpy(dst, src.data(), length); |
| 181 | break; |
| 182 | case 24: |
| 183 | length = pcm24_to_wave((uint8_t *)dst, |
| 184 | (const uint32_t *)(const void *)src.data(), |
| 185 | length); |
| 186 | break; |
| 187 | } |
| 188 | } else { |
| 189 | switch (bits) { |
| 190 | case 8: |
| 191 | memcpy(dst, src.data(), length); |
| 192 | break; |
| 193 | case 16: |
| 194 | length = pcm16_to_wave((uint16_t *)dst, |
| 195 | (const uint16_t *)(const void *)src.data(), |
| 196 | length); |
| 197 | break; |
| 198 | case 24: |
| 199 | length = pcm24_to_wave((uint8_t *)dst, |
| 200 | (const uint32_t *)(const void *)src.data(), |
| 201 | length); |
| 202 | break; |
| 203 | case 32: |
| 204 | length = pcm32_to_wave((uint32_t *)dst, |
| 205 | (const uint32_t *)(const void *)src.data(), |
| 206 | length); |
| 207 | break; |
| 208 | } |
| 209 | } |
| 210 | |
| 211 | buffer.Append(length); |
| 212 | } |
| 213 | |
| 214 | const EncoderPlugin wave_encoder_plugin = { |
| 215 | "wave", |
no test coverage detected