xref: /aosp_15_r20/external/libwebm/mkvmuxer/mkvwriter.h (revision 103e46e4cd4b6efcf6001f23fa8665fb110abf8d)
1*103e46e4SHarish Mahendrakar // Copyright (c) 2012 The WebM project authors. All Rights Reserved.
2*103e46e4SHarish Mahendrakar //
3*103e46e4SHarish Mahendrakar // Use of this source code is governed by a BSD-style license
4*103e46e4SHarish Mahendrakar // that can be found in the LICENSE file in the root of the source
5*103e46e4SHarish Mahendrakar // tree. An additional intellectual property rights grant can be found
6*103e46e4SHarish Mahendrakar // in the file PATENTS.  All contributing project authors may
7*103e46e4SHarish Mahendrakar // be found in the AUTHORS file in the root of the source tree.
8*103e46e4SHarish Mahendrakar 
9*103e46e4SHarish Mahendrakar #ifndef MKVMUXER_MKVWRITER_H_
10*103e46e4SHarish Mahendrakar #define MKVMUXER_MKVWRITER_H_
11*103e46e4SHarish Mahendrakar 
12*103e46e4SHarish Mahendrakar #include <stdio.h>
13*103e46e4SHarish Mahendrakar 
14*103e46e4SHarish Mahendrakar #include "mkvmuxer/mkvmuxer.h"
15*103e46e4SHarish Mahendrakar #include "mkvmuxer/mkvmuxertypes.h"
16*103e46e4SHarish Mahendrakar 
17*103e46e4SHarish Mahendrakar namespace mkvmuxer {
18*103e46e4SHarish Mahendrakar 
19*103e46e4SHarish Mahendrakar // Default implementation of the IMkvWriter interface on Windows.
20*103e46e4SHarish Mahendrakar class MkvWriter : public IMkvWriter {
21*103e46e4SHarish Mahendrakar  public:
22*103e46e4SHarish Mahendrakar   MkvWriter();
23*103e46e4SHarish Mahendrakar   explicit MkvWriter(FILE* fp);
24*103e46e4SHarish Mahendrakar   virtual ~MkvWriter();
25*103e46e4SHarish Mahendrakar 
26*103e46e4SHarish Mahendrakar   // IMkvWriter interface
27*103e46e4SHarish Mahendrakar   virtual int64 Position() const;
28*103e46e4SHarish Mahendrakar   virtual int32 Position(int64 position);
29*103e46e4SHarish Mahendrakar   virtual bool Seekable() const;
30*103e46e4SHarish Mahendrakar   virtual int32 Write(const void* buffer, uint32 length);
31*103e46e4SHarish Mahendrakar   virtual void ElementStartNotify(uint64 element_id, int64 position);
32*103e46e4SHarish Mahendrakar 
33*103e46e4SHarish Mahendrakar   // Creates and opens a file for writing. |filename| is the name of the file
34*103e46e4SHarish Mahendrakar   // to open. This function will overwrite the contents of |filename|. Returns
35*103e46e4SHarish Mahendrakar   // true on success.
36*103e46e4SHarish Mahendrakar   bool Open(const char* filename);
37*103e46e4SHarish Mahendrakar 
38*103e46e4SHarish Mahendrakar   // Closes an opened file.
39*103e46e4SHarish Mahendrakar   void Close();
40*103e46e4SHarish Mahendrakar 
41*103e46e4SHarish Mahendrakar  private:
42*103e46e4SHarish Mahendrakar   // File handle to output file.
43*103e46e4SHarish Mahendrakar   FILE* file_;
44*103e46e4SHarish Mahendrakar   bool writer_owns_file_;
45*103e46e4SHarish Mahendrakar 
46*103e46e4SHarish Mahendrakar   LIBWEBM_DISALLOW_COPY_AND_ASSIGN(MkvWriter);
47*103e46e4SHarish Mahendrakar };
48*103e46e4SHarish Mahendrakar 
49*103e46e4SHarish Mahendrakar }  // namespace mkvmuxer
50*103e46e4SHarish Mahendrakar 
51*103e46e4SHarish Mahendrakar #endif  // MKVMUXER_MKVWRITER_H_
52