Commit 068de7cf authored by Max Kellermann's avatar Max Kellermann

encoder/ogg: use class OggStreamState

parent d04eb87c
......@@ -22,7 +22,8 @@
#include "config.h"
#include "../EncoderAPI.hxx"
#include "lib/xiph/OggStream.hxx"
#include "lib/xiph/OggStreamState.hxx"
#include "lib/xiph/OggPage.hxx"
#include "lib/xiph/OggSerial.hxx"
#include <ogg/ogg.h>
......@@ -32,27 +33,44 @@
* with Ogg container output.
*/
class OggEncoder : public Encoder {
/* initialize "flush" to true, so the caller gets the full
headers on the first read */
bool flush = true;
protected:
OggStream stream;
OggStreamState stream;
public:
OggEncoder(bool _implements_tag)
:Encoder(_implements_tag) {
stream.Initialize(GenerateOggSerial());
}
~OggEncoder() override {
stream.Deinitialize();
:Encoder(_implements_tag),
stream(GenerateOggSerial()) {
}
/* virtual methods from class Encoder */
bool Flush(Error &) override {
stream.Flush();
Flush();
return true;
}
size_t Read(void *dest, size_t length) override {
return stream.PageOut(dest, length);
ogg_page page;
bool success = stream.PageOut(page);
if (!success) {
if (flush) {
flush = false;
success = stream.Flush(page);
}
if (!success)
return 0;
}
return ReadPage(page, dest, length);
}
protected:
void Flush() {
flush = true;
}
};
......
......@@ -244,7 +244,7 @@ OpusEncoder::DoEncode(bool eos, Error &error)
bool
OpusEncoder::End(Error &error)
{
stream.Flush();
Flush();
memset(buffer + buffer_position, 0,
buffer_size - buffer_position);
......@@ -331,7 +331,7 @@ OpusEncoder::GenerateHead()
packet.granulepos = 0;
packet.packetno = packetno++;
stream.PacketIn(packet);
stream.Flush();
Flush();
}
void
......@@ -355,7 +355,7 @@ OpusEncoder::GenerateTags()
packet.granulepos = 0;
packet.packetno = packetno++;
stream.PacketIn(packet);
stream.Flush();
Flush();
free(comments);
}
......
......@@ -244,7 +244,7 @@ VorbisEncoder::PreTag(gcc_unused Error &error)
vorbis_analysis_init(&vd, &vi);
vorbis_block_init(&vd, &vb);
stream.Flush();
Flush();
return true;
}
......
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