Commit 9358bbf1 authored by Stefan Westerfeld's avatar Stefan Westerfeld

HLSOutputStream: auto close stream in destructor if necessary

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent ff5f8c27
......@@ -53,6 +53,11 @@ HLSOutputStream::HLSOutputStream (int n_channels, int sample_rate, int bit_depth
{
}
HLSOutputStream::~HLSOutputStream()
{
close();
}
/* Add an output stream. */
Error
HLSOutputStream::add_stream (AVCodec **codec, enum AVCodecID codec_id)
......@@ -320,6 +325,8 @@ HLSOutputStream::close_stream()
Error
HLSOutputStream::open (const string& out_filename, size_t cut_aac_frames, size_t keep_aac_frames, double pts_start, size_t delete_input_start)
{
assert (m_state == State::NEW);
avformat_alloc_output_context2 (&m_fmt_ctx, NULL, "mpegts", NULL);
if (!m_fmt_ctx)
return Error ("failed to alloc avformat output context");
......@@ -359,12 +366,19 @@ HLSOutputStream::open (const string& out_filename, size_t cut_aac_frames, size_t
m_start_pos = pts_start * m_sample_rate - cut_aac_frames * 1024;
m_start_pos += 1024;
m_state = State::OPEN;
return Error::Code::NONE;
}
Error
HLSOutputStream::close()
{
if (m_state != State::OPEN)
return Error::Code::NONE;
// never close twice
m_state = State::CLOSED;
Error err;
while (write_audio_frame (err) == 0);
if (err)
......
......@@ -89,6 +89,13 @@ class HLSOutputStream : public AudioOutputStream {
AudioBuffer m_audio_buffer;
size_t m_delete_input_start = 0;
enum class State {
NEW,
OPEN,
CLOSED
};
State m_state = State::NEW;
Error add_stream (AVCodec **codec, enum AVCodecID codec_id);
Error open_audio (AVCodec *codec, AVDictionary *opt_arg);
AVFrame *get_audio_frame();
......@@ -98,6 +105,7 @@ class HLSOutputStream : public AudioOutputStream {
int write_frame (const AVRational *time_base, AVStream *st, AVPacket *pkt);
public:
HLSOutputStream (int n_channels, int sample_rate, int bit_depth);
~HLSOutputStream();
Error open (const std::string& output_filename, size_t cut_aac_frames, size_t keep_aac_frames, double pts_start, size_t delete_input_start);
int bit_depth() const override;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment