
Wrapping mkvmuxer and mkvparser in the libwebm namespace is no longer necessary now that the tree reorganization is complete. Put mkvmuxer and mkvparser namespaces back in the global namespace to avoid unnecessary churn in downstream code. Change-Id: I13a4fe0143d20bb2bb6038078c68636ff2af0c29
89 lines
1.8 KiB
C++
89 lines
1.8 KiB
C++
// Copyright (c) 2012 The WebM project authors. All Rights Reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style license
|
|
// that can be found in the LICENSE file in the root of the source
|
|
// tree. An additional intellectual property rights grant can be found
|
|
// in the file PATENTS. All contributing project authors may
|
|
// be found in the AUTHORS file in the root of the source tree.
|
|
|
|
#include "mkvmuxer/mkvwriter.h"
|
|
|
|
#ifdef _MSC_VER
|
|
#include <share.h> // for _SH_DENYWR
|
|
#endif
|
|
|
|
namespace mkvmuxer {
|
|
|
|
MkvWriter::MkvWriter() : file_(NULL), writer_owns_file_(true) {}
|
|
|
|
MkvWriter::MkvWriter(FILE* fp) : file_(fp), writer_owns_file_(false) {}
|
|
|
|
MkvWriter::~MkvWriter() { Close(); }
|
|
|
|
int32_t MkvWriter::Write(const void* buffer, uint32_t length) {
|
|
if (!file_)
|
|
return -1;
|
|
|
|
if (length == 0)
|
|
return 0;
|
|
|
|
if (buffer == NULL)
|
|
return -1;
|
|
|
|
const size_t bytes_written = fwrite(buffer, 1, length, file_);
|
|
|
|
return (bytes_written == length) ? 0 : -1;
|
|
}
|
|
|
|
bool MkvWriter::Open(const char* filename) {
|
|
if (filename == NULL)
|
|
return false;
|
|
|
|
if (file_)
|
|
return false;
|
|
|
|
#ifdef _MSC_VER
|
|
file_ = _fsopen(filename, "wb", _SH_DENYWR);
|
|
#else
|
|
file_ = fopen(filename, "wb");
|
|
#endif
|
|
if (file_ == NULL)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
void MkvWriter::Close() {
|
|
if (file_ && writer_owns_file_) {
|
|
fclose(file_);
|
|
}
|
|
file_ = NULL;
|
|
}
|
|
|
|
int64_t MkvWriter::Position() const {
|
|
if (!file_)
|
|
return 0;
|
|
|
|
#ifdef _MSC_VER
|
|
return _ftelli64(file_);
|
|
#else
|
|
return ftell(file_);
|
|
#endif
|
|
}
|
|
|
|
int32_t MkvWriter::Position(int64_t position) {
|
|
if (!file_)
|
|
return -1;
|
|
|
|
#ifdef _MSC_VER
|
|
return _fseeki64(file_, position, SEEK_SET);
|
|
#else
|
|
return fseek(file_, position, SEEK_SET);
|
|
#endif
|
|
}
|
|
|
|
bool MkvWriter::Seekable() const { return true; }
|
|
|
|
void MkvWriter::ElementStartNotify(uint64_t, int64_t) {}
|
|
|
|
} // namespace mkvmuxer
|