Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / libvpx / source / libvpx / third_party / libwebm / mkvwriter.cpp
1 // Copyright (c) 2012 The WebM project authors. All Rights Reserved.
2 //
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the LICENSE file in the root of the source
5 // tree. An additional intellectual property rights grant can be found
6 // in the file PATENTS.  All contributing project authors may
7 // be found in the AUTHORS file in the root of the source tree.
8
9 #include "mkvwriter.hpp"
10
11 #ifdef _MSC_VER
12 #include <share.h>  // for _SH_DENYWR
13 #endif
14
15 #include <new>
16
17 namespace mkvmuxer {
18
19 MkvWriter::MkvWriter() : file_(NULL), writer_owns_file_(true) {}
20
21 MkvWriter::MkvWriter(FILE* fp) : file_(fp), writer_owns_file_(false) {}
22
23 MkvWriter::~MkvWriter() { Close(); }
24
25 int32 MkvWriter::Write(const void* buffer, uint32 length) {
26   if (!file_)
27     return -1;
28
29   if (length == 0)
30     return 0;
31
32   if (buffer == NULL)
33     return -1;
34
35   const size_t bytes_written = fwrite(buffer, 1, length, file_);
36
37   return (bytes_written == length) ? 0 : -1;
38 }
39
40 bool MkvWriter::Open(const char* filename) {
41   if (filename == NULL)
42     return false;
43
44   if (file_)
45     return false;
46
47 #ifdef _MSC_VER
48   file_ = _fsopen(filename, "wb", _SH_DENYWR);
49 #else
50   file_ = fopen(filename, "wb");
51 #endif
52   if (file_ == NULL)
53     return false;
54   return true;
55 }
56
57 void MkvWriter::Close() {
58   if (file_ && writer_owns_file_) {
59     fclose(file_);
60   }
61   file_ = NULL;
62 }
63
64 int64 MkvWriter::Position() const {
65   if (!file_)
66     return 0;
67
68 #ifdef _MSC_VER
69   return _ftelli64(file_);
70 #else
71   return ftell(file_);
72 #endif
73 }
74
75 int32 MkvWriter::Position(int64 position) {
76   if (!file_)
77     return -1;
78
79 #ifdef _MSC_VER
80   return _fseeki64(file_, position, SEEK_SET);
81 #else
82   return fseek(file_, position, SEEK_SET);
83 #endif
84 }
85
86 bool MkvWriter::Seekable() const { return true; }
87
88 void MkvWriter::ElementStartNotify(uint64, int64) {}
89
90 }  // namespace mkvmuxer