Updated WAV output to use Util::ResizeablePointer
This commit is contained in:
parent
dc8bae8dd3
commit
7da1bf241e
1 changed files with 14 additions and 23 deletions
|
@ -1,5 +1,6 @@
|
|||
#include "output_wav.h"
|
||||
#include <mist/riff.h>
|
||||
#include <mist/util.h>
|
||||
|
||||
namespace Mist{
|
||||
OutWAV::OutWAV(Socket::Connection &conn) : HTTPOutput(conn){
|
||||
|
@ -62,35 +63,25 @@ namespace Mist{
|
|||
thisPacket.getString("data", dataPointer, len);
|
||||
|
||||
//PCM must be converted to little-endian if > 8 bits per sample
|
||||
static char * swappyPointer = 0;
|
||||
static uint32_t swappySize = 0;
|
||||
static Util::ResizeablePointer swappy;
|
||||
DTSC::Track & trk = myMeta.tracks[thisPacket.getTrackId()];
|
||||
if (trk.codec == "PCM"){
|
||||
if (trk.size > 8){
|
||||
if (swappySize < len){
|
||||
char * tmp = (char*)realloc(swappyPointer, len);
|
||||
if (!tmp){
|
||||
FAIL_MSG("Could not allocate data for PCM endianness swap!");
|
||||
return;
|
||||
}
|
||||
swappyPointer = tmp;
|
||||
swappySize = len;
|
||||
}
|
||||
}
|
||||
if (trk.size > 8 && swappy.allocate(len)){
|
||||
if (trk.size == 16){
|
||||
for (uint32_t i = 0; i < len; i+=2){
|
||||
swappyPointer[i] = dataPointer[i+1];
|
||||
swappyPointer[i+1] = dataPointer[i];
|
||||
swappy[i] = dataPointer[i+1];
|
||||
swappy[i+1] = dataPointer[i];
|
||||
}
|
||||
}
|
||||
if (trk.size == 24){
|
||||
for (uint32_t i = 0; i < len; i+=3){
|
||||
swappyPointer[i] = dataPointer[i+2];
|
||||
swappyPointer[i+1] = dataPointer[i+1];
|
||||
swappyPointer[i+2] = dataPointer[i];
|
||||
swappy[i] = dataPointer[i+2];
|
||||
swappy[i+1] = dataPointer[i+1];
|
||||
swappy[i+2] = dataPointer[i];
|
||||
}
|
||||
}
|
||||
dataPointer = swappyPointer;
|
||||
dataPointer = swappy;
|
||||
}
|
||||
}
|
||||
|
||||
myConn.SendNow(dataPointer, len);
|
||||
|
|
Loading…
Add table
Reference in a new issue