mkvmuxer: Add element start notification.

Just before the first byte of an element identifier is written
the muxer calls IMkvWriter::ElementStartNotify to report the
position of the element in the WebM stream.

Change-Id: Iac40090587bd9496b05f41203aace00902f5606e
This commit is contained in:
Tom Finegan 2012-01-19 16:37:11 -05:00
parent 01d5924817
commit 1e37a264f1
4 changed files with 13 additions and 0 deletions

View File

@ -35,6 +35,13 @@ class IMkvWriter {
// Returns true if the writer is seekable. // Returns true if the writer is seekable.
virtual bool Seekable() const = 0; virtual bool Seekable() const = 0;
// Element start notification. Called whenever an element identifier is about
// to be written to the stream. |element_id| is the element identifier, and
// |position| is the location in the WebM stream where the first octet of the
// element identifier will be written.
// Note: the |MkvId| enumeration in webmids.hpp defines element values.
virtual void ElementStartNotify(uint64 element_id, int64 position) = 0;
protected: protected:
IMkvWriter(); IMkvWriter();
virtual ~IMkvWriter(); virtual ~IMkvWriter();

View File

@ -213,6 +213,8 @@ int32 WriteID(IMkvWriter* writer, uint64 type) {
if (!writer) if (!writer)
return -1; return -1;
writer->ElementStartNotify(type, writer->Position());
const int32 size = GetUIntSize(type); const int32 size = GetUIntSize(type);
return SerializeInt(writer, type, size); return SerializeInt(writer, type, size);

View File

@ -88,4 +88,7 @@ bool MkvWriter::Seekable() const {
return true; return true;
} }
void MkvWriter::ElementStartNotify(uint64, int64) {
}
} // namespace mkvmuxer } // namespace mkvmuxer

View File

@ -26,6 +26,7 @@ class MkvWriter : public IMkvWriter {
virtual int64 Position() const; virtual int64 Position() const;
virtual int32 Position(int64 position); virtual int32 Position(int64 position);
virtual bool Seekable() const; virtual bool Seekable() const;
virtual void ElementStartNotify(uint64 element_id, int64 position);
virtual int32 Write(const void* buffer, uint32 length); virtual int32 Write(const void* buffer, uint32 length);
// Creates and opens a file for writing. |filename| is the name of the file // Creates and opens a file for writing. |filename| is the name of the file