SDL_Main isn't needed on sane platforms anyway. Remove it
[jpcrr.git] / streamtools / output-drv-rawaudio.cpp
blobcf7ccf19c7f09fee456103c69586bf579d94987a
1 #include "output-drv.hpp"
2 #include <iostream>
3 #include <fstream>
4 #include <stdexcept>
5 #include <string>
7 namespace
9 class output_driver_rawaudio : public output_driver
11 public:
12 output_driver_rawaudio(const std::string& filename)
14 if(filename != "-")
15 out = new std::ofstream(filename.c_str(), std::ios_base::binary);
16 else
17 out = &std::cout;
18 if(!*out)
19 throw std::runtime_error("Unable to open output file");
20 set_audio_callback<output_driver_rawaudio>(*this, &output_driver_rawaudio::audio_callback);
23 ~output_driver_rawaudio()
25 if(out != &std::cout)
26 delete out;
29 void ready()
33 void audio_callback(short left, short right)
35 uint8_t rawdata[4];
36 rawdata[1] = ((unsigned short)left >> 8) & 0xFF;
37 rawdata[0] = ((unsigned short)left) & 0xFF;
38 rawdata[3] = ((unsigned short)right >> 8) & 0xFF;
39 rawdata[2] = ((unsigned short)right) & 0xFF;
40 out->write((const char*)rawdata, 4);
41 if(!*out)
42 throw std::runtime_error("Error writing frame to file");
44 private:
45 std::ostream* out;
48 class output_driver_rawaudio_factory : output_driver_factory
50 public:
51 output_driver_rawaudio_factory()
52 : output_driver_factory("rawaudio")
56 output_driver& make(const std::string& type, const std::string& name, const std::string& parameters)
58 if(parameters != "")
59 throw std::runtime_error("rawaudio output does not take parameters");
60 return *new output_driver_rawaudio(name);
62 } factory;