diff options
author | Maxim Baz | 2018-05-30 22:32:47 +0200 |
---|---|---|
committer | Maxim Baz | 2018-05-31 23:27:06 +0200 |
commit | 520b1cd98bb68ac0745ff9e7e11a9d17f325ff64 (patch) | |
tree | 649469a7890e1e93c8f9542405c45d57c0dcb8f7 | |
parent | e3f62740eeb888fea32bbce4d536bb32433b53cc (diff) | |
download | aur-520b1cd98bb68ac0745ff9e7e11a9d17f325ff64.tar.gz |
Update to 67.0.3396.62
-rw-r--r-- | .SRCINFO | 23 | ||||
-rw-r--r-- | PKGBUILD | 73 | ||||
-rw-r--r-- | chromium-ffmpeg-r1.patch | 22 | ||||
-rw-r--r-- | chromium-vaapi-r18.patch | 58 | ||||
-rw-r--r-- | chromium-widevine-r2.patch | 39 | ||||
-rw-r--r-- | chromium-widevine.patch | 10 | ||||
-rw-r--r-- | fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch | 53 | ||||
-rw-r--r-- | fix-frame-buttons-rendering-too-large-when-using-OSX.patch | 60 | ||||
-rw-r--r-- | remove-dependency-on-ffmpeg-internals-for-start-time.patch | 260 |
9 files changed, 389 insertions, 209 deletions
@@ -1,6 +1,6 @@ pkgbase = chromium-vaapi pkgdesc = Chromium compiled with VA-API support for Intel Graphics - pkgver = 66.0.3359.181 + pkgver = 67.0.3396.62 pkgrel = 1 url = https://www.chromium.org/Home install = chromium.install @@ -33,6 +33,7 @@ pkgbase = chromium-vaapi depends = hicolor-icon-theme depends = libva depends = flac + depends = ffmpeg depends = fontconfig depends = icu depends = opus @@ -51,22 +52,20 @@ pkgbase = chromium-vaapi optdepends = libva-intel-driver: Needed to support VA-API for Intel graphics cards provides = chromium conflicts = chromium - source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-66.0.3359.181.tar.xz + source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-67.0.3396.62.tar.xz source = chromium-launcher-6.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v6.tar.gz - source = chromium-66.0.3359.181.txt::https://chromium.googlesource.com/chromium/src/+/66.0.3359.181?format=TEXT - source = fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch - source = fix-frame-buttons-rendering-too-large-when-using-OSX.patch + source = remove-dependency-on-ffmpeg-internals-for-start-time.patch + source = chromium-ffmpeg-r1.patch + source = chromium-widevine-r2.patch source = chromium-skia-harmony.patch - source = chromium-widevine.patch source = chromium-vaapi-r18.patch - sha256sums = 37e6673741b365a25a837217b08f77b24b4f5fc4ad88c8581be6a5dae9a9e919 + sha256sums = d5ee63932ff1c8c4a5f69c834f6577e7127b416681eddd23bc54886caffd770d sha256sums = 04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1 - sha256sums = 221d0f17951e88d4d315f3160919380237b88587c4b295d619229a05b79927f1 - sha256sums = e3fb73b43bb8c69ff517e66b2cac73d6e759fd240003eb35598df9af442422fe - sha256sums = bd5e0e61df3f89172590801aea7c8ac75162c10c7fe83e262e96a14388d1633a + sha256sums = 2cc80f5ed8a9b42495a0f3ab3c1bae026b9081972269a1b6d407331d33f7d257 + sha256sums = aa885330bc4180b78d915f9dfdfc3210038a0acab7b16735ea9828ab6a633bde + sha256sums = 02c69bb3954087db599def7f5b6d65cf8f7cf2ed81dfbdaa4bb7b51863b4df15 sha256sums = feca54ab09ac0fc9d0626770a6b899a6ac5a12173c7d0c1005bc3964ec83e7b3 - sha256sums = d6fdcb922e5a7fbe15759d39ccc8ea4225821c44d98054ce0f23f9d1f00c9808 - sha256sums = 514f40accb2b4bc439df43f11bb7154a812eeb9fa61777b3d986cfa6bb109ebd + sha256sums = a7dbcbfc5ec18606c260df67b98fb2440fe59a4c9ede0823fc43f3bcf439887b pkgname = chromium-vaapi @@ -10,7 +10,7 @@ # Contributor: Daniel J Griffiths <ghost1227@archlinux.us> pkgname=chromium-vaapi -pkgver=66.0.3359.181 +pkgver=67.0.3396.62 pkgrel=1 _launcher_ver=6 pkgdesc="Chromium compiled with VA-API support for Intel Graphics" @@ -32,25 +32,23 @@ optdepends=('pepper-flash: support for Flash content' install=chromium.install source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz chromium-launcher-$_launcher_ver.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver.tar.gz - chromium-$pkgver.txt::https://chromium.googlesource.com/chromium/src/+/$pkgver?format=TEXT - fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch - fix-frame-buttons-rendering-too-large-when-using-OSX.patch + remove-dependency-on-ffmpeg-internals-for-start-time.patch + chromium-ffmpeg-r1.patch + chromium-widevine-r2.patch chromium-skia-harmony.patch - chromium-widevine.patch chromium-vaapi-r18.patch) -sha256sums=('37e6673741b365a25a837217b08f77b24b4f5fc4ad88c8581be6a5dae9a9e919' +sha256sums=('d5ee63932ff1c8c4a5f69c834f6577e7127b416681eddd23bc54886caffd770d' '04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1' - '221d0f17951e88d4d315f3160919380237b88587c4b295d619229a05b79927f1' - 'e3fb73b43bb8c69ff517e66b2cac73d6e759fd240003eb35598df9af442422fe' - 'bd5e0e61df3f89172590801aea7c8ac75162c10c7fe83e262e96a14388d1633a' + '2cc80f5ed8a9b42495a0f3ab3c1bae026b9081972269a1b6d407331d33f7d257' + 'aa885330bc4180b78d915f9dfdfc3210038a0acab7b16735ea9828ab6a633bde' + '02c69bb3954087db599def7f5b6d65cf8f7cf2ed81dfbdaa4bb7b51863b4df15' 'feca54ab09ac0fc9d0626770a6b899a6ac5a12173c7d0c1005bc3964ec83e7b3' - 'd6fdcb922e5a7fbe15759d39ccc8ea4225821c44d98054ce0f23f9d1f00c9808' - '514f40accb2b4bc439df43f11bb7154a812eeb9fa61777b3d986cfa6bb109ebd') + 'a7dbcbfc5ec18606c260df67b98fb2440fe59a4c9ede0823fc43f3bcf439887b') # Possible replacements are listed in build/linux/unbundle/replace_gn_files.py # Keys are the names in the above script; values are the dependencies in Arch declare -gA _system_libs=( - #[ffmpeg]=ffmpeg # https://crbug.com/731766 + [ffmpeg]=ffmpeg [flac]=flac [fontconfig]=fontconfig [freetype]=freetype2 @@ -59,7 +57,7 @@ declare -gA _system_libs=( [libdrm]= [libjpeg]=libjpeg #[libpng]=libpng # https://crbug.com/752403#c10 - #[libvpx]=libvpx + #[libvpx]=libvpx # needs unreleased libvpx [libwebp]=libwebp #[libxml]=libxml2 # https://crbug.com/736026 [libxslt]=libxslt @@ -85,38 +83,25 @@ _google_default_client_secret=0ZChLK6AxeA3Isu96MkwqDR4 prepare() { cd "$srcdir/chromium-$pkgver" - # https://crbug.com/710701 - local _chrome_build_hash=$(base64 -d ../chromium-$pkgver.txt | - grep -Po '^parent \K[0-9a-f]{40}$') - if [[ -z $_chrome_build_hash ]]; then - error "Unable to find Chrome build hash." - return 1 - fi - echo "LASTCHANGE=$_chrome_build_hash-" >build/util/LASTCHANGE - # Allow building against system libraries in official builds sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ tools/generate_shim_headers/generate_shim_headers.py - # Enable support for the Widevine CDM plugin - # libwidevinecdm.so is not included, but can be copied over from Chrome - # (Version string doesn't seem to matter so let's go with "Pinkie Pie") - sed "s/@WIDEVINE_VERSION@/Pinkie Pie/" ../chromium-widevine.patch | - patch -Np1 - - # Work around broken screen sharing in Google Meet - # https://crbug.com/829916#c16 - sed -i 's/"Chromium/"Chrome/' chrome/common/chrome_content_client_constants.cc - - # https://crbug.com/822820 - patch -Np1 -i ../fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch - - # https://crbug.com/821881 - patch -Np1 -i ../fix-frame-buttons-rendering-too-large-when-using-OSX.patch + # https://crbug.com/731766 + patch -Np1 -i ../remove-dependency-on-ffmpeg-internals-for-start-time.patch # https://crbug.com/skia/6663#c10 patch -Np4 -i ../chromium-skia-harmony.patch + # Fixes from Gentoo + patch -Np1 -i ../chromium-ffmpeg-r1.patch + patch -Np1 -i ../chromium-widevine-r2.patch + + # Remove compiler flags not supported by our system clang + sed -i \ + -e '/"-Wno-ignored-pragma-optimize"/d' \ + build/config/compiler/BUILD.gn + # Force script incompatible with Python 3 to use /usr/bin/python2 sed -i '1s|python$|&2|' third_party/dom_distiller_js/protoc_plugins/*.py @@ -132,12 +117,10 @@ prepare() { # added benefit of not having to list all the remaining libraries local _lib for _lib in ${_unwanted_bundled_libs[@]}; do - find -type f -path "*third_party/$_lib/*" \ - \! -path "*third_party/$_lib/chromium/*" \ - \! -path "*third_party/$_lib/google/*" \ - \! -path './base/third_party/icu/*' \ - \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ - \! -path './third_party/yasm/run_yasm.py' \ + find "third_party/$_lib" -type f \ + \! -path "third_party/$_lib/chromium/*" \ + \! -path "third_party/$_lib/google/*" \ + \! -path 'third_party/yasm/run_yasm.py' \ \! -regex '.*\.\(gn\|gni\|isolate\)' \ -delete done @@ -205,7 +188,7 @@ build() { out/Release/gn gen out/Release --args="${_flags[*]}" \ --script-executable=/usr/bin/python2 - ninja -C out/Release chrome chrome_sandbox chromedriver widevinecdmadapter + ninja -C out/Release chrome chrome_sandbox chromedriver } package() { @@ -233,7 +216,7 @@ package() { cp \ out/Release/{chrome_{100,200}_percent,resources}.pak \ - out/Release/{*.bin,chromedriver,libwidevinecdmadapter.so} \ + out/Release/{*.bin,chromedriver} \ "$pkgdir/usr/lib/chromium/" install -Dm644 -t "$pkgdir/usr/lib/chromium/locales" out/Release/locales/*.pak diff --git a/chromium-ffmpeg-r1.patch b/chromium-ffmpeg-r1.patch new file mode 100644 index 000000000000..53d61e8f38b8 --- /dev/null +++ b/chromium-ffmpeg-r1.patch @@ -0,0 +1,22 @@ +--- a/build/linux/unbundle/ffmpeg.gn ++++ b/build/linux/unbundle/ffmpeg.gn +@@ -14,8 +14,8 @@ pkg_config("system_ffmpeg") { + ] + } + +-buildflag_header("ffmpeg_buildflags") { +- header = "ffmpeg_buildflags.h" ++buildflag_header("ffmpeg_features") { ++ header = "ffmpeg_features.h" + flags = [ "USE_SYSTEM_FFMPEG=true" ] + } + +@@ -30,7 +30,7 @@ shim_headers("ffmpeg_shim") { + + source_set("ffmpeg") { + deps = [ +- ":ffmpeg_buildflags", ++ ":ffmpeg_features", + ":ffmpeg_shim", + ] + public_configs = [ ":system_ffmpeg" ] diff --git a/chromium-vaapi-r18.patch b/chromium-vaapi-r18.patch index 6ae81e139be0..c8f6cd53b1ab 100644 --- a/chromium-vaapi-r18.patch +++ b/chromium-vaapi-r18.patch @@ -36,7 +36,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -1234,12 +1234,14 @@ const FeatureEntry kFeatureEntries[] = { +@@ -1285,12 +1285,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kUiPartialSwapDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)}, #if BUILDFLAG(ENABLE_WEBRTC) @@ -51,7 +51,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> {"enable-webrtc-hw-h264-encoding", flag_descriptions::kWebrtcHwH264EncodingName, flag_descriptions::kWebrtcHwH264EncodingDescription, kOsAndroid | kOsCrOS, -@@ -1553,6 +1555,13 @@ const FeatureEntry kFeatureEntries[] = { +@@ -1613,6 +1615,13 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kShowTouchHudDescription, kOsCrOS, SINGLE_VALUE_TYPE(ash::switches::kAshTouchHud)}, #endif // OS_CHROMEOS @@ -65,7 +65,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> { "disable-accelerated-video-decode", flag_descriptions::kAcceleratedVideoDecodeName, -@@ -1560,6 +1569,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -1620,6 +1629,7 @@ const FeatureEntry kFeatureEntries[] = { kOsMac | kOsWin | kOsCrOS | kOsAndroid, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), }, @@ -73,7 +73,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> #if defined(OS_WIN) {"enable-hdr", flag_descriptions::kEnableHDRName, flag_descriptions::kEnableHDRDescription, kOsWin, -@@ -2283,12 +2293,17 @@ const FeatureEntry kFeatureEntries[] = { +@@ -2310,12 +2320,17 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kOpenVR)}, #endif // ENABLE_OPENVR #endif // ENABLE_VR @@ -117,8 +117,8 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> +#endif ::switches::kDisableBlinkFeatures, ::switches::kDisableCastStreamingHWEncoding, - ::switches::kDisableDistanceFieldText, -@@ -163,7 +169,7 @@ void DeriveCommandLine(const GURL& start + ::switches::kDisableGpu, +@@ -162,7 +168,7 @@ void DeriveCommandLine(const GURL& start ::switches::kDisableWebGLImageChromium, ::switches::kEnableWebGLImageChromium, ::switches::kEnableWebVR, @@ -143,7 +143,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> const char kAcceleratedVideoDecodeName[] = "Hardware-accelerated video decode"; const char kAcceleratedVideoDecodeDescription[] = "Hardware-accelerated video decode where available."; -@@ -1730,6 +1737,7 @@ const char kWebrtcEchoCanceller3Name[] = +@@ -1742,6 +1749,7 @@ const char kWebrtcEchoCanceller3Name[] = const char kWebrtcEchoCanceller3Description[] = "Experimental WebRTC echo canceller (AEC3)."; @@ -151,7 +151,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> const char kWebrtcHwDecodingName[] = "WebRTC hardware video decoding"; const char kWebrtcHwDecodingDescription[] = "Support in WebRTC for decoding video streams using platform hardware."; -@@ -1737,6 +1745,7 @@ const char kWebrtcHwDecodingDescription[ +@@ -1749,6 +1757,7 @@ const char kWebrtcHwDecodingDescription[ const char kWebrtcHwEncodingName[] = "WebRTC hardware video encoding"; const char kWebrtcHwEncodingDescription[] = "Support in WebRTC for encoding video streams using platform hardware."; @@ -159,7 +159,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> const char kWebrtcHwH264EncodingName[] = "WebRTC hardware h264 video encoding"; const char kWebrtcHwH264EncodingDescription[] = -@@ -2561,14 +2570,16 @@ const char kTabStripKeyboardFocusDescrip +@@ -2590,14 +2599,16 @@ const char kTabStripKeyboardFocusDescrip // Chrome OS ------------------------------------------------------------------- @@ -190,7 +190,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> extern const char kAcceleratedVideoDecodeName[]; extern const char kAcceleratedVideoDecodeDescription[]; -@@ -1569,13 +1573,17 @@ extern const char kPermissionPromptPersi +@@ -1589,13 +1593,17 @@ extern const char kPermissionPromptPersi #endif // defined(OS_MACOSX) @@ -213,10 +213,10 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> --- a/content/browser/gpu/compositor_util.cc +++ b/content/browser/gpu/compositor_util.cc -@@ -99,7 +99,11 @@ const GpuFeatureData GetGpuFeatureData(s +@@ -124,7 +124,11 @@ const GpuFeatureData GetGpuFeatureData(s {"video_decode", - manager->GetFeatureStatus( - gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE), + SafeGetFeatureStatus(manager, + gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE), +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) + !command_line.HasSwitch(switches::kEnableAcceleratedVideo), +#else @@ -227,7 +227,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> true}, --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc -@@ -132,7 +132,7 @@ static const char* const kSwitchNames[] +@@ -134,7 +134,7 @@ static const char* const kSwitchNames[] switches::kDisableGLExtensions, switches::kDisableLogging, switches::kDisableShaderNameHashing, @@ -238,7 +238,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> #if defined(OS_WIN) --- a/content/browser/renderer_host/media/video_capture_browsertest.cc +++ b/content/browser/renderer_host/media/video_capture_browsertest.cc -@@ -163,8 +163,13 @@ class VideoCaptureBrowserTest : public C +@@ -164,8 +164,13 @@ class VideoCaptureBrowserTest : public C base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kUseFakeJpegDecodeAccelerator); } else { @@ -282,7 +282,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> return; --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -2524,7 +2524,11 @@ void RenderProcessHostImpl::PropagateBro +@@ -2704,7 +2704,11 @@ void RenderProcessHostImpl::PropagateBro switches::kDefaultTileHeight, switches::kDisable2dCanvasImageChromium, switches::kDisableAcceleratedJpegDecoding, @@ -291,10 +291,10 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> +#else switches::kDisableAcceleratedVideoDecode, +#endif + switches::kDisableBackgroundTasks, switches::kDisableBackgroundTimerThrottling, switches::kDisableBreakpad, - switches::kDisableCompositorUkmForTests, -@@ -2658,8 +2662,10 @@ void RenderProcessHostImpl::PropagateBro +@@ -2842,8 +2846,10 @@ void RenderProcessHostImpl::PropagateBro switches::kDisableMojoRenderer, #endif #if BUILDFLAG(ENABLE_WEBRTC) @@ -307,7 +307,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> switches::kEnableWebRtcStunOrigin, --- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc +++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -@@ -58,7 +58,12 @@ class WebRtcMediaRecorderTest +@@ -66,7 +66,12 @@ class MAYBE_WebRtcMediaRecorderTest return; // This flag is also used for encoding, https://crbug.com/616640. base::CommandLine::ForCurrentProcess()->AppendSwitch( @@ -405,7 +405,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> // Disables hardware acceleration of video decode, where available. const char kDisableAcceleratedVideoDecode[] = "disable-accelerated-video-decode"; -@@ -859,11 +868,13 @@ const char kZygoteProcess[] +@@ -867,11 +876,13 @@ const char kZygoteProcess[] // ignores this switch on its stable and beta channels. const char kDisableWebRtcEncryption[] = "disable-webrtc-encryption"; @@ -433,7 +433,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> CONTENT_EXPORT extern const char kDisableAcceleratedVideoDecode[]; CONTENT_EXPORT extern const char kDisableAcceleratedVideoEncode[]; CONTENT_EXPORT extern const char kDisableAudioSupportForDesktopShare[]; -@@ -106,6 +110,9 @@ CONTENT_EXPORT extern const char kDisabl +@@ -107,6 +111,9 @@ CONTENT_EXPORT extern const char kDisabl CONTENT_EXPORT extern const char kDomAutomationController[]; extern const char kDisable2dCanvasClipAntialiasing[]; CONTENT_EXPORT extern const char kDumpBlinkRuntimeCallStats[]; @@ -443,7 +443,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> CONTENT_EXPORT extern const char kEnableAggressiveDOMStorageFlushing[]; CONTENT_EXPORT extern const char kEnableAutomation[]; CONTENT_EXPORT extern const char kEnablePreferCompositingToLCDText[]; -@@ -240,8 +247,10 @@ CONTENT_EXPORT extern const char kZygote +@@ -242,8 +249,10 @@ CONTENT_EXPORT extern const char kZygote #if BUILDFLAG(ENABLE_WEBRTC) CONTENT_EXPORT extern const char kDisableWebRtcEncryption[]; @@ -456,7 +456,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> CONTENT_EXPORT extern const char kEnableWebRtcStunOrigin[]; --- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc +++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -@@ -282,10 +282,18 @@ void PeerConnectionDependencyFactory::In +@@ -276,10 +276,18 @@ void PeerConnectionDependencyFactory::In const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) { @@ -477,9 +477,9 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -1581,7 +1581,11 @@ media::GpuVideoAcceleratorFactories* Ren - scoped_refptr<base::SingleThreadTaskRunner> media_task_runner = - GetMediaThreadTaskRunner(); +@@ -1578,7 +1578,11 @@ media::GpuVideoAcceleratorFactories* Ren + kGpuStreamIdMedia, kGpuStreamPriorityMedia); + const bool enable_video_accelerator = +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) + cmd_line->HasSwitch(switches::kEnableAcceleratedVideo) && @@ -491,7 +491,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> gpu::kGpuFeatureStatusEnabled); --- a/gpu/config/software_rendering_list.json +++ b/gpu/config/software_rendering_list.json -@@ -373,17 +373,6 @@ +@@ -377,17 +377,6 @@ ] }, { @@ -511,7 +511,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> "cr_bugs": [145531, 332596, 571899, 629434], --- a/media/gpu/BUILD.gn +++ b/media/gpu/BUILD.gn -@@ -482,6 +482,14 @@ if (use_v4l2_codec || use_vaapi || is_ma +@@ -491,6 +491,14 @@ if (use_v4l2_codec || use_vaapi || is_ma } } @@ -526,7 +526,7 @@ Signed-off-by: Daniel Charles <daniel.charles@intel.com> if (use_vaapi) { test("jpeg_encode_accelerator_unittest") { deps = [ -@@ -542,6 +550,10 @@ if (use_v4l2_codec || use_vaapi) { +@@ -551,6 +559,10 @@ if (use_v4l2_codec || use_vaapi) { if (use_ozone) { deps += [ "//ui/ozone" ] } diff --git a/chromium-widevine-r2.patch b/chromium-widevine-r2.patch new file mode 100644 index 000000000000..5527f7f293c6 --- /dev/null +++ b/chromium-widevine-r2.patch @@ -0,0 +1,39 @@ +Minimal patch to get chromium to compile with widevine support. + +Exactly the same as -r1, but we now need to patch +ninja to pretty please not terminate our build. + +caveat emptor: it's in no way clear that building chromium this +way is safer, from a security perspective, than whatever Google +Chrome does. + +Upstream appears to be cooking up a code-signing trust-chain +which may protect users against malicious cdm blobs; I doubt +we benefit from these using this kludge. Ideally, someone +would look into this more carefully than I have ... tbh as +soon as I got my "stories" back, I pretty much lost interest :) + +-gmt + +-- +--- a/third_party/widevine/cdm/stub/widevine_cdm_version.h ++++ b/third_party/widevine/cdm/stub/widevine_cdm_version.h +@@ -10,6 +10,7 @@ + + #include "third_party/widevine/cdm/widevine_cdm_common.h" + ++#define WIDEVINE_CDM_VERSION_STRING "unknown" + #define WIDEVINE_CDM_AVAILABLE + + #endif // WIDEVINE_CDM_VERSION_H_ +--- a/third_party/widevine/cdm/BUILD.gn ++++ b/third_party/widevine/cdm/BUILD.gn +@@ -11,7 +11,7 @@ import("//third_party/widevine/cdm/widev + # Internal Cast builds set enable_widevine=true to bring in Widevine support. + # TODO(xhwang): Support component updated CDM on other platforms and remove this + # assert. +-assert(!enable_widevine || is_win || is_mac || is_chromecast, ++assert(!enable_widevine || is_win || is_mac || is_chromecast || is_linux, + "Component updated CDM only supported on Windows and Mac for now.") + + widevine_arch = current_cpu diff --git a/chromium-widevine.patch b/chromium-widevine.patch deleted file mode 100644 index a67ae8b1c118..000000000000 --- a/chromium-widevine.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff -upr chromium-48.0.2564.82.orig/third_party/widevine/cdm/stub/widevine_cdm_version.h chromium-48.0.2564.82/third_party/widevine/cdm/stub/widevine_cdm_version.h ---- chromium-48.0.2564.82.orig/third_party/widevine/cdm/stub/widevine_cdm_version.h 2016-01-14 01:05:17.000000000 +0200 -+++ chromium-48.0.2564.82/third_party/widevine/cdm/stub/widevine_cdm_version.h 2016-01-21 19:18:51.287978456 +0200 -@@ -12,4 +12,6 @@ - - #define WIDEVINE_CDM_AVAILABLE - -+#define WIDEVINE_CDM_VERSION_STRING "@WIDEVINE_VERSION@" -+ - #endif // WIDEVINE_CDM_VERSION_H_ diff --git a/fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch b/fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch deleted file mode 100644 index ee7339d39817..000000000000 --- a/fix-crash-in-is_cfi-true-builds-with-unbundled-ICU.patch +++ /dev/null @@ -1,53 +0,0 @@ -From f15e8b573ada0fcd643ae393484214b1c7c940f8 Mon Sep 17 00:00:00 2001 -From: Evangelos Foutras <evangelos@foutrelis.com> -Date: Sat, 24 Mar 2018 00:04:33 +0000 -Subject: [PATCH] Fix crash in is_cfi=true builds with unbundled ICU - -Ensure ICU symbols have public visibility and are thus excluded from CFI -checks and whole-program optimization. The former caused a startup crash -and the latter has the potential to break virtual calls in weird ways. - -BUG=822820 - -Change-Id: Ia809eefcb9e93b3c612f2381d394db83bbc67120 -Reviewed-on: https://chromium-review.googlesource.com/978008 -Reviewed-by: Peter Collingbourne <pcc@chromium.org> -Reviewed-by: Thomas Anderson <thomasanderson@chromium.org> -Commit-Queue: Thomas Anderson <thomasanderson@chromium.org> -Cr-Commit-Position: refs/heads/master@{#545638} ---- - build/linux/unbundle/icu.gn | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/build/linux/unbundle/icu.gn b/build/linux/unbundle/icu.gn -index 5bdd91555df7..4450e409dba5 100644 ---- a/build/linux/unbundle/icu.gn -+++ b/build/linux/unbundle/icu.gn -@@ -17,6 +17,24 @@ config("icu_config") { - "USING_SYSTEM_ICU=1", - "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC", - "UCHAR_TYPE=uint16_t", -+ -+ # U_EXPORT (defined in unicode/platform.h) is used to set public visibility -+ # on classes through the U_COMMON_API and U_I18N_API macros (among others). -+ # When linking against the system ICU library, we want its symbols to have -+ # public LTO visibility. This disables CFI checks for the ICU classes and -+ # allows whole-program optimization to be applied to the rest of Chromium. -+ # -+ # Both U_COMMON_API and U_I18N_API macros would be defined to U_EXPORT only -+ # when U_COMBINED_IMPLEMENTATION is defined (see unicode/utypes.h). Because -+ # we override the default system UCHAR_TYPE (char16_t), it is not possible -+ # to use U_COMBINED_IMPLEMENTATION at this moment, meaning the U_COMMON_API -+ # and U_I18N_API macros are set to U_IMPORT which is an empty definition. -+ # -+ # Until building with UCHAR_TYPE=char16_t is supported, one way to apply -+ # public visibility (and thus public LTO visibility) to all ICU classes is -+ # to define U_IMPORT to have the same value as U_EXPORT. For more details, -+ # please see: https://crbug.com/822820 -+ "U_IMPORT=U_EXPORT", - ] - } - --- -2.16.3 - diff --git a/fix-frame-buttons-rendering-too-large-when-using-OSX.patch b/fix-frame-buttons-rendering-too-large-when-using-OSX.patch deleted file mode 100644 index c4d02836fe92..000000000000 --- a/fix-frame-buttons-rendering-too-large-when-using-OSX.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 7ef426c221d11b53b6de507b398e35e8d7b3cc94 Mon Sep 17 00:00:00 2001 -From: Tom Anderson <thomasanderson@chromium.org> -Date: Wed, 4 Apr 2018 01:23:26 +0000 -Subject: [PATCH] Fix frame buttons rendering too large when using - OSX-Arc-White GTK theme - -The check for GTK 3.20 was incorrect as the issue it was trying to fix -was still occurring on GTK 3.20+ systems. This CL adds the correct, -but more complex, check. - -Verified on these configurations: -{GTK 3.18, GTK 3.22} X -{Breeze, Adwaita, OSX-Arc-White, Greybird} X -{scale=1, scale=2} X -{fullscreen, restored} - -BUG=821881 -R=thestig - -Change-Id: I05afa35c1452a46a1abf4c39191a13657bfd8e2c -Reviewed-on: https://chromium-review.googlesource.com/990717 -Reviewed-by: Lei Zhang <thestig@chromium.org> -Commit-Queue: Thomas Anderson <thomasanderson@chromium.org> -Cr-Commit-Position: refs/heads/master@{#547921} ---- - chrome/browser/ui/libgtkui/nav_button_provider_gtk3.cc | 18 +++++++++++++++++- - 1 file changed, 17 insertions(+), 1 deletion(-) - -diff --git a/chrome/browser/ui/libgtkui/nav_button_provider_gtk3.cc b/chrome/browser/ui/libgtkui/nav_button_provider_gtk3.cc -index 31a8087bca11..6a09faec5dd2 100644 ---- a/chrome/browser/ui/libgtkui/nav_button_provider_gtk3.cc -+++ b/chrome/browser/ui/libgtkui/nav_button_provider_gtk3.cc -@@ -213,7 +213,23 @@ class NavButtonImageSource : public gfx::ImageSkiaSource { - // is not scaled for the (unexpected) smaller button size, and the button's - // edges appear cut off. To fix this, manually set the background to scale - // to the button size when it would have clipped. -- if (GtkVersionCheck(3, 20)) { -+ // -+ // GTK's "contain" is unlike CSS's "contain". In CSS, the image would only -+ // be downsized when it would have clipped. In GTK, the image is always -+ // scaled to fit the drawing region (preserving aspect ratio). Only add -+ // "contain" if clipping would occur. -+ cairo_pattern_t* cr_pattern = nullptr; -+ cairo_surface_t* cr_surface = nullptr; -+ gtk_style_context_get(button_context, button_state, -+ GTK_STYLE_PROPERTY_BACKGROUND_IMAGE, &cr_pattern, -+ nullptr); -+ if (cr_pattern && -+ cairo_pattern_get_surface(cr_pattern, &cr_surface) == -+ CAIRO_STATUS_SUCCESS && -+ cr_surface && -+ cairo_surface_get_type(cr_surface) == CAIRO_SURFACE_TYPE_IMAGE && -+ (cairo_image_surface_get_width(cr_surface) > button_size_.width() || -+ cairo_image_surface_get_height(cr_surface) > button_size_.height())) { - ApplyCssToContext(button_context, - ".titlebutton { background-size: contain; }"); - } --- -2.16.2 - diff --git a/remove-dependency-on-ffmpeg-internals-for-start-time.patch b/remove-dependency-on-ffmpeg-internals-for-start-time.patch new file mode 100644 index 000000000000..a514695cfc37 --- /dev/null +++ b/remove-dependency-on-ffmpeg-internals-for-start-time.patch @@ -0,0 +1,260 @@ +From f9535bd6d61d7e0b2cb452e6976a914d4ee62a2b Mon Sep 17 00:00:00 2001 +From: Dale Curtis <dalecurtis@chromium.org> +Date: Thu, 17 May 2018 23:44:41 +0000 +Subject: [PATCH] Remove dependency on ffmpeg internals for start time + calculations. + +Some theora clips still have issues, but using first_dts where +we know it's the same as the first pts resolves the lingering +issues. It also looks like we don't need to use pts_buffer now. + +This does the following small fixes: +- MEDIA_LOG(DEBUG) -> MEDIA_LOG(ERROR) for negative ts error. +- Enables previous disabled test in more limited state. +- Adds kNoFFmpegTimestamp so static_cast<int64_t>(AV_NOPTS_VALUE) +is no longer necessary everywhere. A followup patch set will use +this is more places. +- Removes pts_buffer and packet_buffer inspection. + +BUG=731766 +TEST=all tests pass. + +Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel +Change-Id: I5aadf67a3b5ea2d2a8dd19bbddd7b107208094c5 +Reviewed-on: https://chromium-review.googlesource.com/1064538 +Commit-Queue: Dale Curtis <dalecurtis@chromium.org> +Reviewed-by: Frank Liberato <liberato@chromium.org> +Cr-Commit-Position: refs/heads/master@{#559737} +--- + media/ffmpeg/ffmpeg_common.h | 5 +- + media/filters/ffmpeg_demuxer.cc | 88 +++++++----------------- + media/filters/ffmpeg_demuxer_unittest.cc | 24 +++---- + 3 files changed, 37 insertions(+), 80 deletions(-) + +diff --git a/media/ffmpeg/ffmpeg_common.h b/media/ffmpeg/ffmpeg_common.h +index ec33068fb84f..f641d6bcf92e 100644 +--- a/media/ffmpeg/ffmpeg_common.h ++++ b/media/ffmpeg/ffmpeg_common.h +@@ -28,9 +28,6 @@ extern "C" { + MSVC_PUSH_DISABLE_WARNING(4244); + #include <libavcodec/avcodec.h> + #include <libavformat/avformat.h> +-#if !BUILDFLAG(USE_SYSTEM_FFMPEG) +-#include <libavformat/internal.h> +-#endif // !BUILDFLAG(USE_SYSTEM_FFMPEG) + #include <libavformat/avio.h> + #include <libavutil/avutil.h> + #include <libavutil/imgutils.h> +@@ -42,6 +39,8 @@ MSVC_POP_WARNING(); + + namespace media { + ++constexpr int64_t kNoFFmpegTimestamp = static_cast<int64_t>(AV_NOPTS_VALUE); ++ + class AudioDecoderConfig; + class EncryptionScheme; + class VideoDecoderConfig; +diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc +index 49ca01c4dc0b..7402ce16ab5e 100644 +--- a/media/filters/ffmpeg_demuxer.cc ++++ b/media/filters/ffmpeg_demuxer.cc +@@ -85,29 +85,26 @@ static base::TimeDelta FramesToTimeDelta(int frames, double sample_rate) { + frames * base::Time::kMicrosecondsPerSecond / sample_rate); + } + +-static base::TimeDelta ExtractStartTime(AVStream* stream, +- base::TimeDelta start_time_estimate) { +- DCHECK(start_time_estimate != kNoTimestamp); +- if (stream->start_time == static_cast<int64_t>(AV_NOPTS_VALUE)) { +- return start_time_estimate == kInfiniteDuration ? base::TimeDelta() +- : start_time_estimate; ++static base::TimeDelta ExtractStartTime(AVStream* stream) { ++ // The default start time is zero. ++ base::TimeDelta start_time; ++ ++ // First try to use the |start_time| value as is. ++ if (stream->start_time != kNoFFmpegTimestamp) ++ start_time = ConvertFromTimeBase(stream->time_base, stream->start_time); ++ ++ // Next try to use the first DTS value, for codecs where we know PTS == DTS ++ // (excludes all H26x codecs). The start time must be returned in PTS. ++ if (stream->first_dts != kNoFFmpegTimestamp && ++ stream->codecpar->codec_id != AV_CODEC_ID_HEVC && ++ stream->codecpar->codec_id != AV_CODEC_ID_H264 && ++ stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) { ++ const base::TimeDelta first_pts = ++ ConvertFromTimeBase(stream->time_base, stream->first_dts); ++ if (first_pts < start_time) ++ start_time = first_pts; + } + +- // First try the lower of the estimate and the |start_time| value. +- base::TimeDelta start_time = +- std::min(ConvertFromTimeBase(stream->time_base, stream->start_time), +- start_time_estimate); +- +- // Next see if the first buffered pts value is usable. +- if (stream->pts_buffer[0] != static_cast<int64_t>(AV_NOPTS_VALUE)) { +- const base::TimeDelta buffered_pts = +- ConvertFromTimeBase(stream->time_base, stream->pts_buffer[0]); +- if (buffered_pts < start_time) +- start_time = buffered_pts; +- } +- +- // NOTE: Do not use AVStream->first_dts since |start_time| should be a +- // presentation timestamp. + return start_time; + } + +@@ -513,7 +510,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + buffer->set_duration(kNoTimestamp); + } + +- // Note: If pts is AV_NOPTS_VALUE, stream_timestamp will be kNoTimestamp. ++ // Note: If pts is kNoFFmpegTimestamp, stream_timestamp will be kNoTimestamp. + const base::TimeDelta stream_timestamp = + ConvertStreamTimestamp(stream_->time_base, packet->pts); + +@@ -556,8 +553,8 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + // code paths below; otherwise they should be treated as a parse error. + if ((!fixup_chained_ogg_ || last_packet_timestamp_ == kNoTimestamp) && + buffer->timestamp() < base::TimeDelta()) { +- MEDIA_LOG(DEBUG, media_log_) +- << "FFmpegDemuxer: unfixable negative timestamp"; ++ MEDIA_LOG(ERROR, media_log_) ++ << "FFmpegDemuxer: unfixable negative timestamp."; + demuxer_->NotifyDemuxerError(DEMUXER_ERROR_COULD_NOT_PARSE); + return; + } +@@ -863,7 +860,7 @@ std::string FFmpegDemuxerStream::GetMetadata(const char* key) const { + base::TimeDelta FFmpegDemuxerStream::ConvertStreamTimestamp( + const AVRational& time_base, + int64_t timestamp) { +- if (timestamp == static_cast<int64_t>(AV_NOPTS_VALUE)) ++ if (timestamp == kNoFFmpegTimestamp) + return kNoTimestamp; + + return ConvertFromTimeBase(time_base, timestamp); +@@ -1256,42 +1253,6 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, + AVFormatContext* format_context = glue_->format_context(); + streams_.resize(format_context->nb_streams); + +- // Estimate the start time for each stream by looking through the packets +- // buffered during avformat_find_stream_info(). These values will be +- // considered later when determining the actual stream start time. +- // +- // These packets haven't been completely processed yet, so only look through +- // these values if the AVFormatContext has a valid start time. +- // +- // If no estimate is found, the stream entry will be kInfiniteDuration. +- std::vector<base::TimeDelta> start_time_estimates(format_context->nb_streams, +- kInfiniteDuration); +-#if !BUILDFLAG(USE_SYSTEM_FFMPEG) +- const AVFormatInternal* internal = format_context->internal; +- if (internal && internal->packet_buffer && +- format_context->start_time != static_cast<int64_t>(AV_NOPTS_VALUE)) { +- struct AVPacketList* packet_buffer = internal->packet_buffer; +- while (packet_buffer != internal->packet_buffer_end) { +- DCHECK_LT(static_cast<size_t>(packet_buffer->pkt.stream_index), +- start_time_estimates.size()); +- const AVStream* stream = +- format_context->streams[packet_buffer->pkt.stream_index]; +- if (packet_buffer->pkt.pts != static_cast<int64_t>(AV_NOPTS_VALUE)) { +- const base::TimeDelta packet_pts = +- ConvertFromTimeBase(stream->time_base, packet_buffer->pkt.pts); +- // We ignore kNoTimestamp here since -int64_t::min() is possible; see +- // https://crbug.com/700501. Technically this is a valid value, but in +- // practice shouldn't occur, so just ignore it when estimating. +- if (packet_pts != kNoTimestamp && packet_pts != kInfiniteDuration && +- packet_pts < start_time_estimates[stream->index]) { +- start_time_estimates[stream->index] = packet_pts; +- } +- } +- packet_buffer = packet_buffer->next; +- } +- } +-#endif // !BUILDFLAG(USE_SYSTEM_FFMPEG) +- + std::unique_ptr<MediaTracks> media_tracks(new MediaTracks()); + + DCHECK(track_id_to_demux_stream_map_.empty()); +@@ -1440,8 +1401,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, + + max_duration = std::max(max_duration, streams_[i]->duration()); + +- base::TimeDelta start_time = +- ExtractStartTime(stream, start_time_estimates[i]); ++ base::TimeDelta start_time = ExtractStartTime(stream); + + // Note: This value is used for seeking, so we must take the true value and + // not the one possibly clamped to zero below. +@@ -1479,7 +1439,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, + if (text_enabled_) + AddTextStreams(); + +- if (format_context->duration != static_cast<int64_t>(AV_NOPTS_VALUE)) { ++ if (format_context->duration != kNoFFmpegTimestamp) { + // If there is a duration value in the container use that to find the + // maximum between it and the duration from A/V streams. + const AVRational av_time_base = {1, AV_TIME_BASE}; +diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc +index 71dbed07b376..b09816a3ba3a 100644 +--- a/media/filters/ffmpeg_demuxer_unittest.cc ++++ b/media/filters/ffmpeg_demuxer_unittest.cc +@@ -696,12 +696,9 @@ TEST_F(FFmpegDemuxerTest, Read_InvalidNegativeTimestamp) { + ReadUntilEndOfStream(GetStream(DemuxerStream::AUDIO)); + } + +-// TODO(dalecurtis): Test is disabled since FFmpeg does not currently guarantee +-// the order of demuxed packets in OGG containers. Re-enable and fix key frame +-// expectations once we decide to either workaround it or attempt a fix +-// upstream. See http://crbug.com/387996. +-TEST_F(FFmpegDemuxerTest, +- DISABLED_Read_AudioNegativeStartTimeAndOggDiscard_Bear) { ++// Android has no Theora support, so these tests doesn't work. ++#if !defined(OS_ANDROID) ++TEST_F(FFmpegDemuxerTest, Read_AudioNegativeStartTimeAndOggDiscard_Bear) { + // Many ogg files have negative starting timestamps, so ensure demuxing and + // seeking work correctly with a negative start time. + CreateDemuxer("bear.ogv"); +@@ -711,8 +708,12 @@ TEST_F(FFmpegDemuxerTest, + DemuxerStream* video = GetStream(DemuxerStream::VIDEO); + DemuxerStream* audio = GetStream(DemuxerStream::AUDIO); + +- // Run the test twice with a seek in between. +- for (int i = 0; i < 2; ++i) { ++ // Run the test once (should be twice..., see note) with a seek in between. ++ // ++ // TODO(dalecurtis): We only run the test once since FFmpeg does not currently ++ // guarantee the order of demuxed packets in OGG containers. See ++ // http://crbug.com/387996. ++ for (int i = 0; i < 1; ++i) { + audio->Read( + NewReadCBWithCheckedDiscard(FROM_HERE, 40, 0, kInfiniteDuration, true)); + base::RunLoop().Run(); +@@ -731,10 +732,10 @@ TEST_F(FFmpegDemuxerTest, + video->Read(NewReadCB(FROM_HERE, 5751, 0, true)); + base::RunLoop().Run(); + +- video->Read(NewReadCB(FROM_HERE, 846, 33367, true)); ++ video->Read(NewReadCB(FROM_HERE, 846, 33367, false)); + base::RunLoop().Run(); + +- video->Read(NewReadCB(FROM_HERE, 1255, 66733, true)); ++ video->Read(NewReadCB(FROM_HERE, 1255, 66733, false)); + base::RunLoop().Run(); + + // Seek back to the beginning and repeat the test. +@@ -747,9 +748,6 @@ TEST_F(FFmpegDemuxerTest, + // Same test above, but using sync2.ogv which has video stream muxed before the + // audio stream, so seeking based only on start time will fail since ffmpeg is + // essentially just seeking based on file position. +-// +-// Android has no Theora support, so this test doesn't work. +-#if !defined(OS_ANDROID) + TEST_F(FFmpegDemuxerTest, Read_AudioNegativeStartTimeAndOggDiscard_Sync) { + // Many ogg files have negative starting timestamps, so ensure demuxing and + // seeking work correctly with a negative start time. +-- +2.17.0 + |