shithub: libvpx

Download patch

ref: 667ab1c70864b9105537fbfb86210e30d12e1780
parent: 5ed83c32201ca5ba4992b2a7350ed02df0d8bf92
parent: 919553695c9673ff7016e9435905412fcdfbd552
author: Vignesh Venkatasubramanian <vigneshv@google.com>
date: Wed Apr 9 07:16:14 EDT 2014

Merge "third_party/libwebm: Pull from upstream"

--- a/third_party/libwebm/README.webm
+++ b/third_party/libwebm/README.webm
@@ -1,5 +1,5 @@
 URL: https://chromium.googlesource.com/webm/libwebm
-Version: 630a0e3c338e1b32bddf513a2dad807908d2976a
+Version: a7118d8ec564e9db841da1eb01f547f3229f240a
 License: BSD
 License File: LICENSE.txt
 
--- a/third_party/libwebm/mkvmuxerutil.cpp
+++ b/third_party/libwebm/mkvmuxerutil.cpp
@@ -292,11 +292,11 @@
   if (WriteID(writer, type))
     return false;
 
-  const int32 length = strlen(value);
+  const uint64 length = strlen(value);
   if (WriteUInt(writer, length))
     return false;
 
-  if (writer->Write(value, length))
+  if (writer->Write(value, static_cast<const uint32>(length)))
     return false;
 
   return true;
--- a/third_party/libwebm/mkvreader.cpp
+++ b/third_party/libwebm/mkvreader.cpp
@@ -14,13 +14,20 @@
 {
 
 MkvReader::MkvReader() :
-    m_file(NULL)
-{
+    m_file(NULL),
+    reader_owns_file_(true) {
 }
 
-MkvReader::~MkvReader()
-{
+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)
@@ -42,12 +49,17 @@
     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 -1;  //error
+        return false;  //error
 
     m_length = _ftelli64(m_file);
 #else
@@ -56,16 +68,19 @@
 #endif
     assert(m_length >= 0);
 
+    if (m_length < 0)
+        return false;
+
 #ifdef _MSC_VER
     status = _fseeki64(m_file, 0L, SEEK_SET);
 
     if (status)
-        return -1;  //error
+        return false;  //error
 #else
     fseek(m_file, 0L, SEEK_SET);
 #endif
 
-    return 0;
+    return true;
 }
 
 void MkvReader::Close()
--- a/third_party/libwebm/mkvreader.hpp
+++ b/third_party/libwebm/mkvreader.hpp
@@ -21,6 +21,7 @@
     MkvReader& operator=(const MkvReader&);
 public:
     MkvReader();
+    MkvReader(FILE* fp);
     virtual ~MkvReader();
 
     int Open(const char*);
@@ -29,8 +30,15 @@
     virtual int Read(long long position, long length, unsigned char* buffer);
     virtual int Length(long long* total, long long* available);
 private:
+
+    // Determines the size of the file. This is called either by the constructor
+    // or by the Open function depending on file ownership. Returns true on
+    // success.
+    bool GetFileSize();
+
     long long m_length;
     FILE* m_file;
+    bool reader_owns_file_;
 };
 
 }  //end namespace mkvparser