Revert "third_party: Roll libwebm snapshot."
This reverts commit 74aaa2389e. Unstable
under valgrind because of uninitialized reads. Limiting the bad bisect range.
Change-Id: I45b32f0ee0ba45795e7efb9947fb805830c8ce0e
			
			
This commit is contained in:
		
							
								
								
									
										37
									
								
								examples.mk
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								examples.mk
									
									
									
									
									
								
							@@ -36,30 +36,21 @@ LIBYUV_SRCS +=  third_party/libyuv/include/libyuv/basic_types.h  \
 | 
			
		||||
                third_party/libyuv/source/scale_neon64.cc \
 | 
			
		||||
                third_party/libyuv/source/scale_win.cc \
 | 
			
		||||
 | 
			
		||||
LIBWEBM_COMMON_SRCS += third_party/libwebm/common/hdr_util.cc \
 | 
			
		||||
                       third_party/libwebm/common/hdr_util.h \
 | 
			
		||||
                       third_party/libwebm/common/webmids.h
 | 
			
		||||
LIBWEBM_COMMON_SRCS += third_party/libwebm/webmids.hpp
 | 
			
		||||
 | 
			
		||||
LIBWEBM_MUXER_SRCS += third_party/libwebm/mkvmuxer/mkvmuxer.cc \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer/mkvmuxerutil.cc \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer/mkvwriter.cc \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer/mkvmuxer.h \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer/mkvmuxertypes.h \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer/mkvmuxerutil.h \
 | 
			
		||||
                      third_party/libwebm/mkvparser/mkvparser.h \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer/mkvwriter.h
 | 
			
		||||
 | 
			
		||||
LIBWEBM_PARSER_SRCS = third_party/libwebm/mkvparser/mkvparser.cc \
 | 
			
		||||
                      third_party/libwebm/mkvparser/mkvreader.cc \
 | 
			
		||||
                      third_party/libwebm/mkvparser/mkvparser.h \
 | 
			
		||||
                      third_party/libwebm/mkvparser/mkvreader.h
 | 
			
		||||
 | 
			
		||||
# Add compile flags and include path for libwebm sources.
 | 
			
		||||
ifeq ($(CONFIG_WEBM_IO),yes)
 | 
			
		||||
  CXXFLAGS     += -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
 | 
			
		||||
  INC_PATH-yes += $(SRC_PATH_BARE)/third_party/libwebm
 | 
			
		||||
endif
 | 
			
		||||
LIBWEBM_MUXER_SRCS += third_party/libwebm/mkvmuxer.cpp \
 | 
			
		||||
                      third_party/libwebm/mkvmuxerutil.cpp \
 | 
			
		||||
                      third_party/libwebm/mkvwriter.cpp \
 | 
			
		||||
                      third_party/libwebm/mkvmuxer.hpp \
 | 
			
		||||
                      third_party/libwebm/mkvmuxertypes.hpp \
 | 
			
		||||
                      third_party/libwebm/mkvmuxerutil.hpp \
 | 
			
		||||
                      third_party/libwebm/mkvparser.hpp \
 | 
			
		||||
                      third_party/libwebm/mkvwriter.hpp
 | 
			
		||||
 | 
			
		||||
LIBWEBM_PARSER_SRCS = third_party/libwebm/mkvparser.cpp \
 | 
			
		||||
                      third_party/libwebm/mkvreader.cpp \
 | 
			
		||||
                      third_party/libwebm/mkvparser.hpp \
 | 
			
		||||
                      third_party/libwebm/mkvreader.hpp
 | 
			
		||||
 | 
			
		||||
# List of examples to build. UTILS are tools meant for distribution
 | 
			
		||||
# while EXAMPLES demonstrate specific portions of the API.
 | 
			
		||||
@@ -79,7 +70,6 @@ ifeq ($(CONFIG_LIBYUV),yes)
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(CONFIG_WEBM_IO),yes)
 | 
			
		||||
  vpxdec.SRCS                 += $(LIBWEBM_COMMON_SRCS)
 | 
			
		||||
  vpxdec.SRCS                 += $(LIBWEBM_MUXER_SRCS)
 | 
			
		||||
  vpxdec.SRCS                 += $(LIBWEBM_PARSER_SRCS)
 | 
			
		||||
  vpxdec.SRCS                 += webmdec.cc webmdec.h
 | 
			
		||||
endif
 | 
			
		||||
@@ -103,7 +93,6 @@ endif
 | 
			
		||||
ifeq ($(CONFIG_WEBM_IO),yes)
 | 
			
		||||
  vpxenc.SRCS                 += $(LIBWEBM_COMMON_SRCS)
 | 
			
		||||
  vpxenc.SRCS                 += $(LIBWEBM_MUXER_SRCS)
 | 
			
		||||
  vpxenc.SRCS                 += $(LIBWEBM_PARSER_SRCS)
 | 
			
		||||
  vpxenc.SRCS                 += webmenc.cc webmenc.h
 | 
			
		||||
endif
 | 
			
		||||
vpxenc.GUID                  = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								libs.mk
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								libs.mk
									
									
									
									
									
								
							@@ -394,12 +394,6 @@ $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
 | 
			
		||||
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
 | 
			
		||||
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Add include path for libwebm sources.
 | 
			
		||||
#
 | 
			
		||||
ifeq ($(CONFIG_WEBM_IO),yes)
 | 
			
		||||
  CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/libwebm
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## libvpx test directives
 | 
			
		||||
@@ -475,7 +469,6 @@ test_libvpx.$(VCPROJ_SFX): $(LIBVPX_TEST_SRCS) vpx.$(VCPROJ_SFX) gtest.$(VCPROJ_
 | 
			
		||||
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
            --out=$@ $(INTERNAL_CFLAGS) $(CFLAGS) \
 | 
			
		||||
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" \
 | 
			
		||||
            $(if $(CONFIG_WEBM_IO),-I"$(SRC_PATH_BARE)/third_party/libwebm") \
 | 
			
		||||
            -L. -l$(CODEC_LIB) -l$(GTEST_LIB) $^
 | 
			
		||||
 | 
			
		||||
PROJECTS-$(CONFIG_MSVS) += test_libvpx.$(VCPROJ_SFX)
 | 
			
		||||
 
 | 
			
		||||
@@ -59,10 +59,10 @@ LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS)    += y4m_test.cc ../y4menc.c ../y4menc.h
 | 
			
		||||
 | 
			
		||||
## WebM Parsing
 | 
			
		||||
ifeq ($(CONFIG_WEBM_IO), yes)
 | 
			
		||||
LIBWEBM_PARSER_SRCS += ../third_party/libwebm/mkvparser/mkvparser.cc
 | 
			
		||||
LIBWEBM_PARSER_SRCS += ../third_party/libwebm/mkvparser/mkvreader.cc
 | 
			
		||||
LIBWEBM_PARSER_SRCS += ../third_party/libwebm/mkvparser/mkvparser.h
 | 
			
		||||
LIBWEBM_PARSER_SRCS += ../third_party/libwebm/mkvparser/mkvreader.h
 | 
			
		||||
LIBWEBM_PARSER_SRCS                    += ../third_party/libwebm/mkvparser.cpp
 | 
			
		||||
LIBWEBM_PARSER_SRCS                    += ../third_party/libwebm/mkvreader.cpp
 | 
			
		||||
LIBWEBM_PARSER_SRCS                    += ../third_party/libwebm/mkvparser.hpp
 | 
			
		||||
LIBWEBM_PARSER_SRCS                    += ../third_party/libwebm/mkvreader.hpp
 | 
			
		||||
LIBVPX_TEST_SRCS-$(CONFIG_DECODERS)    += $(LIBWEBM_PARSER_SRCS)
 | 
			
		||||
LIBVPX_TEST_SRCS-$(CONFIG_DECODERS)    += ../tools_common.h
 | 
			
		||||
LIBVPX_TEST_SRCS-$(CONFIG_DECODERS)    += ../webmdec.cc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								third_party/libwebm/Android.mk
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								third_party/libwebm/Android.mk
									
									
									
									
										vendored
									
									
								
							@@ -2,16 +2,9 @@ LOCAL_PATH:= $(call my-dir)
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_MODULE:= libwebm
 | 
			
		||||
LOCAL_CPPFLAGS:=-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
 | 
			
		||||
LOCAL_CPPFLAGS+=-D__STDC_LIMIT_MACROS
 | 
			
		||||
LOCAL_C_INCLUDES:= $(LOCAL_PATH)
 | 
			
		||||
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)
 | 
			
		||||
 | 
			
		||||
LOCAL_SRC_FILES:= common/file_util.cc \
 | 
			
		||||
                  common/hdr_util.cc \
 | 
			
		||||
                  mkvparser/mkvparser.cc \
 | 
			
		||||
                  mkvparser/mkvreader.cc \
 | 
			
		||||
                  mkvmuxer/mkvmuxer.cc \
 | 
			
		||||
                  mkvmuxer/mkvmuxerutil.cc \
 | 
			
		||||
                  mkvmuxer/mkvwriter.cc
 | 
			
		||||
LOCAL_SRC_FILES:= mkvparser.cpp \
 | 
			
		||||
                  mkvreader.cpp \
 | 
			
		||||
                  mkvmuxer.cpp \
 | 
			
		||||
                  mkvmuxerutil.cpp \
 | 
			
		||||
                  mkvwriter.cpp
 | 
			
		||||
include $(BUILD_STATIC_LIBRARY)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								third_party/libwebm/README.libvpx
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								third_party/libwebm/README.libvpx
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
URL: https://chromium.googlesource.com/webm/libwebm
 | 
			
		||||
Version: 5c50e310e7050192b952fe588186fd1dadc08b6e
 | 
			
		||||
Version: 476366249e1fda7710a389cd41c57db42305e0d4
 | 
			
		||||
License: BSD
 | 
			
		||||
License File: LICENSE.txt
 | 
			
		||||
 | 
			
		||||
@@ -7,4 +7,4 @@ Description:
 | 
			
		||||
libwebm is used to handle WebM container I/O.
 | 
			
		||||
 | 
			
		||||
Local Changes:
 | 
			
		||||
* Android.mk modified to build Libwebm for Android within Libvpx.
 | 
			
		||||
* <none>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								third_party/libwebm/RELEASE.TXT
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								third_party/libwebm/RELEASE.TXT
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
1.0.0.5
 | 
			
		||||
 * Handled case when no duration
 | 
			
		||||
 * Handled empty clusters
 | 
			
		||||
 * Handled empty clusters when seeking
 | 
			
		||||
 * Implemented check lacing bits
 | 
			
		||||
 | 
			
		||||
