output/recorder: move functions into the struct

This commit is contained in:
Max Kellermann 2014-12-26 14:57:29 +01:00
parent 2983c2a24f
commit a31129333c

View File

@ -66,6 +66,9 @@ struct RecorderOutput {
bool Configure(const config_param &param, Error &error); bool Configure(const config_param &param, Error &error);
bool Open(AudioFormat &audio_format, Error &error);
void Close();
bool WriteToFile(const void *data, size_t length, Error &error); bool WriteToFile(const void *data, size_t length, Error &error);
/** /**
@ -176,56 +179,68 @@ RecorderOutput::EncoderToFile(Error &error)
} }
} }
static bool inline bool
recorder_output_open(AudioOutput *ao, RecorderOutput::Open(AudioFormat &audio_format, Error &error)
AudioFormat &audio_format,
Error &error)
{ {
RecorderOutput *recorder = (RecorderOutput *)ao;
/* create the output file */ /* create the output file */
recorder->fd = open_cloexec(recorder->path, fd = open_cloexec(path,
O_CREAT|O_WRONLY|O_TRUNC|O_BINARY, O_CREAT|O_WRONLY|O_TRUNC|O_BINARY,
0666); 0666);
if (recorder->fd < 0) { if (fd < 0) {
error.FormatErrno("Failed to create '%s'", recorder->path); error.FormatErrno("Failed to create '%s'", path);
return false; return false;
} }
/* open the encoder */ /* open the encoder */
if (!encoder_open(recorder->encoder, audio_format, error)) { if (!encoder_open(encoder, audio_format, error)) {
close(recorder->fd); close(fd);
unlink(recorder->path); unlink(path);
return false; return false;
} }
if (!recorder->EncoderToFile(error)) { if (!EncoderToFile(error)) {
encoder_close(recorder->encoder); encoder_close(encoder);
close(recorder->fd); close(fd);
unlink(recorder->path); unlink(path);
return false; return false;
} }
return true; return true;
} }
static void static bool
recorder_output_close(AudioOutput *ao) recorder_output_open(AudioOutput *ao,
AudioFormat &audio_format,
Error &error)
{ {
RecorderOutput *recorder = (RecorderOutput *)ao; RecorderOutput &recorder = *(RecorderOutput *)ao;
return recorder.Open(audio_format, error);
}
inline void
RecorderOutput::Close()
{
/* flush the encoder and write the rest to the file */ /* flush the encoder and write the rest to the file */
if (encoder_end(recorder->encoder, IgnoreError())) if (encoder_end(encoder, IgnoreError()))
recorder->EncoderToFile(IgnoreError()); EncoderToFile(IgnoreError());
/* now really close everything */ /* now really close everything */
encoder_close(recorder->encoder); encoder_close(encoder);
close(recorder->fd); close(fd);
}
static void
recorder_output_close(AudioOutput *ao)
{
RecorderOutput &recorder = *(RecorderOutput *)ao;
recorder.Close();
} }
static size_t static size_t