VirtualBox

source: vbox/trunk/src/VBox/Main/include/EBMLWriter.h@ 93406

Last change on this file since 93406 was 93115, checked in by vboxsync, 3 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property svn:mergeinfo set to (toggle deleted branches)
    /branches/VBox-3.0/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h58652,​70973
    /branches/VBox-3.2/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h66309,​66318
    /branches/VBox-4.0/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h70873
    /branches/VBox-4.1/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h74233
    /branches/VBox-4.2/src/VBox/Main/src-client/EbmlWriter.h91503-91504,​91506-91508,​91510,​91514-91515,​91521
    /branches/VBox-4.3/src/VBox/Main/src-client/EbmlWriter.h91223
    /branches/VBox-4.3/trunk/src/VBox/Main/src-client/EbmlWriter.h91223
    /branches/dsen/gui/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h79076-79078,​79089,​79109-79110,​79112-79113,​79127-79130,​79134,​79141,​79151,​79155,​79157-79159,​79193,​79197
    /branches/dsen/gui2/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h79224,​79228,​79233,​79235,​79258,​79262-79263,​79273,​79341,​79345,​79354,​79357,​79387-79388,​79559-79569,​79572-79573,​79578,​79581-79582,​79590-79591,​79598-79599,​79602-79603,​79605-79606,​79632,​79635,​79637,​79644
    /branches/dsen/gui3/src/VBox/Frontends/VBoxHeadless/VideoCapture/EbmlWriter.h79645-79692
File size: 3.1 KB
Line 
1/* $Id: EBMLWriter.h 93115 2022-01-01 11:31:46Z vboxsync $ */
2/** @file
3 * EBMLWriter.h - EBML writer.
4 */
5
6/*
7 * Copyright (C) 2013-2022 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef MAIN_INCLUDED_EBMLWriter_h
19#define MAIN_INCLUDED_EBMLWriter_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <stack>
25
26#include <iprt/critsect.h>
27#include <iprt/file.h>
28
29#include <VBox/com/string.h>
30
31
32/** No flags set. */
33#define VBOX_EBMLWRITER_FLAG_NONE 0
34/** The file handle was inherited. */
35#define VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED RT_BIT(0)
36
37class EBMLWriter
38{
39public:
40 typedef uint32_t EbmlClassId;
41
42private:
43
44 struct EbmlSubElement
45 {
46 uint64_t offset;
47 EbmlClassId classId;
48 EbmlSubElement(uint64_t offs, EbmlClassId cid) : offset(offs), classId(cid) {}
49 };
50
51 /** Stack of EBML sub elements. */
52 std::stack<EbmlSubElement> m_Elements;
53 /** The file's handle. */
54 RTFILE m_hFile;
55 /** The file's name (path). */
56 com::Utf8Str m_strFile;
57 /** Flags. */
58 uint32_t m_fFlags;
59
60public:
61
62 EBMLWriter(void)
63 : m_hFile(NIL_RTFILE)
64 , m_fFlags(VBOX_EBMLWRITER_FLAG_NONE) { }
65
66 virtual ~EBMLWriter(void) { close(); }
67
68public:
69
70 int createEx(const char *a_pszFile, PRTFILE phFile);
71
72 int create(const char *a_pszFile, uint64_t fOpen);
73
74 void close(void);
75
76 /** Returns the file name. */
77 const com::Utf8Str& getFileName(void) { return m_strFile; }
78
79 /** Returns file size. */
80 uint64_t getFileSize(void) { return RTFileTell(m_hFile); }
81
82 /** Get reference to file descriptor */
83 inline const RTFILE &getFile(void) { return m_hFile; }
84
85 /** Returns available space on storage. */
86 uint64_t getAvailableSpace(void);
87
88 /**
89 * Returns whether the file is open or not.
90 *
91 * @returns True if open, false if not.
92 */
93 bool isOpen(void) { return RTFileIsValid(m_hFile); }
94
95public:
96
97 EBMLWriter &subStart(EbmlClassId classId);
98
99 EBMLWriter &subEnd(EbmlClassId classId);
100
101 EBMLWriter &serializeString(EbmlClassId classId, const char *str);
102
103 EBMLWriter &serializeUnsignedInteger(EbmlClassId classId, uint64_t parm, size_t size = 0);
104
105 EBMLWriter &serializeFloat(EbmlClassId classId, float value);
106
107 EBMLWriter &serializeData(EbmlClassId classId, const void *pvData, size_t cbData);
108
109 int write(const void *data, size_t size);
110
111 void writeUnsignedInteger(uint64_t value, size_t size = sizeof(uint64_t));
112
113 void writeClassId(EbmlClassId parm);
114
115 void writeSize(uint64_t parm);
116
117 static inline size_t getSizeOfUInt(uint64_t arg);
118
119private:
120
121 void operator=(const EBMLWriter &);
122};
123
124#endif /* !MAIN_INCLUDED_EBMLWriter_h */
125
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette