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
 |