1.0.0.4
 | 
			
		||||
 * Made Cues member variables mutables
 | 
			
		||||
 * Defined against badly-formatted cue points
 | 
			
		||||
 * Segment::GetCluster returns CuePoint too
 | 
			
		||||
 * Separated cue-based searches
 | 
			
		||||
 | 
			
		||||
1.0.0.3
 | 
			
		||||
 * Added Block::GetOffset() to get a frame's offset in a block
 | 
			
		||||
 * Changed cluster count type from size_t to long
 | 
			
		||||
 * Parsed SeekHead to find cues
 | 
			
		||||
 * Allowed seeking beyond end of cluster cache
 | 
			
		||||
 * Added not to attempt to reparse cues element
 | 
			
		||||
 * Restructured Segment::LoadCluster
 | 
			
		||||
 * Marked position of cues without parsing cues element
 | 
			
		||||
 * Allowed cue points to be loaded incrementally
 | 
			
		||||
 * Implemented to load lazily cue points as they're searched
 | 
			
		||||
 * Merged Cues::LoadCuePoint into Cues::Find
 | 
			
		||||
 * Lazy init cues
 | 
			
		||||
 * Loaded cue point during find
 | 
			
		||||
 | 
			
		||||
1.0.0.2
 | 
			
		||||
 * added support for Cues element
 | 
			
		||||
 * seeking was improved
 | 
			
		||||
 | 
			
		||||
1.0.0.1
 | 
			
		||||
 * fixed item 141
 | 
			
		||||
 * added item 142
 | 
			
		||||
 * added this file, RELEASE.TXT, to repository
 | 
			
		||||
							
								
								
									
										67
									
								
								third_party/libwebm/common/file_util.cc
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										67
									
								
								third_party/libwebm/common/file_util.cc
									
									
									
									
										vendored
									
									
								
							@@ -1,67 +0,0 @@
 | 
			
		||||
// Copyright (c) 2016 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 "common/file_util.h"
 | 
			
		||||
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#ifndef _MSC_VER
 | 
			
		||||
#include <unistd.h>  // close()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
#include <ios>
 | 
			
		||||
 | 
			
		||||
namespace libwebm {
 | 
			
		||||
 | 
			
		||||
std::string GetTempFileName() {
 | 
			
		||||
#if !defined _MSC_VER && !defined __MINGW32__
 | 
			
		||||
  char temp_file_name_template[] = "libwebm_temp.XXXXXX";
 | 
			
		||||
  int fd = mkstemp(temp_file_name_template);
 | 
			
		||||
  if (fd != -1) {
 | 
			
		||||
    close(fd);
 | 
			
		||||
    return std::string(temp_file_name_template);
 | 
			
		||||
  }
 | 
			
		||||
  return std::string();
 | 
			
		||||
#else
 | 
			
		||||
  char tmp_file_name[_MAX_PATH];
 | 
			
		||||
  errno_t err = tmpnam_s(tmp_file_name);
 | 
			
		||||
  if (err == 0) {
 | 
			
		||||
    return std::string(tmp_file_name);
 | 
			
		||||
  }
 | 
			
		||||
  return std::string();
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t GetFileSize(const std::string& file_name) {
 | 
			
		||||
  uint64_t file_size = 0;
 | 
			
		||||
#ifndef _MSC_VER
 | 
			
		||||
  struct stat st;
 | 
			
		||||
  st.st_size = 0;
 | 
			
		||||
  if (stat(file_name.c_str(), &st) == 0) {
 | 
			
		||||
#else
 | 
			
		||||
  struct _stat st;
 | 
			
		||||
  st.st_size = 0;
 | 
			
		||||
  if (_stat(file_name.c_str(), &st) == 0) {
 | 
			
		||||
#endif
 | 
			
		||||
    file_size = st.st_size;
 | 
			
		||||
  }
 | 
			
		||||
  return file_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TempFileDeleter::TempFileDeleter() { file_name_ = GetTempFileName(); }
 | 
			
		||||
 | 
			
		||||
TempFileDeleter::~TempFileDeleter() {
 | 
			
		||||
  std::ifstream file(file_name_.c_str());
 | 
			
		||||
  if (file.good()) {
 | 
			
		||||
    file.close();
 | 
			
		||||
    std::remove(file_name_.c_str());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace libwebm
 | 
			
		||||
							
								
								
									
										41
									
								
								third_party/libwebm/common/file_util.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								third_party/libwebm/common/file_util.h
									
									
									
									
										vendored
									
									
								
							@@ -1,41 +0,0 @@
 | 
			
		||||
// Copyright (c) 2016 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.
 | 
			
		||||
#ifndef LIBWEBM_COMMON_FILE_UTIL_H_
 | 
			
		||||
#define LIBWEBM_COMMON_FILE_UTIL_H_
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#include "mkvmuxer/mkvmuxertypes.h"  // LIBWEBM_DISALLOW_COPY_AND_ASSIGN()
 | 
			
		||||
 | 
			
		||||
namespace libwebm {
 | 
			
		||||
 | 
			
		||||
// Returns a temporary file name.
 | 
			
		||||
std::string GetTempFileName();
 | 
			
		||||
 | 
			
		||||
// Returns size of file specified by |file_name|, or 0 upon failure.
 | 
			
		||||
uint64_t GetFileSize(const std::string& file_name);
 | 
			
		||||
 | 
			
		||||
// Manages life of temporary file specified at time of construction. Deletes
 | 
			
		||||
// file upon destruction.
 | 
			
		||||
class TempFileDeleter {
 | 
			
		||||
 public:
 | 
			
		||||
  TempFileDeleter();
 | 
			
		||||
  explicit TempFileDeleter(std::string file_name) : file_name_(file_name) {}
 | 
			
		||||
  ~TempFileDeleter();
 | 
			
		||||
  const std::string& name() const { return file_name_; }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  std::string file_name_;
 | 
			
		||||
  LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TempFileDeleter);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace libwebm
 | 
			
		||||
 | 
			
		||||
#endif  // LIBWEBM_COMMON_FILE_UTIL_H_
 | 
			
		||||
							
								
								
									
										182
									
								
								third_party/libwebm/common/hdr_util.cc
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										182
									
								
								third_party/libwebm/common/hdr_util.cc
									
									
									
									
										vendored
									
									
								
							@@ -1,182 +0,0 @@
 | 
			
		||||
// Copyright (c) 2016 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 "hdr_util.h"
 | 
			
		||||
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include <new>
 | 
			
		||||
 | 
			
		||||
#include "mkvparser/mkvparser.h"
 | 
			
		||||
 | 
			
		||||
namespace libwebm {
 | 
			
		||||
bool CopyPrimaryChromaticity(const mkvparser::PrimaryChromaticity& parser_pc,
 | 
			
		||||
                             PrimaryChromaticityPtr* muxer_pc) {
 | 
			
		||||
  muxer_pc->reset(new (std::nothrow)
 | 
			
		||||
                      mkvmuxer::PrimaryChromaticity(parser_pc.x, parser_pc.y));
 | 
			
		||||
  if (!muxer_pc->get())
 | 
			
		||||
    return false;
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MasteringMetadataValuePresent(double value) {
 | 
			
		||||
  return value != mkvparser::MasteringMetadata::kValueNotPresent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CopyMasteringMetadata(const mkvparser::MasteringMetadata& parser_mm,
 | 
			
		||||
                           mkvmuxer::MasteringMetadata* muxer_mm) {
 | 
			
		||||
  if (MasteringMetadataValuePresent(parser_mm.luminance_max))
 | 
			
		||||
    muxer_mm->luminance_max = parser_mm.luminance_max;
 | 
			
		||||
  if (MasteringMetadataValuePresent(parser_mm.luminance_min))
 | 
			
		||||
    muxer_mm->luminance_min = parser_mm.luminance_min;
 | 
			
		||||
 | 
			
		||||
  PrimaryChromaticityPtr r_ptr(NULL);
 | 
			
		||||
  PrimaryChromaticityPtr g_ptr(NULL);
 | 
			
		||||
  PrimaryChromaticityPtr b_ptr(NULL);
 | 
			
		||||
  PrimaryChromaticityPtr wp_ptr(NULL);
 | 
			
		||||
 | 
			
		||||
  if (parser_mm.r) {
 | 
			
		||||
    if (!CopyPrimaryChromaticity(*parser_mm.r, &r_ptr))
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
  if (parser_mm.g) {
 | 
			
		||||
    if (!CopyPrimaryChromaticity(*parser_mm.g, &g_ptr))
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
  if (parser_mm.b) {
 | 
			
		||||
    if (!CopyPrimaryChromaticity(*parser_mm.b, &b_ptr))
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
  if (parser_mm.white_point) {
 | 
			
		||||
    if (!CopyPrimaryChromaticity(*parser_mm.white_point, &wp_ptr))
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!muxer_mm->SetChromaticity(r_ptr.get(), g_ptr.get(), b_ptr.get(),
 | 
			
		||||
                                 wp_ptr.get())) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ColourValuePresent(long long value) {
 | 
			
		||||
  return value != mkvparser::Colour::kValueNotPresent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CopyColour(const mkvparser::Colour& parser_colour,
 | 
			
		||||
                mkvmuxer::Colour* muxer_colour) {
 | 
			
		||||
  if (!muxer_colour)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (ColourValuePresent(parser_colour.matrix_coefficients))
 | 
			
		||||
    muxer_colour->matrix_coefficients = parser_colour.matrix_coefficients;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.bits_per_channel))
 | 
			
		||||
    muxer_colour->bits_per_channel = parser_colour.bits_per_channel;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.chroma_subsampling_horz))
 | 
			
		||||
    muxer_colour->chroma_subsampling_horz =
 | 
			
		||||
        parser_colour.chroma_subsampling_horz;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.chroma_subsampling_vert))
 | 
			
		||||
    muxer_colour->chroma_subsampling_vert =
 | 
			
		||||
        parser_colour.chroma_subsampling_vert;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.cb_subsampling_horz))
 | 
			
		||||
    muxer_colour->cb_subsampling_horz = parser_colour.cb_subsampling_horz;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.cb_subsampling_vert))
 | 
			
		||||
    muxer_colour->cb_subsampling_vert = parser_colour.cb_subsampling_vert;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.chroma_siting_horz))
 | 
			
		||||
    muxer_colour->chroma_siting_horz = parser_colour.chroma_siting_horz;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.chroma_siting_vert))
 | 
			
		||||
    muxer_colour->chroma_siting_vert = parser_colour.chroma_siting_vert;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.range))
 | 
			
		||||
    muxer_colour->range = parser_colour.range;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.transfer_characteristics))
 | 
			
		||||
    muxer_colour->transfer_characteristics =
 | 
			
		||||
        parser_colour.transfer_characteristics;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.primaries))
 | 
			
		||||
    muxer_colour->primaries = parser_colour.primaries;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.max_cll))
 | 
			
		||||
    muxer_colour->max_cll = parser_colour.max_cll;
 | 
			
		||||
  if (ColourValuePresent(parser_colour.max_fall))
 | 
			
		||||
    muxer_colour->max_fall = parser_colour.max_fall;
 | 
			
		||||
 | 
			
		||||
  if (parser_colour.mastering_metadata) {
 | 
			
		||||
    mkvmuxer::MasteringMetadata muxer_mm;
 | 
			
		||||
    if (!CopyMasteringMetadata(*parser_colour.mastering_metadata, &muxer_mm))
 | 
			
		||||
      return false;
 | 
			
		||||
    if (!muxer_colour->SetMasteringMetadata(muxer_mm))
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Format of VPx private data:
 | 
			
		||||
//
 | 
			
		||||
//   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 | 
			
		||||
//  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
			
		||||
//  |    ID Byte    |             Length            |               |
 | 
			
		||||
//  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
 | 
			
		||||
//  |                                                               |
 | 
			
		||||
//  :               Bytes 1..Length of Codec Feature                :
 | 
			
		||||
//  |                                                               |
 | 
			
		||||
//  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | 
			
		||||
//
 | 
			
		||||
// ID Byte Format
 | 
			
		||||
// ID byte is an unsigned byte.
 | 
			
		||||
//   0 1 2 3 4 5 6 7
 | 
			
		||||
//  +-+-+-+-+-+-+-+-+
 | 
			
		||||
//  |X|    ID       |
 | 
			
		||||
//  +-+-+-+-+-+-+-+-+
 | 
			
		||||
//
 | 
			
		||||
// The X bit is reserved.
 | 
			
		||||
//
 | 
			
		||||
// Currently only profile level is supported. ID byte must be set to 1, and
 | 
			
		||||
// length must be 1. Supported values are:
 | 
			
		||||
//
 | 
			
		||||
//   10: Level 1
 | 
			
		||||
//   11: Level 1.1
 | 
			
		||||
//   20: Level 2
 | 
			
		||||
//   21: Level 2.1
 | 
			
		||||
//   30: Level 3
 | 
			
		||||
//   31: Level 3.1
 | 
			
		||||
//   40: Level 4
 | 
			
		||||
//   41: Level 4.1
 | 
			
		||||
//   50: Level 5
 | 
			
		||||
//   51: Level 5.1
 | 
			
		||||
//   52: Level 5.2
 | 
			
		||||
//   60: Level 6
 | 
			
		||||
//   61: Level 6.1
 | 
			
		||||
//   62: Level 6.2
 | 
			
		||||
//
 | 
			
		||||
// See the following link for more information:
 | 
			
		||||
// http://www.webmproject.org/vp9/profiles/
 | 
			
		||||
int ParseVpxCodecPrivate(const uint8_t* private_data, int32_t length) {
 | 
			
		||||
  const int kVpxCodecPrivateLength = 3;
 | 
			
		||||
  if (!private_data || length != kVpxCodecPrivateLength)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const uint8_t id_byte = *private_data;
 | 
			
		||||
  if (id_byte != 1)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const int kVpxProfileLength = 1;
 | 
			
		||||
  const uint8_t length_byte = private_data[1];
 | 
			
		||||
  if (length_byte != kVpxProfileLength)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const int level = static_cast<int>(private_data[2]);
 | 
			
		||||
 | 
			
		||||
  const int kNumLevels = 14;
 | 
			
		||||
  const int levels[kNumLevels] = {10, 11, 20, 21, 30, 31, 40,
 | 
			
		||||
                                  41, 50, 51, 52, 60, 61, 62};
 | 
			
		||||
 | 
			
		||||
  for (int i = 0; i < kNumLevels; ++i) {
 | 
			
		||||
    if (level == levels[i])
 | 
			
		||||
      return level;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
}  // namespace libwebm
 | 
			
		||||
							
								
								
									
										51
									
								
								third_party/libwebm/common/hdr_util.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								third_party/libwebm/common/hdr_util.h
									
									
									
									
										vendored
									
									
								
							@@ -1,51 +0,0 @@
 | 
			
		||||
// Copyright (c) 2016 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.
 | 
			
		||||
#ifndef LIBWEBM_COMMON_HDR_UTIL_H_
 | 
			
		||||
#define LIBWEBM_COMMON_HDR_UTIL_H_
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
#include "mkvmuxer/mkvmuxer.h"
 | 
			
		||||
 | 
			
		||||
namespace mkvparser {
 | 
			
		||||
struct Colour;
 | 
			
		||||
struct MasteringMetadata;
 | 
			
		||||
struct PrimaryChromaticity;
 | 
			
		||||
}  // namespace mkvparser
 | 
			
		||||
 | 
			
		||||
namespace libwebm {
 | 
			
		||||
// Utility types and functions for working with the Colour element and its
 | 
			
		||||
// children. Copiers return true upon success. Presence functions return true
 | 
			
		||||
// when the specified element is present.
 | 
			
		||||
 | 
			
		||||
// TODO(tomfinegan): These should be moved to libwebm_utils once c++11 is
 | 
			
		||||
// required by libwebm.
 | 
			
		||||
 | 
			
		||||
typedef std::auto_ptr<mkvmuxer::PrimaryChromaticity> PrimaryChromaticityPtr;
 | 
			
		||||
 | 
			
		||||
bool CopyPrimaryChromaticity(const mkvparser::PrimaryChromaticity& parser_pc,
 | 
			
		||||
                             PrimaryChromaticityPtr* muxer_pc);
 | 
			
		||||
 | 
			
		||||
bool MasteringMetadataValuePresent(double value);
 | 
			
		||||
 | 
			
		||||
bool CopyMasteringMetadata(const mkvparser::MasteringMetadata& parser_mm,
 | 
			
		||||
                           mkvmuxer::MasteringMetadata* muxer_mm);
 | 
			
		||||
 | 
			
		||||
bool ColourValuePresent(long long value);
 | 
			
		||||
 | 
			
		||||
bool CopyColour(const mkvparser::Colour& parser_colour,
 | 
			
		||||
                mkvmuxer::Colour* muxer_colour);
 | 
			
		||||
 | 
			
		||||
// Returns VP9 profile upon success or 0 upon failure.
 | 
			
		||||
int ParseVpxCodecPrivate(const uint8_t* private_data, int32_t length);
 | 
			
		||||
 | 
			
		||||
}  // namespace libwebm
 | 
			
		||||
 | 
			
		||||
#endif  // LIBWEBM_COMMON_HDR_UTIL_H_
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										83
									
								
								third_party/libwebm/mkvmuxer/mkvmuxerutil.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										83
									
								
								third_party/libwebm/mkvmuxer/mkvmuxerutil.h
									
									
									
									
										vendored
									
									
								
							@@ -1,83 +0,0 @@
 | 
			
		||||
// 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.
 | 
			
		||||
#ifndef MKVMUXER_MKVMUXERUTIL_H_
 | 
			
		||||
#define MKVMUXER_MKVMUXERUTIL_H_
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
class Cluster;
 | 
			
		||||
class Frame;
 | 
			
		||||
class IMkvWriter;
 | 
			
		||||
 | 
			
		||||
const uint64_t kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL;
 | 
			
		||||
const int64_t kMaxBlockTimecode = 0x07FFFLL;
 | 
			
		||||
 | 
			
		||||
// Writes out |value| in Big Endian order. Returns 0 on success.
 | 
			
		||||
int32_t SerializeInt(IMkvWriter* writer, int64_t value, int32_t size);
 | 
			
		||||
 | 
			
		||||
// Returns the size in bytes of the element.
 | 
			
		||||
int32_t GetUIntSize(uint64_t value);
 | 
			
		||||
int32_t GetIntSize(int64_t value);
 | 
			
		||||
int32_t GetCodedUIntSize(uint64_t value);
 | 
			
		||||
uint64_t EbmlMasterElementSize(uint64_t type, uint64_t value);
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, int64_t value);
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, uint64_t value);
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, float value);
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, const char* value);
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, const uint8_t* value, uint64_t size);
 | 
			
		||||
