c3378771b3
Pulling libwebm from upstream Changes from upstream: 249629d make Mkv(Reader|Writer)(FILE*) explicit 7f3cda4 mkvparser: fix a bunch of windows warnings 5c06178 Merge "clang-format on mkvparser.[ch]pp" 4df111e clang-format on mkvparser.[ch]pp 7b24501 clang-format re-run. c6767b9 Change AlignTrailingComments to false in .clang-format 9097a06 Merge "muxer: Reject file if TrackType is never specified" eddf974 Merge "clang-format on mkvmuxertypes.hpp and webmids.hpp" def325c muxer: Reject file if TrackType is never specified 41f869c Merge "clang-format on webvttparser.(cc|h)" fd0be37 clang-format on webvttparser.(cc|h) 207d8a1 Merge "clang-format on mkvmuxerutil.[ch]pp" 02429eb Merge "clang-format on mkvwriter.[ch]pp" 0cf7b1b Merge "clang-format on mkvreader.[ch]pp" 2e80fed Merge "clang-format on sample.cpp" 3402e12 Merge "clang-format on sample_muxer.cpp" 1a685db Merge "clang-format on sample_muxer_metadata.(cc|h)" 6634c7f Merge "clang-format on vttreader.cc" 7566004 Merge "clang-format on vttdemux.cc" 9915b84 clang-format on mkvreader.[ch]pp 7437254 clang-format on mkvmuxertypes.hpp and webmids.hpp 0d5a98c clang-format on sample_muxer.cpp e3485c9 clang-format on vttdemux.cc 46cc823 clang-format on dumpvtt.cc 5218bd2 clang-format on vttreader.cc 1a0130d clang-format on sample_muxer_metadata.(cc|h) 867f189 clang-format on sample.cpp 4c7bec5 clang-format on mkvwriter.[ch]pp 9ead078 clang-format on mkvmuxerutil.[ch]pp fb6b6e6 clang-format on mkvmuxer.[ch]pp ce77592 Update .clang-format to allow short functions in one line 0a24fe4 Merge "Add support for DateUTC and DefaultDuration in MKV Muxer." 11d5b66 Merge "Add .clang-format" a1a3b14 Add .clang-format 0fcec38 Add support for DateUTC and DefaultDuration in MKV Muxer. Change-Id: Ia0ed161ffc3d63c2eba8ed145707ffe543617976
133 lines
2.4 KiB
C++
133 lines
2.4 KiB
C++
// Copyright (c) 2010 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 "mkvreader.hpp"
|
|
|
|
#include <cassert>
|
|
|
|
namespace mkvparser {
|
|
|
|
MkvReader::MkvReader() : m_file(NULL), reader_owns_file_(true) {}
|
|
|
|
MkvReader::MkvReader(FILE* fp) : m_file(fp), reader_owns_file_(false) {
|
|
GetFileSize();
|
|
}
|
|
|
|
MkvReader::~MkvReader() {
|
|
if (reader_owns_file_)
|
|
Close();
|
|
m_file = NULL;
|
|
}
|
|
|
|
int MkvReader::Open(const char* fileName) {
|
|
if (fileName == NULL)
|
|
return -1;
|
|
|
|
if (m_file)
|
|
return -1;
|
|
|
|
#ifdef _MSC_VER
|
|
const errno_t e = fopen_s(&m_file, fileName, "rb");
|
|
|
|
if (e)
|
|
return -1; // error
|
|
#else
|
|
m_file = fopen(fileName, "rb");
|
|
|
|
if (m_file == NULL)
|
|
return -1;
|
|
#endif
|
|
return !GetFileSize();
|
|
}
|
|
|
|
bool MkvReader::GetFileSize() {
|
|
if (m_file == NULL)
|
|
return false;
|
|
#ifdef _MSC_VER
|
|
int status = _fseeki64(m_file, 0L, SEEK_END);
|
|
|
|
if (status)
|
|
return false; // error
|
|
|
|
m_length = _ftelli64(m_file);
|
|
#else
|
|
fseek(m_file, 0L, SEEK_END);
|
|
m_length = ftell(m_file);
|
|
#endif
|
|
assert(m_length >= 0);
|
|
|
|
if (m_length < 0)
|
|
return false;
|
|
|
|
#ifdef _MSC_VER
|
|
status = _fseeki64(m_file, 0L, SEEK_SET);
|
|
|
|
if (status)
|
|
return false; // error
|
|
#else
|
|
fseek(m_file, 0L, SEEK_SET);
|
|
#endif
|
|
|
|
return true;
|
|
}
|
|
|
|
void MkvReader::Close() {
|
|
if (m_file != NULL) {
|
|
fclose(m_file);
|
|
m_file = NULL;
|
|
}
|
|
}
|
|
|
|
int MkvReader::Length(long long* total, long long* available) {
|
|
if (m_file == NULL)
|
|
return -1;
|
|
|
|
if (total)
|
|
*total = m_length;
|
|
|
|
if (available)
|
|
*available = m_length;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int MkvReader::Read(long long offset, long len, unsigned char* buffer) {
|
|
if (m_file == NULL)
|
|
return -1;
|
|
|
|
if (offset < 0)
|
|
return -1;
|
|
|
|
if (len < 0)
|
|
return -1;
|
|
|
|
if (len == 0)
|
|
return 0;
|
|
|
|
if (offset >= m_length)
|
|
return -1;
|
|
|
|
#ifdef _MSC_VER
|
|
const int status = _fseeki64(m_file, offset, SEEK_SET);
|
|
|
|
if (status)
|
|
return -1; // error
|
|
#else
|
|
fseek(m_file, offset, SEEK_SET);
|
|
#endif
|
|
|
|
const size_t size = fread(buffer, 1, len, m_file);
|
|
|
|
if (size < size_t(len))
|
|
return -1; // error
|
|
|
|
return 0; // success
|
|
}
|
|
|
|
} // end namespace mkvparser
|