uint64_t EbmlDateElementSize(uint64_t type);
 | 
			
		||||
 | 
			
		||||
// Creates an EBML coded number from |value| and writes it out. The size of
 | 
			
		||||
// the coded number is determined by the value of |value|. |value| must not
 | 
			
		||||
// be in a coded form. Returns 0 on success.
 | 
			
		||||
int32_t WriteUInt(IMkvWriter* writer, uint64_t value);
 | 
			
		||||
 | 
			
		||||
// Creates an EBML coded number from |value| and writes it out. The size of
 | 
			
		||||
// the coded number is determined by the value of |size|. |value| must not
 | 
			
		||||
// be in a coded form. Returns 0 on success.
 | 
			
		||||
int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size);
 | 
			
		||||
 | 
			
		||||
// Output an Mkv master element. Returns true if the element was written.
 | 
			
		||||
bool WriteEbmlMasterElement(IMkvWriter* writer, uint64_t value, uint64_t size);
 | 
			
		||||
 | 
			
		||||
// Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the
 | 
			
		||||
// ID to |SerializeInt|. Returns 0 on success.
 | 
			
		||||
int32_t WriteID(IMkvWriter* writer, uint64_t type);
 | 
			
		||||
 | 
			
		||||
// Output an Mkv non-master element. Returns true if the element was written.
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, int64_t value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, float value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const char* value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const uint8_t* value,
 | 
			
		||||
                      uint64_t size);
 | 
			
		||||
bool WriteEbmlDateElement(IMkvWriter* writer, uint64_t type, int64_t value);
 | 
			
		||||
 | 
			
		||||
// Output a Mkv Frame. It decides the correct element to write (Block vs
 | 
			
		||||
// SimpleBlock) based on the parameters of the Frame.
 | 
			
		||||
uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                    Cluster* cluster);
 | 
			
		||||
 | 
			
		||||
// Output a void element. |size| must be the entire size in bytes that will be
 | 
			
		||||
// void. The function will calculate the size of the void header and subtract
 | 
			
		||||
// it from |size|.
 | 
			
		||||
uint64_t WriteVoidElement(IMkvWriter* writer, uint64_t size);
 | 
			
		||||
 | 
			
		||||
// Returns the version number of the muxer in |major|, |minor|, |build|,
 | 
			
		||||
// and |revision|.
 | 
			
		||||
void GetVersion(int32_t* major, int32_t* minor, int32_t* build,
 | 
			
		||||
                int32_t* revision);
 | 
			
		||||
 | 
			
		||||
// Returns a random number to be used for UID, using |seed| to seed
 | 
			
		||||
// the random-number generator (see POSIX rand_r() for semantics).
 | 
			
		||||
uint64_t MakeUID(unsigned int* seed);
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvmuxer
 | 
			
		||||
 | 
			
		||||
#endif  // MKVMUXER_MKVMUXERUTIL_H_
 | 
			
		||||
@@ -6,8 +6,8 @@
 | 
			
		||||
// in the file PATENTS.  All contributing project authors may
 | 
			
		||||
// be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
 | 
			
		||||
#ifndef MKVMUXER_MKVMUXERTYPES_H_
 | 
			
		||||
#define MKVMUXER_MKVMUXERTYPES_H_
 | 
			
		||||
#ifndef MKVMUXERTYPES_HPP
 | 
			
		||||
#define MKVMUXERTYPES_HPP
 | 
			
		||||
 | 
			
		||||
// Copied from Chromium basictypes.h
 | 
			
		||||
// A macro to disallow the copy constructor and operator= functions
 | 
			
		||||
@@ -16,4 +16,15 @@
 | 
			
		||||
  TypeName(const TypeName&);                       \
 | 
			
		||||
  void operator=(const TypeName&)
 | 
			
		||||
 | 
			
		||||
#endif  // MKVMUXER_MKVMUXERTYPES_HPP_
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
 | 
			
		||||
typedef unsigned char uint8;
 | 
			
		||||
typedef short int16;
 | 
			
		||||
typedef int int32;
 | 
			
		||||
typedef unsigned int uint32;
 | 
			
		||||
typedef long long int64;
 | 
			
		||||
typedef unsigned long long uint64;
 | 
			
		||||
 | 
			
		||||
}  // end namespace mkvmuxer
 | 
			
		||||
 | 
			
		||||
#endif  // MKVMUXERTYPES_HPP
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
// in the file PATENTS.  All contributing project authors may
 | 
			
		||||
// be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
 | 
			
		||||
#include "mkvmuxer/mkvmuxerutil.h"
 | 
			
		||||
#include "mkvmuxerutil.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef __ANDROID__
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
@@ -20,9 +20,13 @@
 | 
			
		||||
#include <ctime>
 | 
			
		||||
#include <new>
 | 
			
		||||
 | 
			
		||||
#include "common/webmids.h"
 | 
			
		||||
#include "mkvmuxer/mkvmuxer.h"
 | 
			
		||||
#include "mkvmuxer/mkvwriter.h"
 | 
			
		||||
#include "mkvwriter.hpp"
 | 
			
		||||
#include "webmids.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
// Disable MSVC warnings that suggest making code non-portable.
 | 
			
		||||
#pragma warning(disable : 4996)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
 | 
			
		||||
@@ -31,68 +35,64 @@ namespace {
 | 
			
		||||
// Date elements are always 8 octets in size.
 | 
			
		||||
const int kDateElementSize = 8;
 | 
			
		||||
 | 
			
		||||
uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                    int64_t timecode, uint64_t timecode_scale) {
 | 
			
		||||
  uint64_t block_additional_elem_size = 0;
 | 
			
		||||
  uint64_t block_addid_elem_size = 0;
 | 
			
		||||
  uint64_t block_more_payload_size = 0;
 | 
			
		||||
  uint64_t block_more_elem_size = 0;
 | 
			
		||||
  uint64_t block_additions_payload_size = 0;
 | 
			
		||||
  uint64_t block_additions_elem_size = 0;
 | 
			
		||||
uint64 WriteBlock(IMkvWriter* writer, const Frame* const frame, int64 timecode,
 | 
			
		||||
                  uint64 timecode_scale) {
 | 
			
		||||
  uint64 block_additional_elem_size = 0;
 | 
			
		||||
  uint64 block_addid_elem_size = 0;
 | 
			
		||||
  uint64 block_more_payload_size = 0;
 | 
			
		||||
  uint64 block_more_elem_size = 0;
 | 
			
		||||
  uint64 block_additions_payload_size = 0;
 | 
			
		||||
  uint64 block_additions_elem_size = 0;
 | 
			
		||||
  if (frame->additional()) {
 | 
			
		||||
    block_additional_elem_size =
 | 
			
		||||
        EbmlElementSize(libwebm::kMkvBlockAdditional, frame->additional(),
 | 
			
		||||
                        frame->additional_length());
 | 
			
		||||
    block_addid_elem_size =
 | 
			
		||||
        EbmlElementSize(libwebm::kMkvBlockAddID, frame->add_id());
 | 
			
		||||
    block_additional_elem_size = EbmlElementSize(
 | 
			
		||||
        kMkvBlockAdditional, frame->additional(), frame->additional_length());
 | 
			
		||||
    block_addid_elem_size = EbmlElementSize(kMkvBlockAddID, frame->add_id());
 | 
			
		||||
 | 
			
		||||
    block_more_payload_size =
 | 
			
		||||
        block_addid_elem_size + block_additional_elem_size;
 | 
			
		||||
    block_more_elem_size =
 | 
			
		||||
        EbmlMasterElementSize(libwebm::kMkvBlockMore, block_more_payload_size) +
 | 
			
		||||
        EbmlMasterElementSize(kMkvBlockMore, block_more_payload_size) +
 | 
			
		||||
        block_more_payload_size;
 | 
			
		||||
    block_additions_payload_size = block_more_elem_size;
 | 
			
		||||
    block_additions_elem_size =
 | 
			
		||||
        EbmlMasterElementSize(libwebm::kMkvBlockAdditions,
 | 
			
		||||
        EbmlMasterElementSize(kMkvBlockAdditions,
 | 
			
		||||
                              block_additions_payload_size) +
 | 
			
		||||
        block_additions_payload_size;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  uint64_t discard_padding_elem_size = 0;
 | 
			
		||||
  uint64 discard_padding_elem_size = 0;
 | 
			
		||||
  if (frame->discard_padding() != 0) {
 | 
			
		||||
    discard_padding_elem_size =
 | 
			
		||||
        EbmlElementSize(libwebm::kMkvDiscardPadding, frame->discard_padding());
 | 
			
		||||
        EbmlElementSize(kMkvDiscardPadding, frame->discard_padding());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const uint64_t reference_block_timestamp =
 | 
			
		||||
  const uint64 reference_block_timestamp =
 | 
			
		||||
      frame->reference_block_timestamp() / timecode_scale;
 | 
			
		||||
  uint64_t reference_block_elem_size = 0;
 | 
			
		||||
  uint64 reference_block_elem_size = 0;
 | 
			
		||||
  if (!frame->is_key()) {
 | 
			
		||||
    reference_block_elem_size =
 | 
			
		||||
        EbmlElementSize(libwebm::kMkvReferenceBlock, reference_block_timestamp);
 | 
			
		||||
        EbmlElementSize(kMkvReferenceBlock, reference_block_timestamp);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const uint64_t duration = frame->duration() / timecode_scale;
 | 
			
		||||
  uint64_t block_duration_elem_size = 0;
 | 
			
		||||
  const uint64 duration = frame->duration() / timecode_scale;
 | 
			
		||||
  uint64 block_duration_elem_size = 0;
 | 
			
		||||
  if (duration > 0)
 | 
			
		||||
    block_duration_elem_size =
 | 
			
		||||
        EbmlElementSize(libwebm::kMkvBlockDuration, duration);
 | 
			
		||||
    block_duration_elem_size = EbmlElementSize(kMkvBlockDuration, duration);
 | 
			
		||||
 | 
			
		||||
  const uint64_t block_payload_size = 4 + frame->length();
 | 
			
		||||
  const uint64_t block_elem_size =
 | 
			
		||||
      EbmlMasterElementSize(libwebm::kMkvBlock, block_payload_size) +
 | 
			
		||||
      block_payload_size;
 | 
			
		||||
  const uint64 block_payload_size = 4 + frame->length();
 | 
			
		||||
  const uint64 block_elem_size =
 | 
			
		||||
      EbmlMasterElementSize(kMkvBlock, block_payload_size) + block_payload_size;
 | 
			
		||||
 | 
			
		||||
  const uint64_t block_group_payload_size =
 | 
			
		||||
  const uint64 block_group_payload_size =
 | 
			
		||||
      block_elem_size + block_additions_elem_size + block_duration_elem_size +
 | 
			
		||||
      discard_padding_elem_size + reference_block_elem_size;
 | 
			
		||||
 | 
			
		||||
  if (!WriteEbmlMasterElement(writer, libwebm::kMkvBlockGroup,
 | 
			
		||||
  if (!WriteEbmlMasterElement(writer, kMkvBlockGroup,
 | 
			
		||||
                              block_group_payload_size)) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!WriteEbmlMasterElement(writer, libwebm::kMkvBlock, block_payload_size))
 | 
			
		||||
  if (!WriteEbmlMasterElement(writer, kMkvBlock, block_payload_size))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (WriteUInt(writer, frame->track_number()))
 | 
			
		||||
@@ -105,81 +105,77 @@ uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
  if (SerializeInt(writer, 0, 1))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (writer->Write(frame->frame(), static_cast<uint32_t>(frame->length())))
 | 
			
		||||
  if (writer->Write(frame->frame(), static_cast<uint32>(frame->length())))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (frame->additional()) {
 | 
			
		||||
    if (!WriteEbmlMasterElement(writer, libwebm::kMkvBlockAdditions,
 | 
			
		||||
    if (!WriteEbmlMasterElement(writer, kMkvBlockAdditions,
 | 
			
		||||
                                block_additions_payload_size)) {
 | 
			
		||||
      return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!WriteEbmlMasterElement(writer, libwebm::kMkvBlockMore,
 | 
			
		||||
                                block_more_payload_size))
 | 
			
		||||
    if (!WriteEbmlMasterElement(writer, kMkvBlockMore, block_more_payload_size))
 | 
			
		||||
      return 0;
 | 
			
		||||
 | 
			
		||||
    if (!WriteEbmlElement(writer, libwebm::kMkvBlockAddID, frame->add_id()))
 | 
			
		||||
    if (!WriteEbmlElement(writer, kMkvBlockAddID, frame->add_id()))
 | 
			
		||||
      return 0;
 | 
			
		||||
 | 
			
		||||
    if (!WriteEbmlElement(writer, libwebm::kMkvBlockAdditional,
 | 
			
		||||
                          frame->additional(), frame->additional_length())) {
 | 
			
		||||
    if (!WriteEbmlElement(writer, kMkvBlockAdditional, frame->additional(),
 | 
			
		||||
                          frame->additional_length())) {
 | 
			
		||||
      return 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (frame->discard_padding() != 0 &&
 | 
			
		||||
      !WriteEbmlElement(writer, libwebm::kMkvDiscardPadding,
 | 
			
		||||
                        frame->discard_padding())) {
 | 
			
		||||
      !WriteEbmlElement(writer, kMkvDiscardPadding, frame->discard_padding())) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!frame->is_key() &&
 | 
			
		||||
      !WriteEbmlElement(writer, libwebm::kMkvReferenceBlock,
 | 
			
		||||
      !WriteEbmlElement(writer, kMkvReferenceBlock,
 | 
			
		||||
                        reference_block_timestamp)) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (duration > 0 &&
 | 
			
		||||
      !WriteEbmlElement(writer, libwebm::kMkvBlockDuration, duration)) {
 | 
			
		||||
  if (duration > 0 && !WriteEbmlElement(writer, kMkvBlockDuration, duration)) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  return EbmlMasterElementSize(libwebm::kMkvBlockGroup,
 | 
			
		||||
                               block_group_payload_size) +
 | 
			
		||||
  return EbmlMasterElementSize(kMkvBlockGroup, block_group_payload_size) +
 | 
			
		||||
         block_group_payload_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t WriteSimpleBlock(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                          int64_t timecode) {
 | 
			
		||||
  if (WriteID(writer, libwebm::kMkvSimpleBlock))
 | 
			
		||||
uint64 WriteSimpleBlock(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                        int64 timecode) {
 | 
			
		||||
  if (WriteID(writer, kMkvSimpleBlock))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const int32_t size = static_cast<int32_t>(frame->length()) + 4;
 | 
			
		||||
  const int32 size = static_cast<int32>(frame->length()) + 4;
 | 
			
		||||
  if (WriteUInt(writer, size))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (WriteUInt(writer, static_cast<uint64_t>(frame->track_number())))
 | 
			
		||||
  if (WriteUInt(writer, static_cast<uint64>(frame->track_number())))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (SerializeInt(writer, timecode, 2))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  uint64_t flags = 0;
 | 
			
		||||
  uint64 flags = 0;
 | 
			
		||||
  if (frame->is_key())
 | 
			
		||||
    flags |= 0x80;
 | 
			
		||||
 | 
			
		||||
  if (SerializeInt(writer, flags, 1))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (writer->Write(frame->frame(), static_cast<uint32_t>(frame->length())))
 | 
			
		||||
  if (writer->Write(frame->frame(), static_cast<uint32>(frame->length())))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  return GetUIntSize(libwebm::kMkvSimpleBlock) + GetCodedUIntSize(size) + 4 +
 | 
			
		||||
  return GetUIntSize(kMkvSimpleBlock) + GetCodedUIntSize(size) + 4 +
 | 
			
		||||
         frame->length();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace
 | 
			
		||||
 | 
			
		||||
int32_t GetCodedUIntSize(uint64_t value) {
 | 
			
		||||
int32 GetCodedUIntSize(uint64 value) {
 | 
			
		||||
  if (value < 0x000000000000007FULL)
 | 
			
		||||
    return 1;
 | 
			
		||||
  else if (value < 0x0000000000003FFFULL)
 | 
			
		||||
@@ -197,7 +193,7 @@ int32_t GetCodedUIntSize(uint64_t value) {
 | 
			
		||||
  return 8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t GetUIntSize(uint64_t value) {
 | 
			
		||||
int32 GetUIntSize(uint64 value) {
 | 
			
		||||
  if (value < 0x0000000000000100ULL)
 | 
			
		||||
    return 1;
 | 
			
		||||
  else if (value < 0x0000000000010000ULL)
 | 
			
		||||
@@ -215,16 +211,16 @@ int32_t GetUIntSize(uint64_t value) {
 | 
			
		||||
  return 8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t GetIntSize(int64_t value) {
 | 
			
		||||
int32 GetIntSize(int64 value) {
 | 
			
		||||
  // Doubling the requested value ensures positive values with their high bit
 | 
			
		||||
  // set are written with 0-padding to avoid flipping the signedness.
 | 
			
		||||
  const uint64_t v = (value < 0) ? value ^ -1LL : value;
 | 
			
		||||
  const uint64 v = (value < 0) ? value ^ -1LL : value;
 | 
			
		||||
  return GetUIntSize(2 * v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlMasterElementSize(uint64_t type, uint64_t value) {
 | 
			
		||||
uint64 EbmlMasterElementSize(uint64 type, uint64 value) {
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  int32_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  int32 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += GetCodedUIntSize(value);
 | 
			
		||||
@@ -232,9 +228,9 @@ uint64_t EbmlMasterElementSize(uint64_t type, uint64_t value) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, int64_t value) {
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, int64 value) {
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  int32_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  int32 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += GetIntSize(value);
 | 
			
		||||
@@ -245,9 +241,9 @@ uint64_t EbmlElementSize(uint64_t type, int64_t value) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, uint64_t value) {
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, uint64 value) {
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  int32_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  int32 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += GetUIntSize(value);
 | 
			
		||||
@@ -258,9 +254,9 @@ uint64_t EbmlElementSize(uint64_t type, uint64_t value) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, float /* value */) {
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, float /* value */) {
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  uint64_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  uint64 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += sizeof(float);
 | 
			
		||||
@@ -271,12 +267,12 @@ uint64_t EbmlElementSize(uint64_t type, float /* value */) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, const char* value) {
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, const char* value) {
 | 
			
		||||
  if (!value)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  uint64_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  uint64 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += strlen(value);
 | 
			
		||||
@@ -287,12 +283,12 @@ uint64_t EbmlElementSize(uint64_t type, const char* value) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlElementSize(uint64_t type, const uint8_t* value, uint64_t size) {
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size) {
 | 
			
		||||
  if (!value)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  uint64_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  uint64 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += size;
 | 
			
		||||
@@ -303,9 +299,9 @@ uint64_t EbmlElementSize(uint64_t type, const uint8_t* value, uint64_t size) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t EbmlDateElementSize(uint64_t type) {
 | 
			
		||||
uint64 EbmlDateElementSize(uint64 type) {
 | 
			
		||||
  // Size of EBML ID
 | 
			
		||||
  uint64_t ebml_size = GetUIntSize(type);
 | 
			
		||||
  uint64 ebml_size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  // Datasize
 | 
			
		||||
  ebml_size += kDateElementSize;
 | 
			
		||||
@@ -316,18 +312,18 @@ uint64_t EbmlDateElementSize(uint64_t type) {
 | 
			
		||||
  return ebml_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t SerializeInt(IMkvWriter* writer, int64_t value, int32_t size) {
 | 
			
		||||
int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size) {
 | 
			
		||||
  if (!writer || size < 1 || size > 8)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  for (int32_t i = 1; i <= size; ++i) {
 | 
			
		||||
    const int32_t byte_count = size - i;
 | 
			
		||||
    const int32_t bit_count = byte_count * 8;
 | 
			
		||||
  for (int32 i = 1; i <= size; ++i) {
 | 
			
		||||
    const int32 byte_count = size - i;
 | 
			
		||||
    const int32 bit_count = byte_count * 8;
 | 
			
		||||
 | 
			
		||||
    const int64_t bb = value >> bit_count;
 | 
			
		||||
    const uint8_t b = static_cast<uint8_t>(bb);
 | 
			
		||||
    const int64 bb = value >> bit_count;
 | 
			
		||||
    const uint8 b = static_cast<uint8>(bb);
 | 
			
		||||
 | 
			
		||||
    const int32_t status = writer->Write(&b, 1);
 | 
			
		||||
    const int32 status = writer->Write(&b, 1);
 | 
			
		||||
 | 
			
		||||
    if (status < 0)
 | 
			
		||||
      return status;
 | 
			
		||||
@@ -336,26 +332,26 @@ int32_t SerializeInt(IMkvWriter* writer, int64_t value, int32_t size) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t SerializeFloat(IMkvWriter* writer, float f) {
 | 
			
		||||
int32 SerializeFloat(IMkvWriter* writer, float f) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  assert(sizeof(uint32_t) == sizeof(float));
 | 
			
		||||
  assert(sizeof(uint32) == sizeof(float));
 | 
			
		||||
  // This union is merely used to avoid a reinterpret_cast from float& to
 | 
			
		||||
  // uint32& which will result in violation of strict aliasing.
 | 
			
		||||
  union U32 {
 | 
			
		||||
    uint32_t u32;
 | 
			
		||||
    uint32 u32;
 | 
			
		||||
    float f;
 | 
			
		||||
  } value;
 | 
			
		||||
  value.f = f;
 | 
			
		||||
 | 
			
		||||
  for (int32_t i = 1; i <= 4; ++i) {
 | 
			
		||||
    const int32_t byte_count = 4 - i;
 | 
			
		||||
    const int32_t bit_count = byte_count * 8;
 | 
			
		||||
  for (int32 i = 1; i <= 4; ++i) {
 | 
			
		||||
    const int32 byte_count = 4 - i;
 | 
			
		||||
    const int32 bit_count = byte_count * 8;
 | 
			
		||||
 | 
			
		||||
    const uint8_t byte = static_cast<uint8_t>(value.u32 >> bit_count);
 | 
			
		||||
    const uint8 byte = static_cast<uint8>(value.u32 >> bit_count);
 | 
			
		||||
 | 
			
		||||
    const int32_t status = writer->Write(&byte, 1);
 | 
			
		||||
    const int32 status = writer->Write(&byte, 1);
 | 
			
		||||
 | 
			
		||||
    if (status < 0)
 | 
			
		||||
      return status;
 | 
			
		||||
@@ -364,21 +360,21 @@ int32_t SerializeFloat(IMkvWriter* writer, float f) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t WriteUInt(IMkvWriter* writer, uint64_t value) {
 | 
			
		||||
int32 WriteUInt(IMkvWriter* writer, uint64 value) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  int32_t size = GetCodedUIntSize(value);
 | 
			
		||||
  int32 size = GetCodedUIntSize(value);
 | 
			
		||||
 | 
			
		||||
  return WriteUIntSize(writer, value, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size) {
 | 
			
		||||
int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size) {
 | 
			
		||||
  if (!writer || size < 0 || size > 8)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  if (size > 0) {
 | 
			
		||||
    const uint64_t bit = 1LL << (size * 7);
 | 
			
		||||
    const uint64 bit = 1LL << (size * 7);
 | 
			
		||||
 | 
			
		||||
    if (value > (bit - 2))
 | 
			
		||||
      return -1;
 | 
			
		||||
@@ -386,11 +382,11 @@ int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size) {
 | 
			
		||||
    value |= bit;
 | 
			
		||||
  } else {
 | 
			
		||||
    size = 1;
 | 
			
		||||
    int64_t bit;
 | 
			
		||||
    int64 bit;
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
      bit = 1LL << (size * 7);
 | 
			
		||||
      const uint64_t max = bit - 2;
 | 
			
		||||
      const uint64 max = bit - 2;
 | 
			
		||||
 | 
			
		||||
      if (value <= max)
 | 
			
		||||
        break;
 | 
			
		||||
@@ -407,18 +403,18 @@ int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size) {
 | 
			
		||||
  return SerializeInt(writer, value, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t WriteID(IMkvWriter* writer, uint64_t type) {
 | 
			
		||||
int32 WriteID(IMkvWriter* writer, uint64 type) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  writer->ElementStartNotify(type, writer->Position());
 | 
			
		||||
 | 
			
		||||
  const int32_t size = GetUIntSize(type);
 | 
			
		||||
  const int32 size = GetUIntSize(type);
 | 
			
		||||
 | 
			
		||||
  return SerializeInt(writer, type, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlMasterElement(IMkvWriter* writer, uint64_t type, uint64_t size) {
 | 
			
		||||
bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 type, uint64 size) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
@@ -431,41 +427,41 @@ bool WriteEbmlMasterElement(IMkvWriter* writer, uint64_t type, uint64_t size) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value) {
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (WriteID(writer, type))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  const uint64_t size = GetUIntSize(value);
 | 
			
		||||
  const uint64 size = GetUIntSize(value);
 | 
			
		||||
  if (WriteUInt(writer, size))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (SerializeInt(writer, value, static_cast<int32_t>(size)))
 | 
			
		||||
  if (SerializeInt(writer, value, static_cast<int32>(size)))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, int64_t value) {
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (WriteID(writer, type))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const uint64_t size = GetIntSize(value);
 | 
			
		||||
  const uint64 size = GetIntSize(value);
 | 
			
		||||
  if (WriteUInt(writer, size))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (SerializeInt(writer, value, static_cast<int32_t>(size)))
 | 
			
		||||
  if (SerializeInt(writer, value, static_cast<int32>(size)))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, float value) {
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
@@ -481,25 +477,25 @@ bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, float value) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const char* value) {
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value) {
 | 
			
		||||
  if (!writer || !value)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (WriteID(writer, type))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  const uint64_t length = strlen(value);
 | 
			
		||||
  const uint64 length = strlen(value);
 | 
			
		||||
  if (WriteUInt(writer, length))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (writer->Write(value, static_cast<const uint32_t>(length)))
 | 
			
		||||
  if (writer->Write(value, static_cast<const uint32>(length)))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const uint8_t* value,
 | 
			
		||||
                      uint64_t size) {
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value,
 | 
			
		||||
                      uint64 size) {
 | 
			
		||||
  if (!writer || !value || size < 1)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
@@ -509,13 +505,13 @@ bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const uint8_t* value,
 | 
			
		||||
  if (WriteUInt(writer, size))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  if (writer->Write(value, static_cast<uint32_t>(size)))
 | 
			
		||||
  if (writer->Write(value, static_cast<uint32>(size)))
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool WriteEbmlDateElement(IMkvWriter* writer, uint64_t type, int64_t value) {
 | 
			
		||||
bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
@@ -531,8 +527,8 @@ bool WriteEbmlDateElement(IMkvWriter* writer, uint64_t type, int64_t value) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                    Cluster* cluster) {
 | 
			
		||||
uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                  Cluster* cluster) {
 | 
			
		||||
  if (!writer || !frame || !frame->IsValid() || !cluster ||
 | 
			
		||||
      !cluster->timecode_scale())
 | 
			
		||||
    return 0;
 | 
			
		||||
@@ -541,7 +537,7 @@ uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
  //  timecode for the cluster itself (remember that block timecode
 | 
			
		||||
  //  is a signed, 16-bit integer).  However, as a simplification we
 | 
			
		||||
  //  only permit non-negative cluster-relative timecodes for blocks.
 | 
			
		||||
  const int64_t relative_timecode = cluster->GetRelativeTimecode(
 | 
			
		||||
  const int64 relative_timecode = cluster->GetRelativeTimecode(
 | 
			
		||||
      frame->timestamp() / cluster->timecode_scale());
 | 
			
		||||
  if (relative_timecode < 0 || relative_timecode > kMaxBlockTimecode)
 | 
			
		||||
    return 0;
 | 
			
		||||
@@ -552,53 +548,53 @@ uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                        cluster->timecode_scale());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t WriteVoidElement(IMkvWriter* writer, uint64_t size) {
 | 
			
		||||
uint64 WriteVoidElement(IMkvWriter* writer, uint64 size) {
 | 
			
		||||
  if (!writer)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  // Subtract one for the void ID and the coded size.
 | 
			
		||||
  uint64_t void_entry_size = size - 1 - GetCodedUIntSize(size - 1);
 | 
			
		||||
  uint64_t void_size =
 | 
			
		||||
      EbmlMasterElementSize(libwebm::kMkvVoid, void_entry_size) +
 | 
			
		||||
      void_entry_size;
 | 
			
		||||
  uint64 void_entry_size = size - 1 - GetCodedUIntSize(size - 1);
 | 
			
		||||
  uint64 void_size =
 | 
			
		||||
      EbmlMasterElementSize(kMkvVoid, void_entry_size) + void_entry_size;
 | 
			
		||||
 | 
			
		||||
  if (void_size != size)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const int64_t payload_position = writer->Position();
 | 
			
		||||
  const int64 payload_position = writer->Position();
 | 
			
		||||
  if (payload_position < 0)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (WriteID(writer, libwebm::kMkvVoid))
 | 
			
		||||
  if (WriteID(writer, kMkvVoid))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (WriteUInt(writer, void_entry_size))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  const uint8_t value = 0;
 | 
			
		||||
  for (int32_t i = 0; i < static_cast<int32_t>(void_entry_size); ++i) {
 | 
			
		||||
  const uint8 value = 0;
 | 
			
		||||
  for (int32 i = 0; i < static_cast<int32>(void_entry_size); ++i) {
 | 
			
		||||
    if (writer->Write(&value, 1))
 | 
			
		||||
      return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const int64_t stop_position = writer->Position();
 | 
			
		||||
  const int64 stop_position = writer->Position();
 | 
			
		||||
  if (stop_position < 0 ||
 | 
			
		||||
      stop_position - payload_position != static_cast<int64_t>(void_size))
 | 
			
		||||
      stop_position - payload_position != static_cast<int64>(void_size))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  return void_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GetVersion(int32_t* major, int32_t* minor, int32_t* build,
 | 
			
		||||
                int32_t* revision) {
 | 
			
		||||
void GetVersion(int32* major, int32* minor, int32* build, int32* revision) {
 | 
			
		||||
  *major = 0;
 | 
			
		||||
  *minor = 2;
 | 
			
		||||
  *build = 1;
 | 
			
		||||
  *revision = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint64_t MakeUID(unsigned int* seed) {
 | 
			
		||||
  uint64_t uid = 0;
 | 
			
		||||
}  // namespace mkvmuxer
 | 
			
		||||
 | 
			
		||||
mkvmuxer::uint64 mkvmuxer::MakeUID(unsigned int* seed) {
 | 
			
		||||
  uint64 uid = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef __MINGW32__
 | 
			
		||||
  srand(*seed);
 | 
			
		||||
@@ -610,26 +606,24 @@ uint64_t MakeUID(unsigned int* seed) {
 | 
			
		||||
// TODO(fgalligan): Move random number generation to platform specific code.
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
    (void)seed;
 | 
			
		||||
    const int32_t nn = rand();
 | 
			
		||||
    const int32 nn = rand();
 | 
			
		||||
#elif __ANDROID__
 | 
			
		||||
    int32_t temp_num = 1;
 | 
			
		||||
    int32 temp_num = 1;
 | 
			
		||||
    int fd = open("/dev/urandom", O_RDONLY);
 | 
			
		||||
    if (fd != -1) {
 | 
			
		||||
      read(fd, &temp_num, sizeof(temp_num));
 | 
			
		||||
      read(fd, &temp_num, sizeof(int32));
 | 
			
		||||
      close(fd);
 | 
			
		||||
    }
 | 
			
		||||
    const int32_t nn = temp_num;
 | 
			
		||||
    const int32 nn = temp_num;
 | 
			
		||||
#elif defined __MINGW32__
 | 
			
		||||
    const int32_t nn = rand();
 | 
			
		||||
    const int32 nn = rand();
 | 
			
		||||
#else
 | 
			
		||||
    const int32_t nn = rand_r(seed);
 | 
			
		||||
    const int32 nn = rand_r(seed);
 | 
			
		||||
#endif
 | 
			
		||||
    const int32_t n = 0xFF & (nn >> 4);  // throw away low-order bits
 | 
			
		||||
    const int32 n = 0xFF & (nn >> 4);  // throw away low-order bits
 | 
			
		||||
 | 
			
		||||
    uid |= n;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return uid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvmuxer
 | 
			
		||||
							
								
								
									
										83
									
								
								third_party/libwebm/mkvmuxerutil.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								third_party/libwebm/mkvmuxerutil.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
// 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.
 | 
			
		||||
 | 
			
		||||
#ifndef MKVMUXERUTIL_HPP
 | 
			
		||||
#define MKVMUXERUTIL_HPP
 | 
			
		||||
 | 
			
		||||
#include "mkvmuxer.hpp"
 | 
			
		||||
#include "mkvmuxertypes.hpp"
 | 
			
		||||
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
 | 
			
		||||
class IMkvWriter;
 | 
			
		||||
 | 
			
		||||
const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL;
 | 
			
		||||
const int64 kMaxBlockTimecode = 0x07FFFLL;
 | 
			
		||||
 | 
			
		||||
// Writes out |value| in Big Endian order. Returns 0 on success.
 | 
			
		||||
int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size);
 | 
			
		||||
 | 
			
		||||
// Returns the size in bytes of the element.
 | 
			
		||||
int32 GetUIntSize(uint64 value);
 | 
			
		||||
int32 GetIntSize(int64 value);
 | 
			
		||||
int32 GetCodedUIntSize(uint64 value);
 | 
			
		||||
uint64 EbmlMasterElementSize(uint64 type, uint64 value);
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, int64 value);
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, uint64 value);
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, float value);
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, const char* value);
 | 
			
		||||
uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size);
 | 
			
		||||
uint64 EbmlDateElementSize(uint64 type);
 | 
			
		||||
 | 
			
		||||
// Creates an EBML coded number from |value| and writes it out. The size of
 | 
			
		||||
// the coded number is determined by the value of |value|. |value| must not
 | 
			
		||||
// be in a coded form. Returns 0 on success.
 | 
			
		||||
int32 WriteUInt(IMkvWriter* writer, uint64 value);
 | 
			
		||||
 | 
			
		||||
// Creates an EBML coded number from |value| and writes it out. The size of
 | 
			
		||||
// the coded number is determined by the value of |size|. |value| must not
 | 
			
		||||
// be in a coded form. Returns 0 on success.
 | 
			
		||||
int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size);
 | 
			
		||||
 | 
			
		||||
// Output an Mkv master element. Returns true if the element was written.
 | 
			
		||||
bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size);
 | 
			
		||||
 | 
			
		||||
// Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the
 | 
			
		||||
// ID to |SerializeInt|. Returns 0 on success.
 | 
			
		||||
int32 WriteID(IMkvWriter* writer, uint64 type);
 | 
			
		||||
 | 
			
		||||
// Output an Mkv non-master element. Returns true if the element was written.
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value);
 | 
			
		||||
bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value,
 | 
			
		||||
                      uint64 size);
 | 
			
		||||
bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value);
 | 
			
		||||
 | 
			
		||||
// Output a Mkv Frame. It decides the correct element to write (Block vs
 | 
			
		||||
// SimpleBlock) based on the parameters of the Frame.
 | 
			
		||||
uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame,
 | 
			
		||||
                  Cluster* cluster);
 | 
			
		||||
 | 
			
		||||
// Output a void element. |size| must be the entire size in bytes that will be
 | 
			
		||||
// void. The function will calculate the size of the void header and subtract
 | 
			
		||||
// it from |size|.
 | 
			
		||||
uint64 WriteVoidElement(IMkvWriter* writer, uint64 size);
 | 
			
		||||
 | 
			
		||||
// Returns the version number of the muxer in |major|, |minor|, |build|,
 | 
			
		||||
// and |revision|.
 | 
			
		||||
void GetVersion(int32* major, int32* minor, int32* build, int32* revision);
 | 
			
		||||
 | 
			
		||||
// Returns a random number to be used for UID, using |seed| to seed
 | 
			
		||||
// the random-number generator (see POSIX rand_r() for semantics).
 | 
			
		||||
uint64 MakeUID(unsigned int* seed);
 | 
			
		||||
 | 
			
		||||
}  // end namespace mkvmuxer
 | 
			
		||||
 | 
			
		||||
#endif  // MKVMUXERUTIL_HPP
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -5,10 +5,13 @@
 | 
			
		||||
// 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.
 | 
			
		||||
#ifndef MKVPARSER_MKVPARSER_H_
 | 
			
		||||
#define MKVPARSER_MKVPARSER_H_
 | 
			
		||||
 | 
			
		||||
#ifndef MKVPARSER_HPP
 | 
			
		||||
#define MKVPARSER_HPP
 | 
			
		||||
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
 | 
			
		||||
namespace mkvparser {
 | 
			
		||||
 | 
			
		||||
@@ -25,9 +28,8 @@ class IMkvReader {
 | 
			
		||||
  virtual ~IMkvReader();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename Type>
 | 
			
		||||
Type* SafeArrayAlloc(unsigned long long num_elements,
 | 
			
		||||
                     unsigned long long element_size);
 | 
			
		||||
template<typename Type> Type* SafeArrayAlloc(unsigned long long num_elements,
 | 
			
		||||
                                             unsigned long long element_size);
 | 
			
		||||
long long GetUIntLength(IMkvReader*, long long, long&);
 | 
			
		||||
long long ReadUInt(IMkvReader*, long long, long&);
 | 
			
		||||
long long ReadID(IMkvReader* pReader, long long pos, long& len);
 | 
			
		||||
@@ -126,7 +128,7 @@ class BlockEntry {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~BlockEntry();
 | 
			
		||||
 | 
			
		||||
  bool EOS() const { return (GetKind() == kBlockEOS); }
 | 
			
		||||
  bool EOS() const;
 | 
			
		||||
  const Cluster* GetCluster() const;
 | 
			
		||||
  long GetIndex() const;
 | 
			
		||||
  virtual const Block* GetBlock() const = 0;
 | 
			
		||||
@@ -389,90 +391,6 @@ class Track {
 | 
			
		||||
  ContentEncoding** content_encoding_entries_end_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct PrimaryChromaticity {
 | 
			
		||||
  PrimaryChromaticity() : x(0), y(0) {}
 | 
			
		||||
  ~PrimaryChromaticity() {}
 | 
			
		||||
  static bool Parse(IMkvReader* reader, long long read_pos,
 | 
			
		||||
                    long long value_size, bool is_x,
 | 
			
		||||
                    PrimaryChromaticity** chromaticity);
 | 
			
		||||
  float x;
 | 
			
		||||
  float y;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct MasteringMetadata {
 | 
			
		||||
  static const float kValueNotPresent;
 | 
			
		||||
 | 
			
		||||
  MasteringMetadata()
 | 
			
		||||
      : r(NULL),
 | 
			
		||||
        g(NULL),
 | 
			
		||||
        b(NULL),
 | 
			
		||||
        white_point(NULL),
 | 
			
		||||
        luminance_max(kValueNotPresent),
 | 
			
		||||
        luminance_min(kValueNotPresent) {}
 | 
			
		||||
  ~MasteringMetadata() {
 | 
			
		||||
    delete r;
 | 
			
		||||
    delete g;
 | 
			
		||||
    delete b;
 | 
			
		||||
    delete white_point;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static bool Parse(IMkvReader* reader, long long element_start,
 | 
			
		||||
                    long long element_size,
 | 
			
		||||
                    MasteringMetadata** mastering_metadata);
 | 
			
		||||
 | 
			
		||||
  PrimaryChromaticity* r;
 | 
			
		||||
  PrimaryChromaticity* g;
 | 
			
		||||
  PrimaryChromaticity* b;
 | 
			
		||||
  PrimaryChromaticity* white_point;
 | 
			
		||||
  float luminance_max;
 | 
			
		||||
  float luminance_min;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct Colour {
 | 
			
		||||
  static const long long kValueNotPresent;
 | 
			
		||||
 | 
			
		||||
  // Unless otherwise noted all values assigned upon construction are the
 | 
			
		||||
  // equivalent of unspecified/default.
 | 
			
		||||
  Colour()
 | 
			
		||||
      : matrix_coefficients(kValueNotPresent),
 | 
			
		||||
        bits_per_channel(kValueNotPresent),
 | 
			
		||||
        chroma_subsampling_horz(kValueNotPresent),
 | 
			
		||||
        chroma_subsampling_vert(kValueNotPresent),
 | 
			
		||||
        cb_subsampling_horz(kValueNotPresent),
 | 
			
		||||
        cb_subsampling_vert(kValueNotPresent),
 | 
			
		||||
        chroma_siting_horz(kValueNotPresent),
 | 
			
		||||
        chroma_siting_vert(kValueNotPresent),
 | 
			
		||||
        range(kValueNotPresent),
 | 
			
		||||
        transfer_characteristics(kValueNotPresent),
 | 
			
		||||
        primaries(kValueNotPresent),
 | 
			
		||||
        max_cll(kValueNotPresent),
 | 
			
		||||
        max_fall(kValueNotPresent),
 | 
			
		||||
        mastering_metadata(NULL) {}
 | 
			
		||||
  ~Colour() {
 | 
			
		||||
    delete mastering_metadata;
 | 
			
		||||
    mastering_metadata = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static bool Parse(IMkvReader* reader, long long element_start,
 | 
			
		||||
                    long long element_size, Colour** colour);
 | 
			
		||||
 | 
			
		||||
  long long matrix_coefficients;
 | 
			
		||||
  long long bits_per_channel;
 | 
			
		||||
  long long chroma_subsampling_horz;
 | 
			
		||||
  long long chroma_subsampling_vert;
 | 
			
		||||
  long long cb_subsampling_horz;
 | 
			
		||||
  long long cb_subsampling_vert;
 | 
			
		||||
  long long chroma_siting_horz;
 | 
			
		||||
  long long chroma_siting_vert;
 | 
			
		||||
  long long range;
 | 
			
		||||
  long long transfer_characteristics;
 | 
			
		||||
  long long primaries;
 | 
			
		||||
  long long max_cll;
 | 
			
		||||
  long long max_fall;
 | 
			
		||||
 | 
			
		||||
  MasteringMetadata* mastering_metadata;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class VideoTrack : public Track {
 | 
			
		||||
  VideoTrack(const VideoTrack&);
 | 
			
		||||
  VideoTrack& operator=(const VideoTrack&);
 | 
			
		||||
@@ -480,7 +398,6 @@ class VideoTrack : public Track {
 | 
			
		||||
  VideoTrack(Segment*, long long element_start, long long element_size);
 | 
			
		||||
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~VideoTrack();
 | 
			
		||||
  static long Parse(Segment*, const Info&, long long element_start,
 | 
			
		||||
                    long long element_size, VideoTrack*&);
 | 
			
		||||
 | 
			
		||||
@@ -495,8 +412,6 @@ class VideoTrack : public Track {
 | 
			
		||||
  bool VetEntry(const BlockEntry*) const;
 | 
			
		||||
  long Seek(long long time_ns, const BlockEntry*&) const;
 | 
			
		||||
 | 
			
		||||
  Colour* GetColour() const;
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  long long m_width;
 | 
			
		||||
  long long m_height;
 | 
			
		||||
@@ -506,8 +421,6 @@ class VideoTrack : public Track {
 | 
			
		||||
  long long m_stereo_mode;
 | 
			
		||||
 | 
			
		||||
  double m_rate;
 | 
			
		||||
 | 
			
		||||
  Colour* m_colour;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class AudioTrack : public Track {
 | 
			
		||||
@@ -1100,7 +1013,7 @@ class Segment {
 | 
			
		||||
  const BlockEntry* GetBlock(const CuePoint&, const CuePoint::TrackPosition&);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvparser
 | 
			
		||||
}  // end namespace mkvparser
 | 
			
		||||
 | 
			
		||||
inline long mkvparser::Segment::LoadCluster() {
 | 
			
		||||
  long long pos;
 | 
			
		||||
@@ -1109,4 +1022,4 @@ inline long mkvparser::Segment::LoadCluster() {
 | 
			
		||||
  return LoadCluster(pos, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif  // MKVPARSER_MKVPARSER_H_
 | 
			
		||||
#endif  // MKVPARSER_HPP
 | 
			
		||||
@@ -5,7 +5,8 @@
 | 
			
		||||
// 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 "mkvparser/mkvreader.h"
 | 
			
		||||
 | 
			
		||||
#include "mkvreader.hpp"
 | 
			
		||||
 | 
			
		||||
#include <cassert>
 | 
			
		||||
 | 
			
		||||
@@ -128,4 +129,4 @@ int MkvReader::Read(long long offset, long len, unsigned char* buffer) {
 | 
			
		||||
  return 0;  // success
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvparser
 | 
			
		||||
}  // end namespace mkvparser
 | 
			
		||||
@@ -5,13 +5,13 @@
 | 
			
		||||
// 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.
 | 
			
		||||
#ifndef MKVPARSER_MKVREADER_H_
 | 
			
		||||
#define MKVPARSER_MKVREADER_H_
 | 
			
		||||
 | 
			
		||||
#ifndef MKVREADER_HPP
 | 
			
		||||
#define MKVREADER_HPP
 | 
			
		||||
 | 
			
		||||
#include "mkvparser.hpp"
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
 | 
			
		||||
#include "mkvparser/mkvparser.h"
 | 
			
		||||
 | 
			
		||||
namespace mkvparser {
 | 
			
		||||
 | 
			
		||||
class MkvReader : public IMkvReader {
 | 
			
		||||
@@ -40,6 +40,6 @@ class MkvReader : public IMkvReader {
 | 
			
		||||
  bool reader_owns_file_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvparser
 | 
			
		||||
}  // end namespace mkvparser
 | 
			
		||||
 | 
			
		||||
#endif  // MKVPARSER_MKVREADER_H_
 | 
			
		||||
#endif  // MKVREADER_HPP
 | 
			
		||||
@@ -6,12 +6,14 @@
 | 
			
		||||
// 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"
 | 
			
		||||
#include "mkvwriter.hpp"
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#include <share.h>  // for _SH_DENYWR
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <new>
 | 
			
		||||
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
 | 
			
		||||
MkvWriter::MkvWriter() : file_(NULL), writer_owns_file_(true) {}
 | 
			
		||||
@@ -20,7 +22,7 @@ MkvWriter::MkvWriter(FILE* fp) : file_(fp), writer_owns_file_(false) {}
 | 
			
		||||
 | 
			
		||||
MkvWriter::~MkvWriter() { Close(); }
 | 
			
		||||
 | 
			
		||||
int32_t MkvWriter::Write(const void* buffer, uint32_t length) {
 | 
			
		||||
int32 MkvWriter::Write(const void* buffer, uint32 length) {
 | 
			
		||||
  if (!file_)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
@@ -59,7 +61,7 @@ void MkvWriter::Close() {
 | 
			
		||||
  file_ = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int64_t MkvWriter::Position() const {
 | 
			
		||||
int64 MkvWriter::Position() const {
 | 
			
		||||
  if (!file_)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
@@ -70,7 +72,7 @@ int64_t MkvWriter::Position() const {
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t MkvWriter::Position(int64_t position) {
 | 
			
		||||
int32 MkvWriter::Position(int64 position) {
 | 
			
		||||
  if (!file_)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
@@ -83,6 +85,6 @@ int32_t MkvWriter::Position(int64_t position) {
 | 
			
		||||
 | 
			
		||||
bool MkvWriter::Seekable() const { return true; }
 | 
			
		||||
 | 
			
		||||
void MkvWriter::ElementStartNotify(uint64_t, int64_t) {}
 | 
			
		||||
void MkvWriter::ElementStartNotify(uint64, int64) {}
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvmuxer
 | 
			
		||||
@@ -6,13 +6,13 @@
 | 
			
		||||
// in the file PATENTS.  All contributing project authors may
 | 
			
		||||
// be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
 | 
			
		||||
#ifndef MKVMUXER_MKVWRITER_H_
 | 
			
		||||
#define MKVMUXER_MKVWRITER_H_
 | 
			
		||||
#ifndef MKVWRITER_HPP
 | 
			
		||||
#define MKVWRITER_HPP
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include "mkvmuxer/mkvmuxer.h"
 | 
			
		||||
#include "mkvmuxer/mkvmuxertypes.h"
 | 
			
		||||
#include "mkvmuxer.hpp"
 | 
			
		||||
#include "mkvmuxertypes.hpp"
 | 
			
		||||
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
 | 
			
		||||
@@ -24,11 +24,11 @@ class MkvWriter : public IMkvWriter {
 | 
			
		||||
  virtual ~MkvWriter();
 | 
			
		||||
 | 
			
		||||
  // IMkvWriter interface
 | 
			
		||||
  virtual int64_t Position() const;
 | 
			
		||||
  virtual int32_t Position(int64_t position);
 | 
			
		||||
  virtual int64 Position() const;
 | 
			
		||||
  virtual int32 Position(int64 position);
 | 
			
		||||
  virtual bool Seekable() const;
 | 
			
		||||
  virtual int32_t Write(const void* buffer, uint32_t length);
 | 
			
		||||
  virtual void ElementStartNotify(uint64_t element_id, int64_t position);
 | 
			
		||||
  virtual int32 Write(const void* buffer, uint32 length);
 | 
			
		||||
  virtual void ElementStartNotify(uint64 element_id, int64 position);
 | 
			
		||||
 | 
			
		||||
  // Creates and opens a file for writing. |filename| is the name of the file
 | 
			
		||||
  // to open. This function will overwrite the contents of |filename|. Returns
 | 
			
		||||
@@ -46,6 +46,6 @@ class MkvWriter : public IMkvWriter {
 | 
			
		||||
  LIBWEBM_DISALLOW_COPY_AND_ASSIGN(MkvWriter);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace mkvmuxer
 | 
			
		||||
}  // end namespace mkvmuxer
 | 
			
		||||
 | 
			
		||||
#endif  // MKVMUXER_MKVWRITER_H_
 | 
			
		||||
#endif  // MKVWRITER_HPP
 | 
			
		||||
@@ -6,10 +6,10 @@
 | 
			
		||||
// in the file PATENTS.  All contributing project authors may
 | 
			
		||||
// be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
 | 
			
		||||
#ifndef COMMON_WEBMIDS_H_
 | 
			
		||||
#define COMMON_WEBMIDS_H_
 | 
			
		||||
#ifndef WEBMIDS_HPP
 | 
			
		||||
#define WEBMIDS_HPP
 | 
			
		||||
 | 
			
		||||
namespace libwebm {
 | 
			
		||||
namespace mkvmuxer {
 | 
			
		||||
 | 
			
		||||
enum MkvId {
 | 
			
		||||
  kMkvEBML = 0x1A45DFA3,
 | 
			
		||||
@@ -95,35 +95,6 @@ enum MkvId {
 | 
			
		||||
  kMkvAspectRatioType = 0x54B3,
 | 
			
		||||
  kMkvFrameRate = 0x2383E3,
 | 
			
		||||
  // end video
 | 
			
		||||
  // colour
 | 
			
		||||
  kMkvColour = 0x55B0,
 | 
			
		||||
  kMkvMatrixCoefficients = 0x55B1,
 | 
			
		||||
  kMkvBitsPerChannel = 0x55B2,
 | 
			
		||||
  kMkvChromaSubsamplingHorz = 0x55B3,
 | 
			
		||||
  kMkvChromaSubsamplingVert = 0x55B4,
 | 
			
		||||
  kMkvCbSubsamplingHorz = 0x55B5,
 | 
			
		||||
  kMkvCbSubsamplingVert = 0x55B6,
 | 
			
		||||
  kMkvChromaSitingHorz = 0x55B7,
 | 
			
		||||
  kMkvChromaSitingVert = 0x55B8,
 | 
			
		||||
  kMkvRange = 0x55B9,
 | 
			
		||||
  kMkvTransferCharacteristics = 0x55BA,
 | 
			
		||||
  kMkvPrimaries = 0x55BB,
 | 
			
		||||
  kMkvMaxCLL = 0x55BC,
 | 
			
		||||
  kMkvMaxFALL = 0x55BD,
 | 
			
		||||
  // mastering metadata
 | 
			
		||||
  kMkvMasteringMetadata = 0x55D0,
 | 
			
		||||
  kMkvPrimaryRChromaticityX = 0x55D1,
 | 
			
		||||
  kMkvPrimaryRChromaticityY = 0x55D2,
 | 
			
		||||
  kMkvPrimaryGChromaticityX = 0x55D3,
 | 
			
		||||
  kMkvPrimaryGChromaticityY = 0x55D4,
 | 
			
		||||
  kMkvPrimaryBChromaticityX = 0x55D5,
 | 
			
		||||
  kMkvPrimaryBChromaticityY = 0x55D6,
 | 
			
		||||
  kMkvWhitePointChromaticityX = 0x55D7,
 | 
			
		||||
  kMkvWhitePointChromaticityY = 0x55D8,
 | 
			
		||||
  kMkvLuminanceMax = 0x55D9,
 | 
			
		||||
  kMkvLuminanceMin = 0x55DA,
 | 
			
		||||
  // end mastering metadata
 | 
			
		||||
  // end colour
 | 
			
		||||
  // audio
 | 
			
		||||
  kMkvAudio = 0xE1,
 | 
			
		||||
  kMkvSamplingFrequency = 0xB5,
 | 
			
		||||
@@ -179,6 +150,6 @@ enum MkvId {
 | 
			
		||||
  kMkvTagString = 0x4487
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace libwebm
 | 
			
		||||
}  // end namespace mkvmuxer
 | 
			
		||||
 | 
			
		||||
#endif  // COMMON_WEBMIDS_H_
 | 
			
		||||
#endif  // WEBMIDS_HPP
 | 
			
		||||
@@ -13,8 +13,8 @@
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
 | 
			
		||||
#include "third_party/libwebm/mkvparser/mkvparser.h"
 | 
			
		||||
#include "third_party/libwebm/mkvparser/mkvreader.h"
 | 
			
		||||
#include "third_party/libwebm/mkvparser.hpp"
 | 
			
		||||
#include "third_party/libwebm/mkvreader.hpp"
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,9 +11,9 @@
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#include "third_party/libwebm/mkvmuxer/mkvmuxer.h"
 | 
			
		||||
#include "third_party/libwebm/mkvmuxer/mkvmuxerutil.h"
 | 
			
		||||
#include "third_party/libwebm/mkvmuxer/mkvwriter.h"
 | 
			
		||||
#include "third_party/libwebm/mkvmuxer.hpp"
 | 
			
		||||
#include "third_party/libwebm/mkvmuxerutil.hpp"
 | 
			
		||||
#include "third_party/libwebm/mkvwriter.hpp"
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
const uint64_t kDebugTrackUid = 0xDEADBEEF;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user