[chromium-libs-media-freeworld: 3/8] 60.0.3112.90 + headless + fixes for freeworld
by Miro Hrončok
commit 29aa9da06f1bef43aa62660954446d8a03d9a141
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Sat Aug 5 17:16:08 2017 -0400
60.0.3112.90 + headless + fixes for freeworld
.gitignore | 1 +
chromium-60.0.3112.78-enable-mp3.patch | 479 ++++++++++++++++++
chromium-60.0.3112.78-fix-gn-bootstrap.patch | 11 +
chromium-60.0.3112.78-gcc7.patch | 80 +++
chromium-60.0.3112.78-gn-system.patch | 221 ++++++++
chromium-60.0.3112.78-gtk2fix.patch | 612 +++++++++++++++++++++++
chromium-60.0.3112.78-jpeg-nomangle.patch | 14 +
chromium-60.0.3112.78-last-commit-position.patch | 28 ++
chromium-60.0.3112.78-no-libpng-prefix.patch | 17 +
chromium-60.0.3112.78-no-zlib-mangle.patch | 13 +
chromium.spec | 236 ++++++---
sources | 5 +-
12 files changed, 1640 insertions(+), 77 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index ce8a184..19bd92f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@
/chromium-59.0.3071.109-clean.tar.xz
/chromium-59.0.3071.115-clean.tar.xz
/chromium-59.0.3071.109-freetype.tar.bz2
+/chromium-60.0.3112.90-clean.tar.xz
diff --git a/chromium-60.0.3112.78-enable-mp3.patch b/chromium-60.0.3112.78-enable-mp3.patch
new file mode 100644
index 0000000..3dfdab2
--- /dev/null
+++ b/chromium-60.0.3112.78-enable-mp3.patch
@@ -0,0 +1,479 @@
+diff -up chromium-60.0.3112.78/components/neterror/resources/sounds/button-press.mp3 chromium-60.0.3112.78/components/neterror/resources/sounds/button-press
+diff -up chromium-60.0.3112.78/components/neterror/resources/sounds/hit.mp3 chromium-60.0.3112.78/components/neterror/resources/sounds/hit
+diff -up chromium-60.0.3112.78/components/neterror/resources/sounds/score-reached.mp3 chromium-60.0.3112.78/components/neterror/resources/sounds/score-reached
+diff -up chromium-60.0.3112.78/media/base/mime_util_internal.cc.mp3 chromium-60.0.3112.78/media/base/mime_util_internal.cc
+--- chromium-60.0.3112.78/media/base/mime_util_internal.cc.mp3 2017-07-25 15:04:57.000000000 -0400
++++ chromium-60.0.3112.78/media/base/mime_util_internal.cc 2017-07-31 10:57:55.054231795 -0400
+@@ -278,10 +278,10 @@ void MimeUtil::AddSupportedMediaFormats(
+ CodecSet webm_codecs(webm_audio_codecs);
+ webm_codecs.insert(webm_video_codecs.begin(), webm_video_codecs.end());
+
+-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+ CodecSet mp3_codecs;
+ mp3_codecs.insert(MP3);
+
++#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+ CodecSet aac;
+ aac.insert(MPEG2_AAC);
+ aac.insert(MPEG4_AAC);
+@@ -325,10 +325,10 @@ void MimeUtil::AddSupportedMediaFormats(
+ AddContainerWithCodecs("application/ogg", ogg_codecs, false);
+ AddContainerWithCodecs("audio/flac", implicit_codec, false);
+
+-#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+ AddContainerWithCodecs("audio/mpeg", mp3_codecs, true); // Allow "mp3".
+ AddContainerWithCodecs("audio/mp3", implicit_codec, true);
+ AddContainerWithCodecs("audio/x-mp3", implicit_codec, true);
++#if BUILDFLAG(USE_PROPRIETARY_CODECS)
+ AddContainerWithCodecs("audio/aac", implicit_codec, true); // AAC / ADTS.
+ AddContainerWithCodecs("audio/mp4", mp4_audio_codecs, true);
+ DCHECK(!mp4_video_codecs.empty());
+@@ -928,7 +928,6 @@ bool MimeUtil::IsCodecProprietary(Codec
+ case INVALID_CODEC:
+ case AC3:
+ case EAC3:
+- case MP3:
+ case MPEG2_AAC:
+ case MPEG4_AAC:
+ case H264:
+@@ -936,6 +935,7 @@ bool MimeUtil::IsCodecProprietary(Codec
+ case DOLBY_VISION:
+ return true;
+
++ case MP3:
+ case PCM:
+ case VORBIS:
+ case OPUS:
+diff -up chromium-60.0.3112.78/media/BUILD.gn.mp3 chromium-60.0.3112.78/media/BUILD.gn
+diff -up chromium-60.0.3112.78/media/formats/BUILD.gn.mp3 chromium-60.0.3112.78/media/formats/BUILD.gn
+--- chromium-60.0.3112.78/media/formats/BUILD.gn.mp3 2017-07-31 11:00:08.486638957 -0400
++++ chromium-60.0.3112.78/media/formats/BUILD.gn 2017-07-31 11:01:17.867290730 -0400
+@@ -12,6 +12,14 @@ source_set("formats") {
+ "ac3/ac3_util.h",
+ "common/offset_byte_queue.cc",
+ "common/offset_byte_queue.h",
++ "mpeg/adts_constants.cc",
++ "mpeg/adts_constants.h",
++ "mpeg/adts_stream_parser.cc",
++ "mpeg/adts_stream_parser.h",
++ "mpeg/mpeg1_audio_stream_parser.cc",
++ "mpeg/mpeg1_audio_stream_parser.h",
++ "mpeg/mpeg_audio_stream_parser_base.cc",
++ "mpeg/mpeg_audio_stream_parser_base.h",
+ "webm/webm_audio_client.cc",
+ "webm/webm_audio_client.h",
+ "webm/webm_cluster_parser.cc",
+@@ -76,14 +84,6 @@ source_set("formats") {
+ "mp4/sample_to_group_iterator.h",
+ "mp4/track_run_iterator.cc",
+ "mp4/track_run_iterator.h",
+- "mpeg/adts_constants.cc",
+- "mpeg/adts_constants.h",
+- "mpeg/adts_stream_parser.cc",
+- "mpeg/adts_stream_parser.h",
+- "mpeg/mpeg1_audio_stream_parser.cc",
+- "mpeg/mpeg1_audio_stream_parser.h",
+- "mpeg/mpeg_audio_stream_parser_base.cc",
+- "mpeg/mpeg_audio_stream_parser_base.h",
+ ]
+ }
+
+diff -up chromium-60.0.3112.78/third_party/catapult/third_party/gsutil/gslib/tests/test_data/test.mp3 chromium-60.0.3112.78/third_party/catapult/third_party/gsutil/gslib/tests/test_data/test
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm64/config.h.mp3 chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm64/config.h
+--- chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm64/config.h.mp3 2017-07-31 10:18:49.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm64/config.h 2017-07-31 10:57:55.056231757 -0400
+@@ -1,7 +1,7 @@
+ /* Automatically generated by configure - do not modify! */
+ #ifndef FFMPEG_CONFIG_H
+ #define FFMPEG_CONFIG_H
+-#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/usr/local/google/home/tguilbert/Code/chromium/src/third_party/opus/src/include --optflags='\"-O2\"' --enable
-decoder='theora,vp8' --enable-parser='vp3,vp8' --enable-cross-compile --cross-prefix=/usr/bin/aarch64-linux-gnu- --target-os=linux --arch=aarch64 --enable-armv8 --extra-cflags='-march=armv8-a' --enable-pic"
++#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/usr/local/google/home/tguilbert/Code/chromium/src/third_party/opus/src/include --optflags='\"-O2\"' --enable
-decoder='theora,vp8' --enable-parser='vp3,vp8' --enable-cross-compile --cross-prefix=/usr/bin/aarch64-linux-gnu- --target-os=linux --arch=aarch64 --enable-armv8 --extra-cflags='-march=armv8-a' --enable-pic --enable-decoder='mp3' --enable-demuxer='mp3' --enable-parser='mpegaudio'"
+ #define FFMPEG_LICENSE "LGPL version 2.1 or later"
+ #define CONFIG_THIS_YEAR 2017
+ #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+@@ -550,7 +550,7 @@
+ #define CONFIG_FFPROBE 0
+ #define CONFIG_FFSERVER 0
+ #define CONFIG_FFMPEG 0
+-#define CONFIG_DCT 0
++#define CONFIG_DCT 1
+ #define CONFIG_DWT 0
+ #define CONFIG_ERROR_RESILIENCE 0
+ #define CONFIG_FAAN 1
+@@ -617,8 +617,8 @@
+ #define CONFIG_LZF 0
+ #define CONFIG_ME_CMP 0
+ #define CONFIG_MPEG_ER 0
+-#define CONFIG_MPEGAUDIO 0
+-#define CONFIG_MPEGAUDIODSP 0
++#define CONFIG_MPEGAUDIO 1
++#define CONFIG_MPEGAUDIODSP 1
+ #define CONFIG_MPEGVIDEO 0
+ #define CONFIG_MPEGVIDEOENC 0
+ #define CONFIG_MSS34DSP 0
+@@ -957,7 +957,7 @@
+ #define CONFIG_MP1FLOAT_DECODER 0
+ #define CONFIG_MP2_DECODER 0
+ #define CONFIG_MP2FLOAT_DECODER 0
+-#define CONFIG_MP3_DECODER 0
++#define CONFIG_MP3_DECODER 1
+ #define CONFIG_MP3FLOAT_DECODER 0
+ #define CONFIG_MP3ADU_DECODER 0
+ #define CONFIG_MP3ADUFLOAT_DECODER 0
+@@ -1263,7 +1263,7 @@
+ #define CONFIG_MM_DEMUXER 0
+ #define CONFIG_MMF_DEMUXER 0
+ #define CONFIG_MOV_DEMUXER 0
+-#define CONFIG_MP3_DEMUXER 0
++#define CONFIG_MP3_DEMUXER 1
+ #define CONFIG_MPC_DEMUXER 0
+ #define CONFIG_MPC8_DEMUXER 0
+ #define CONFIG_MPEGPS_DEMUXER 0
+@@ -2196,7 +2196,7 @@
+ #define CONFIG_MJPEG_PARSER 0
+ #define CONFIG_MLP_PARSER 0
+ #define CONFIG_MPEG4VIDEO_PARSER 0
+-#define CONFIG_MPEGAUDIO_PARSER 0
++#define CONFIG_MPEGAUDIO_PARSER 1
+ #define CONFIG_MPEGVIDEO_PARSER 0
+ #define CONFIG_OPUS_PARSER 1
+ #define CONFIG_PNG_PARSER 0
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm/config.h.mp3 chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm/config.h
+--- chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm/config.h.mp3 2017-07-31 10:18:49.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm/config.h 2017-07-31 10:57:55.057231738 -0400
+@@ -1,7 +1,7 @@
+ /* Automatically generated by configure - do not modify! */
+ #ifndef FFMPEG_CONFIG_H
+ #define FFMPEG_CONFIG_H
+-#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/home/tguilbert/chrome_root/src/third_party/opus/src/include --optflags='\"-O2\"' --enable-decoder='theora,vp
8' --enable-parser='vp3,vp8' --arch=arm --enable-armv6 --enable-armv6t2 --enable-vfp --enable-thumb --extra-cflags='-march=armv7-a' --enable-cross-compile --target-os=linux --cross-prefix=armv7a-cros-linux-gnueabi- --extra-cflags='-mtune=cortex-a8' --extra-cflags='-mfloat-abi=hard' --disable-neon --extra-cflags='-mfpu=vfpv3-d16' --enable-pic"
++#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/home/tguilbert/chrome_root/src/third_party/opus/src/include --optflags='\"-O2\"' --enable-decoder='theora,vp
8' --enable-parser='vp3,vp8' --arch=arm --enable-armv6 --enable-armv6t2 --enable-vfp --enable-thumb --extra-cflags='-march=armv7-a' --enable-cross-compile --target-os=linux --cross-prefix=armv7a-cros-linux-gnueabi- --extra-cflags='-mtune=cortex-a8' --extra-cflags='-mfloat-abi=hard' --disable-neon --extra-cflags='-mfpu=vfpv3-d16' --enable-pic --enable-decoder='mp3' --enable-demuxer='mp3' --enable-parser='mpegaudio'"
+ #define FFMPEG_LICENSE "LGPL version 2.1 or later"
+ #define CONFIG_THIS_YEAR 2017
+ #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+@@ -550,7 +550,7 @@
+ #define CONFIG_FFPROBE 0
+ #define CONFIG_FFSERVER 0
+ #define CONFIG_FFMPEG 0
+-#define CONFIG_DCT 0
++#define CONFIG_DCT 1
+ #define CONFIG_DWT 0
+ #define CONFIG_ERROR_RESILIENCE 0
+ #define CONFIG_FAAN 1
+@@ -617,8 +617,8 @@
+ #define CONFIG_LZF 0
+ #define CONFIG_ME_CMP 0
+ #define CONFIG_MPEG_ER 0
+-#define CONFIG_MPEGAUDIO 0
+-#define CONFIG_MPEGAUDIODSP 0
++#define CONFIG_MPEGAUDIO 1
++#define CONFIG_MPEGAUDIODSP 1
+ #define CONFIG_MPEGVIDEO 0
+ #define CONFIG_MPEGVIDEOENC 0
+ #define CONFIG_MSS34DSP 0
+@@ -957,7 +957,7 @@
+ #define CONFIG_MP1FLOAT_DECODER 0
+ #define CONFIG_MP2_DECODER 0
+ #define CONFIG_MP2FLOAT_DECODER 0
+-#define CONFIG_MP3_DECODER 0
++#define CONFIG_MP3_DECODER 1
+ #define CONFIG_MP3FLOAT_DECODER 0
+ #define CONFIG_MP3ADU_DECODER 0
+ #define CONFIG_MP3ADUFLOAT_DECODER 0
+@@ -1263,7 +1263,7 @@
+ #define CONFIG_MM_DEMUXER 0
+ #define CONFIG_MMF_DEMUXER 0
+ #define CONFIG_MOV_DEMUXER 0
+-#define CONFIG_MP3_DEMUXER 0
++#define CONFIG_MP3_DEMUXER 1
+ #define CONFIG_MPC_DEMUXER 0
+ #define CONFIG_MPC8_DEMUXER 0
+ #define CONFIG_MPEGPS_DEMUXER 0
+@@ -2196,7 +2196,7 @@
+ #define CONFIG_MJPEG_PARSER 0
+ #define CONFIG_MLP_PARSER 0
+ #define CONFIG_MPEG4VIDEO_PARSER 0
+-#define CONFIG_MPEGAUDIO_PARSER 0
++#define CONFIG_MPEGAUDIO_PARSER 1
+ #define CONFIG_MPEGVIDEO_PARSER 0
+ #define CONFIG_OPUS_PARSER 1
+ #define CONFIG_PNG_PARSER 0
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm-neon/config.h.mp3 chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm-neon/config.h
+--- chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm-neon/config.h.mp3 2017-07-31 10:18:49.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/arm-neon/config.h 2017-07-31 10:57:55.106230806 -0400
+@@ -1,7 +1,7 @@
+ /* Automatically generated by configure - do not modify! */
+ #ifndef FFMPEG_CONFIG_H
+ #define FFMPEG_CONFIG_H
+-#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/home/tguilbert/chrome_root/src/third_party/opus/src/include --optflags='\"-O2\"' --enable-decoder='theora,vp
8' --enable-parser='vp3,vp8' --arch=arm --enable-armv6 --enable-armv6t2 --enable-vfp --enable-thumb --extra-cflags='-march=armv7-a' --enable-cross-compile --target-os=linux --cross-prefix=armv7a-cros-linux-gnueabi- --extra-cflags='-mtune=cortex-a8' --extra-cflags='-mfloat-abi=hard' --enable-neon --extra-cflags='-mfpu=neon' --enable-pic"
++#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/home/tguilbert/chrome_root/src/third_party/opus/src/include --optflags='\"-O2\"' --enable-decoder='theora,vp
8' --enable-parser='vp3,vp8' --arch=arm --enable-armv6 --enable-armv6t2 --enable-vfp --enable-thumb --extra-cflags='-march=armv7-a' --enable-cross-compile --target-os=linux --cross-prefix=armv7a-cros-linux-gnueabi- --extra-cflags='-mtune=cortex-a8' --extra-cflags='-mfloat-abi=hard' --enable-neon --extra-cflags='-mfpu=neon' --enable-pic --enable-decoder='mp3' --enable-demuxer='mp3' --enable-parser='mpegaudio'"
+ #define FFMPEG_LICENSE "LGPL version 2.1 or later"
+ #define CONFIG_THIS_YEAR 2017
+ #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+@@ -550,7 +550,7 @@
+ #define CONFIG_FFPROBE 0
+ #define CONFIG_FFSERVER 0
+ #define CONFIG_FFMPEG 0
+-#define CONFIG_DCT 0
++#define CONFIG_DCT 1
+ #define CONFIG_DWT 0
+ #define CONFIG_ERROR_RESILIENCE 0
+ #define CONFIG_FAAN 1
+@@ -617,8 +617,8 @@
+ #define CONFIG_LZF 0
+ #define CONFIG_ME_CMP 0
+ #define CONFIG_MPEG_ER 0
+-#define CONFIG_MPEGAUDIO 0
+-#define CONFIG_MPEGAUDIODSP 0
++#define CONFIG_MPEGAUDIO 1
++#define CONFIG_MPEGAUDIODSP 1
+ #define CONFIG_MPEGVIDEO 0
+ #define CONFIG_MPEGVIDEOENC 0
+ #define CONFIG_MSS34DSP 0
+@@ -957,7 +957,7 @@
+ #define CONFIG_MP1FLOAT_DECODER 0
+ #define CONFIG_MP2_DECODER 0
+ #define CONFIG_MP2FLOAT_DECODER 0
+-#define CONFIG_MP3_DECODER 0
++#define CONFIG_MP3_DECODER 1
+ #define CONFIG_MP3FLOAT_DECODER 0
+ #define CONFIG_MP3ADU_DECODER 0
+ #define CONFIG_MP3ADUFLOAT_DECODER 0
+@@ -1263,7 +1263,7 @@
+ #define CONFIG_MM_DEMUXER 0
+ #define CONFIG_MMF_DEMUXER 0
+ #define CONFIG_MOV_DEMUXER 0
+-#define CONFIG_MP3_DEMUXER 0
++#define CONFIG_MP3_DEMUXER 1
+ #define CONFIG_MPC_DEMUXER 0
+ #define CONFIG_MPC8_DEMUXER 0
+ #define CONFIG_MPEGPS_DEMUXER 0
+@@ -2196,7 +2196,7 @@
+ #define CONFIG_MJPEG_PARSER 0
+ #define CONFIG_MLP_PARSER 0
+ #define CONFIG_MPEG4VIDEO_PARSER 0
+-#define CONFIG_MPEGAUDIO_PARSER 0
++#define CONFIG_MPEGAUDIO_PARSER 1
+ #define CONFIG_MPEGVIDEO_PARSER 0
+ #define CONFIG_OPUS_PARSER 1
+ #define CONFIG_PNG_PARSER 0
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/ia32/config.h.mp3 chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/ia32/config.h
+--- chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/ia32/config.h.mp3 2017-07-31 10:18:49.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/ia32/config.h 2017-07-31 10:57:55.107230787 -0400
+@@ -1,7 +1,7 @@
+ /* Automatically generated by configure - do not modify! */
+ #ifndef FFMPEG_CONFIG_H
+ #define FFMPEG_CONFIG_H
+-#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/usr/local/google/home/tguilbert/Code/chromium/src/third_party/opus/src/include --optflags='\"-O2\"' --enable
-decoder='theora,vp8' --enable-parser='vp3,vp8' --arch=i686 --extra-cflags='\"-m32\"' --extra-ldflags='\"-m32\"' --enable-yasm --enable-pic"
++#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/usr/local/google/home/tguilbert/Code/chromium/src/third_party/opus/src/include --optflags='\"-O2\"' --enable
-decoder='theora,vp8' --enable-parser='vp3,vp8' --arch=i686 --extra-cflags='\"-m32\"' --extra-ldflags='\"-m32\"' --enable-yasm --enable-pic --enable-decoder='mp3' --enable-demuxer='mp3' --enable-parser='mpegaudio'"
+ #define FFMPEG_LICENSE "LGPL version 2.1 or later"
+ #define CONFIG_THIS_YEAR 2017
+ #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+@@ -550,7 +550,7 @@
+ #define CONFIG_FFPROBE 0
+ #define CONFIG_FFSERVER 0
+ #define CONFIG_FFMPEG 0
+-#define CONFIG_DCT 0
++#define CONFIG_DCT 1
+ #define CONFIG_DWT 0
+ #define CONFIG_ERROR_RESILIENCE 0
+ #define CONFIG_FAAN 1
+@@ -617,8 +617,8 @@
+ #define CONFIG_LZF 0
+ #define CONFIG_ME_CMP 0
+ #define CONFIG_MPEG_ER 0
+-#define CONFIG_MPEGAUDIO 0
+-#define CONFIG_MPEGAUDIODSP 0
++#define CONFIG_MPEGAUDIO 1
++#define CONFIG_MPEGAUDIODSP 1
+ #define CONFIG_MPEGVIDEO 0
+ #define CONFIG_MPEGVIDEOENC 0
+ #define CONFIG_MSS34DSP 0
+@@ -957,7 +957,7 @@
+ #define CONFIG_MP1FLOAT_DECODER 0
+ #define CONFIG_MP2_DECODER 0
+ #define CONFIG_MP2FLOAT_DECODER 0
+-#define CONFIG_MP3_DECODER 0
++#define CONFIG_MP3_DECODER 1
+ #define CONFIG_MP3FLOAT_DECODER 0
+ #define CONFIG_MP3ADU_DECODER 0
+ #define CONFIG_MP3ADUFLOAT_DECODER 0
+@@ -1263,7 +1263,7 @@
+ #define CONFIG_MM_DEMUXER 0
+ #define CONFIG_MMF_DEMUXER 0
+ #define CONFIG_MOV_DEMUXER 0
+-#define CONFIG_MP3_DEMUXER 0
++#define CONFIG_MP3_DEMUXER 1
+ #define CONFIG_MPC_DEMUXER 0
+ #define CONFIG_MPC8_DEMUXER 0
+ #define CONFIG_MPEGPS_DEMUXER 0
+@@ -2196,7 +2196,7 @@
+ #define CONFIG_MJPEG_PARSER 0
+ #define CONFIG_MLP_PARSER 0
+ #define CONFIG_MPEG4VIDEO_PARSER 0
+-#define CONFIG_MPEGAUDIO_PARSER 0
++#define CONFIG_MPEGAUDIO_PARSER 1
+ #define CONFIG_MPEGVIDEO_PARSER 0
+ #define CONFIG_OPUS_PARSER 1
+ #define CONFIG_PNG_PARSER 0
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/x64/config.h.mp3 chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/x64/config.h
+--- chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/x64/config.h.mp3 2017-07-31 10:18:49.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/chromium/config/Chromium/linux/x64/config.h 2017-07-31 10:57:55.108230768 -0400
+@@ -1,7 +1,7 @@
+ /* Automatically generated by configure - do not modify! */
+ #ifndef FFMPEG_CONFIG_H
+ #define FFMPEG_CONFIG_H
+-#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/usr/local/google/home/tguilbert/Code/chromium/src/third_party/opus/src/include --optflags='\"-O2\"' --enable
-decoder='theora,vp8' --enable-parser='vp3,vp8' --enable-pic --enable-lto"
++#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-nvenc --disable-cuda --disable-cuvid --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac' --enable-parser='opus,vorbis,flac' --extra-cflags=-I/usr/local/google/home/tguilbert/Code/chromium/src/third_party/opus/src/include --optflags='\"-O2\"' --enable
-decoder='theora,vp8' --enable-parser='vp3,vp8' --enable-pic --enable-lto --enable-decoder='mp3' --enable-demuxer='mp3' --enable-parser='mpegaudio'"
+ #define FFMPEG_LICENSE "LGPL version 2.1 or later"
+ #define CONFIG_THIS_YEAR 2017
+ #define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+@@ -550,7 +550,7 @@
+ #define CONFIG_FFPROBE 0
+ #define CONFIG_FFSERVER 0
+ #define CONFIG_FFMPEG 0
+-#define CONFIG_DCT 0
++#define CONFIG_DCT 1
+ #define CONFIG_DWT 0
+ #define CONFIG_ERROR_RESILIENCE 0
+ #define CONFIG_FAAN 1
+@@ -617,8 +617,8 @@
+ #define CONFIG_LZF 0
+ #define CONFIG_ME_CMP 0
+ #define CONFIG_MPEG_ER 0
+-#define CONFIG_MPEGAUDIO 0
+-#define CONFIG_MPEGAUDIODSP 0
++#define CONFIG_MPEGAUDIO 1
++#define CONFIG_MPEGAUDIODSP 1
+ #define CONFIG_MPEGVIDEO 0
+ #define CONFIG_MPEGVIDEOENC 0
+ #define CONFIG_MSS34DSP 0
+@@ -957,7 +957,7 @@
+ #define CONFIG_MP1FLOAT_DECODER 0
+ #define CONFIG_MP2_DECODER 0
+ #define CONFIG_MP2FLOAT_DECODER 0
+-#define CONFIG_MP3_DECODER 0
++#define CONFIG_MP3_DECODER 1
+ #define CONFIG_MP3FLOAT_DECODER 0
+ #define CONFIG_MP3ADU_DECODER 0
+ #define CONFIG_MP3ADUFLOAT_DECODER 0
+@@ -1263,7 +1263,7 @@
+ #define CONFIG_MM_DEMUXER 0
+ #define CONFIG_MMF_DEMUXER 0
+ #define CONFIG_MOV_DEMUXER 0
+-#define CONFIG_MP3_DEMUXER 0
++#define CONFIG_MP3_DEMUXER 1
+ #define CONFIG_MPC_DEMUXER 0
+ #define CONFIG_MPC8_DEMUXER 0
+ #define CONFIG_MPEGPS_DEMUXER 0
+@@ -2196,7 +2196,7 @@
+ #define CONFIG_MJPEG_PARSER 0
+ #define CONFIG_MLP_PARSER 0
+ #define CONFIG_MPEG4VIDEO_PARSER 0
+-#define CONFIG_MPEGAUDIO_PARSER 0
++#define CONFIG_MPEGAUDIO_PARSER 1
+ #define CONFIG_MPEGVIDEO_PARSER 0
+ #define CONFIG_OPUS_PARSER 1
+ #define CONFIG_PNG_PARSER 0
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/ffmpeg_generated.gni.mp3 chromium-60.0.3112.78/third_party/ffmpeg/ffmpeg_generated.gni
+--- chromium-60.0.3112.78/third_party/ffmpeg/ffmpeg_generated.gni.mp3 2017-07-31 10:18:46.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/ffmpeg_generated.gni 2017-07-31 10:57:55.109230749 -0400
+@@ -177,19 +177,12 @@ if ((is_linux && current_cpu == "arm" &&
+ ]
+ }
+
+-if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "arm" && arm_use_neon && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "arm64" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "mips64el" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "mipsel" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm" && arm_use_neon && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm" && arm_use_neon && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "arm" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "arm64" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "mipsel" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu =
= "mipsel" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "ChromeOS") || (is_win && ffmpeg_branding == "Chrome")) {
++if ((current_cpu == "x64") || (is_android && current_cpu == "arm" && arm_use_neon) || (is_android && current_cpu == "arm64") || (is_android && current_cpu == "mips64el") || (is_android && current_cpu == "mipsel") || (is_android && current_cpu == "x86") || (is_linux && current_cpu == "arm" && arm_use_neon) || (is_linux && current_cpu == "arm" && arm_use_neon) || (is_linux && current_cpu == "arm") || (is_linux && current_cpu == "arm64") || (is_linux && current_cpu == "mipsel") || (is_linux && current_cpu == "x64") || (is_linux && current_cpu == "x86") || (is_win))
++{
+ ffmpeg_c_sources += [
+- "libavcodec/aac_ac3_parser.c",
+- "libavcodec/aac_parser.c",
+- "libavcodec/aacadtsdec.c",
+- "libavcodec/aacps_float.c",
+- "libavcodec/aacpsdsp_float.c",
+- "libavcodec/aacsbr.c",
+- "libavcodec/aactab.c",
+- "libavcodec/ac3tab.c",
+- "libavcodec/autorename_libavcodec_aacdec.c",
+ "libavcodec/autorename_libavcodec_mpegaudiodsp.c",
+ "libavcodec/autorename_libavcodec_sbrdsp.c",
++ "libavcodec/ac3tab.c",
+ "libavcodec/cbrt_data.c",
+ "libavcodec/dct.c",
+ "libavcodec/dct32_fixed.c",
+@@ -205,7 +198,6 @@ if ((current_cpu == "x64" && ffmpeg_bran
+ "libavcodec/mpegaudiodsp_float.c",
+ "libavcodec/sinewin.c",
+ "libavcodec/sinewin_fixed.c",
+- "libavformat/aacdec.c",
+ "libavformat/apetag.c",
+ "libavformat/img2.c",
+ "libavformat/mov.c",
+@@ -214,6 +206,21 @@ if ((current_cpu == "x64" && ffmpeg_bran
+ ]
+ }
+
++if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "arm" && arm_use_neon && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "arm64" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "mips64el" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "mipsel" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm" && arm_use_neon && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm" && arm_use_neon && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "arm" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "arm64" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "arm64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "mipsel" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu =
= "mipsel" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "ChromeOS") || (is_win && ffmpeg_branding == "Chrome"))
++{
++ ffmpeg_c_sources += [
++ "libavcodec/aac_ac3_parser.c",
++ "libavcodec/aac_parser.c",
++ "libavcodec/aacadtsdec.c",
++ "libavcodec/aacps_float.c",
++ "libavcodec/aacpsdsp_float.c",
++ "libavcodec/aacsbr.c",
++ "libavcodec/aactab.c",
++ "libavcodec/autorename_libavcodec_aacdec.c",
++ "libavformat/aacdec.c",
++ ]
++}
++
+ if ((is_android && current_cpu == "x64") || (is_android && current_cpu == "x86") || (is_linux && current_cpu == "x64") || (is_linux && current_cpu == "x86") || (is_mac) || (is_win)) {
+ ffmpeg_c_sources += [
+ "libavcodec/x86/autorename_libavcodec_x86_vorbisdsp_init.c",
+@@ -315,21 +322,31 @@ if ((is_linux && current_cpu == "x64") |
+ if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") || (is_android && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "ChromeOS") || (is_win && ffmpeg_branding == "Chrome")) {
+ ffmpeg_c_sources += [
+ "libavcodec/x86/aacpsdsp_init.c",
++ ]
++}
++
++if ((current_cpu == "x64") || (is_android && current_cpu == "x86") || (is_linux && current_cpu == "x64") || (is_linux && current_cpu == "x86") || (is_win)) {
++ ffmpeg_c_sources += [
+ "libavcodec/x86/dct_init.c",
+ "libavcodec/x86/mpegaudiodsp.c",
+ "libavcodec/x86/sbrdsp_init.c",
+ ]
+ }
+
+-if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "ChromeOS") || (is_win && ffmpeg_branding == "Chrome")) {
++if ((current_cpu == "x64") || (is_android && current_cpu == "x86") || (is_linux && current_cpu == "x64") || (is_linux && current_cpu == "x86") || (is_win)) {
+ ffmpeg_yasm_sources += [
+- "libavcodec/x86/aacpsdsp.asm",
+ "libavcodec/x86/dct32.asm",
+ "libavcodec/x86/imdct36.asm",
+ "libavcodec/x86/sbrdsp.asm",
+ ]
+ }
+
++if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x64" && ffmpeg_branding == "ChromeOS") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "Chrome") || (is_linux && current_cpu == "x86" && ffmpeg_branding == "ChromeOS") || (is_win && ffmpeg_branding == "Chrome")) {
++ ffmpeg_yasm_sources += [
++ "libavcodec/x86/aacpsdsp.asm",
++ ]
++}
++
+ if ((is_linux && current_cpu == "arm" && arm_use_neon) || (is_linux && current_cpu == "arm")) {
+ ffmpeg_c_sources += [
+ "libavcodec/arm/h264pred_init_arm.c",
+diff -up chromium-60.0.3112.78/third_party/ffmpeg/libavcodec/sbrdsp.c.mp3 chromium-60.0.3112.78/third_party/ffmpeg/libavcodec/sbrdsp.c
+--- chromium-60.0.3112.78/third_party/ffmpeg/libavcodec/sbrdsp.c.mp3 2017-07-31 10:18:48.000000000 -0400
++++ chromium-60.0.3112.78/third_party/ffmpeg/libavcodec/sbrdsp.c 2017-07-31 10:57:55.110230730 -0400
+@@ -23,6 +23,7 @@
+ #define USE_FIXED 0
+
+ #include "aac.h"
++#include "aacsbrdata.h"
+ #include "config.h"
+ #include "libavutil/attributes.h"
+ #include "libavutil/intfloat.h"
+diff -up chromium-60.0.3112.78/third_party/webrtc/examples/objc/AppRTCMobile/ios/resources/mozart.mp3 chromium-60.0.3112.78/third_party/webrtc/examples/objc/AppRTCMobile/ios/resources/mozart
+diff -up chromium-60.0.3112.78/tools/android/audio_focus_grabber/java/res/raw/ping.mp3 chromium-60.0.3112.78/tools/android/audio_focus_grabber/java/res/raw/ping
diff --git a/chromium-60.0.3112.78-fix-gn-bootstrap.patch b/chromium-60.0.3112.78-fix-gn-bootstrap.patch
new file mode 100644
index 0000000..b67d18f
--- /dev/null
+++ b/chromium-60.0.3112.78-fix-gn-bootstrap.patch
@@ -0,0 +1,11 @@
+diff -up chromium-60.0.3112.78/tools/gn/bootstrap/bootstrap.py.fixme chromium-60.0.3112.78/tools/gn/bootstrap/bootstrap.py
+--- chromium-60.0.3112.78/tools/gn/bootstrap/bootstrap.py.fixme 2017-07-31 11:47:11.660774702 -0400
++++ chromium-60.0.3112.78/tools/gn/bootstrap/bootstrap.py 2017-07-31 11:47:32.859362600 -0400
+@@ -487,6 +487,7 @@ def write_gn_ninja(path, root_gen_dir, o
+ 'base/sys_info.cc',
+ 'base/task_runner.cc',
+ 'base/task_scheduler/delayed_task_manager.cc',
++ 'base/task_scheduler/environment_config.cc',
+ 'base/task_scheduler/post_task.cc',
+ 'base/task_scheduler/priority_queue.cc',
+ 'base/task_scheduler/scheduler_lock_impl.cc',
diff --git a/chromium-60.0.3112.78-gcc7.patch b/chromium-60.0.3112.78-gcc7.patch
new file mode 100644
index 0000000..ae8f5c8
--- /dev/null
+++ b/chromium-60.0.3112.78-gcc7.patch
@@ -0,0 +1,80 @@
+diff -up chromium-60.0.3112.78/third_party/WebKit/Source/platform/graphics/gpu/SharedGpuContext.h.gcc7 chromium-60.0.3112.78/third_party/WebKit/Source/platform/graphics/gpu/SharedGpuContext.h
+--- chromium-60.0.3112.78/third_party/WebKit/Source/platform/graphics/gpu/SharedGpuContext.h.gcc7 2017-07-25 15:05:15.000000000 -0400
++++ chromium-60.0.3112.78/third_party/WebKit/Source/platform/graphics/gpu/SharedGpuContext.h 2017-07-31 10:51:08.530131802 -0400
+@@ -8,6 +8,7 @@
+ #include "platform/PlatformExport.h"
+ #include "platform/wtf/ThreadSpecific.h"
+
++#include <functional>
+ #include <memory>
+
+ namespace gpu {
+diff -up chromium-60.0.3112.78/v8/src/objects-body-descriptors.h.gcc7 chromium-60.0.3112.78/v8/src/objects-body-descriptors.h
+--- chromium-60.0.3112.78/v8/src/objects-body-descriptors.h.gcc7 2017-07-31 10:51:08.531131782 -0400
++++ chromium-60.0.3112.78/v8/src/objects-body-descriptors.h 2017-07-31 10:55:08.989458924 -0400
+@@ -99,7 +99,7 @@ class FixedBodyDescriptor final : public
+
+ template <typename StaticVisitor>
+ static inline void IterateBody(HeapObject* obj, int object_size) {
+- IterateBody(obj);
++ IterateBody<StaticVisitor>(obj);
+ }
+
+ static inline int SizeOf(Map* map, HeapObject* object) { return kSize; }
+diff -up chromium-60.0.3112.78/v8/src/objects/hash-table.h.gcc7 chromium-60.0.3112.78/v8/src/objects/hash-table.h
+--- chromium-60.0.3112.78/v8/src/objects/hash-table.h.gcc7 2017-07-25 15:06:36.000000000 -0400
++++ chromium-60.0.3112.78/v8/src/objects/hash-table.h 2017-07-31 10:51:08.531131782 -0400
+@@ -138,22 +138,8 @@ class HashTable : public HashTableBase {
+ public:
+ typedef Shape ShapeT;
+
+- // Wrapper methods
+- inline uint32_t Hash(Key key) {
+- if (Shape::UsesSeed) {
+- return Shape::SeededHash(key, GetHeap()->HashSeed());
+- } else {
+- return Shape::Hash(key);
+- }
+- }
+-
+- inline uint32_t HashForObject(Key key, Object* object) {
+- if (Shape::UsesSeed) {
+- return Shape::SeededHashForObject(key, GetHeap()->HashSeed(), object);
+- } else {
+- return Shape::HashForObject(key, object);
+- }
+- }
++ inline uint32_t Hash(Key key);
++ inline uint32_t HashForObject(Key key, Object* object);
+
+ // Returns a new HashTable object.
+ MUST_USE_RESULT static Handle<Derived> New(
+diff -up chromium-60.0.3112.78/v8/src/objects-inl.h.gcc7 chromium-60.0.3112.78/v8/src/objects-inl.h
+--- chromium-60.0.3112.78/v8/src/objects-inl.h.gcc7 2017-07-25 15:06:36.000000000 -0400
++++ chromium-60.0.3112.78/v8/src/objects-inl.h 2017-07-31 10:51:08.533131742 -0400
+@@ -47,6 +47,25 @@
+ namespace v8 {
+ namespace internal {
+
++template <typename Derived, typename Shape, typename Key>
++uint32_t HashTable<Derived, Shape, Key>::Hash(Key key) {
++ if (Shape::UsesSeed) {
++ return Shape::SeededHash(key, GetHeap()->HashSeed());
++ } else {
++ return Shape::Hash(key);
++ }
++}
++
++template <typename Derived, typename Shape, typename Key>
++uint32_t HashTable<Derived, Shape, Key>::HashForObject(Key key,
++ Object* object) {
++ if (Shape::UsesSeed) {
++ return Shape::SeededHashForObject(key, GetHeap()->HashSeed(), object);
++ } else {
++ return Shape::HashForObject(key, object);
++ }
++}
++
+ PropertyDetails::PropertyDetails(Smi* smi) {
+ value_ = smi->value();
+ }
diff --git a/chromium-60.0.3112.78-gn-system.patch b/chromium-60.0.3112.78-gn-system.patch
new file mode 100644
index 0000000..60489bb
--- /dev/null
+++ b/chromium-60.0.3112.78-gn-system.patch
@@ -0,0 +1,221 @@
+diff -up chromium-60.0.3112.78/build/linux/unbundle/libjpeg.gn.gnsystem chromium-60.0.3112.78/build/linux/unbundle/libjpeg.gn
+--- chromium-60.0.3112.78/build/linux/unbundle/libjpeg.gn.gnsystem 2017-07-25 15:04:48.000000000 -0400
++++ chromium-60.0.3112.78/build/linux/unbundle/libjpeg.gn 2017-07-31 10:38:25.879951641 -0400
+@@ -16,6 +16,10 @@ source_set("libjpeg") {
+ libs = [ "jpeg" ]
+ }
+
++config("system_libjpeg") {
++ defines = [ "USE_SYSTEM_LIBJPEG=1" ]
++}
++
+ source_set("simd") {
+ }
+
+diff -up chromium-60.0.3112.78/build/linux/unbundle/libusb.gn.gnsystem chromium-60.0.3112.78/build/linux/unbundle/libusb.gn
+--- chromium-60.0.3112.78/build/linux/unbundle/libusb.gn.gnsystem 2017-07-31 10:38:25.880951622 -0400
++++ chromium-60.0.3112.78/build/linux/unbundle/libusb.gn 2017-07-31 10:38:25.879951641 -0400
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
+diff -up chromium-60.0.3112.78/build/linux/unbundle/opus.gn.gnsystem chromium-60.0.3112.78/build/linux/unbundle/opus.gn
+--- chromium-60.0.3112.78/build/linux/unbundle/opus.gn.gnsystem 2017-07-25 15:04:48.000000000 -0400
++++ chromium-60.0.3112.78/build/linux/unbundle/opus.gn 2017-07-31 10:38:25.880951622 -0400
+@@ -1,3 +1,164 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++import("//testing/test.gni")
++
++pkg_config("system_opus") {
++ packages = [ "opus" ]
++}
++
++shim_headers("opus_shim") {
++ root_path = "src/include"
++ headers = [
++ "opus_custom.h",
++ "opus_defines.h",
++ "opus_multistream.h",
++ "opus_types.h",
++ "opus.h",
++ ]
++}
++
++source_set("opus") {
++ deps = [
++ ":opus_shim",
++ ]
++ public_configs = [ ":system_opus" ]
++}
++
++config("opus_test_config") {
++ include_dirs = [
++ "src/celt",
++ "src/silk",
++ ]
++
++ if (is_win) {
++ defines = [ "inline=__inline" ]
++ }
++ if (is_android) {
++ libs = [ "log" ]
++ }
++ if (is_clang) {
++ cflags = [ "-Wno-absolute-value" ]
++ }
++}
++
++executable("opus_compare") {
++ sources = [
++ "src/src/opus_compare.c",
++ ]
++
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [
++ "//build/config/compiler:no_chromium_code",
++ ":opus_test_config",
++ ]
++
++ deps = [
++ ":opus",
++ "//build/config/sanitizers:deps",
++ "//build/win:default_exe_manifest",
++ ]
++}
++
++executable("opus_demo") {
++ sources = [
++ "src/src/opus_demo.c",
++ ]
++
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [
++ "//build/config/compiler:no_chromium_code",
++ ":opus_test_config",
++ ]
++
++ deps = [
++ ":opus",
++ "//build/config/sanitizers:deps",
++ "//build/win:default_exe_manifest",
++ ]
++}
++
++test("test_opus_api") {
++ sources = [
++ "src/tests/test_opus_api.c",
++ ]
++
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [
++ "//build/config/compiler:no_chromium_code",
++ ":opus_test_config",
++ ]
++
++ deps = [
++ ":opus",
++ ]
++}
++
++test("test_opus_encode") {
++ sources = [
++ "src/tests/test_opus_encode.c",
++ ]
++
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [
++ "//build/config/compiler:no_chromium_code",
++ ":opus_test_config",
++ ]
++
++ deps = [
++ ":opus",
++ ]
++}
++
++# GN orders flags on a target before flags from configs. The default config
++# adds -Wall, and this flag have to be after -Wall -- so they need to
++# come from a config and can't be on the target directly.
++config("test_opus_decode_config") {
++ # test_opus_decode passes a null pointer to opus_decode() for an argument
++ # marked as requiring a non-null value by the nonnull function attribute,
++ # and expects opus_decode() to fail. Disable the -Wnonnull option to avoid
++ # a compilation error if -Werror is specified.
++ if (is_posix) {
++ cflags = [ "-Wno-nonnull" ]
++ }
++}
++
++test("test_opus_decode") {
++ sources = [
++ "src/tests/test_opus_decode.c",
++ ]
++
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [
++ "//build/config/compiler:no_chromium_code",
++ ":opus_test_config",
++ ":test_opus_decode_config",
++ ]
++
++ deps = [
++ ":opus",
++ ]
++}
++
++test("test_opus_padding") {
++ sources = [
++ "src/tests/test_opus_padding.c",
++ ]
++
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [
++ "//build/config/compiler:no_chromium_code",
++ ":opus_test_config",
++ ]
++
++ deps = [
++ ":opus",
++ ]
++}
++
+ # Copyright 2017 The Chromium Authors. All rights reserved.
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+diff -up chromium-60.0.3112.78/build/linux/unbundle/replace_gn_files.py.gnsystem chromium-60.0.3112.78/build/linux/unbundle/replace_gn_files.py
+--- chromium-60.0.3112.78/build/linux/unbundle/replace_gn_files.py.gnsystem 2017-07-31 10:38:25.880951622 -0400
++++ chromium-60.0.3112.78/build/linux/unbundle/replace_gn_files.py 2017-07-31 10:39:58.067159914 -0400
+@@ -26,6 +26,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'build/secondary/third_party/libjpeg_turbo/BUILD.gn',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/chromium-60.0.3112.78-gtk2fix.patch b/chromium-60.0.3112.78-gtk2fix.patch
new file mode 100644
index 0000000..ecf042d
--- /dev/null
+++ b/chromium-60.0.3112.78-gtk2fix.patch
@@ -0,0 +1,612 @@
+diff -up chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.cc.gtk2fix chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.cc
+--- chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.cc.gtk2fix 2017-08-03 10:26:36.816787227 -0400
++++ chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.cc 2017-08-03 10:56:53.345661368 -0400
+@@ -60,6 +60,7 @@
+ #include "ui/views/controls/button/blue_button.h"
+ #include "ui/views/controls/button/label_button.h"
+ #include "ui/views/controls/button/label_button_border.h"
++#include "ui/views/linux_ui/device_scale_factor_observer.h"
+ #include "ui/views/linux_ui/window_button_order_observer.h"
+ #include "ui/views/resources/grit/views_resources.h"
+
+@@ -315,17 +316,6 @@ gfx::FontRenderParams GetGtkFontRenderPa
+ return params;
+ }
+
+-float GetRawDeviceScaleFactor() {
+- if (display::Display::HasForceDeviceScaleFactor())
+- return display::Display::GetForcedDeviceScaleFactor();
+-
+- GdkScreen* screen = gdk_screen_get_default();
+- gint scale = gdk_screen_get_monitor_scale_factor(
+- screen, gdk_screen_get_primary_monitor(screen));
+- gdouble resolution = gdk_screen_get_resolution(screen);
+- return resolution <= 0 ? scale : resolution * scale / kDefaultDPI;
+-}
+-
+ views::LinuxUI::NonClientMiddleClickAction GetDefaultMiddleClickAction() {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ switch (base::nix::GetDesktopEnvironment(env.get())) {
+@@ -414,19 +404,17 @@ GtkUi::GtkUi() : middle_click_action_(Ge
+ #if GTK_MAJOR_VERSION == 2
+ native_theme_ = NativeThemeGtk2::instance();
+ fake_window_ = chrome_gtk_frame_new();
+- gtk_widget_realize(fake_window_); // Is this necessary?
+ #elif GTK_MAJOR_VERSION == 3
+ native_theme_ = NativeThemeGtk3::instance();
+- (void)fake_window_; // Silence the unused warning.
++ fake_window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ #else
+ #error "Unsupported GTK version"
+ #endif
++ gtk_widget_realize(fake_window_);
+ }
+
+ GtkUi::~GtkUi() {
+-#if GTK_MAJOR_VERSION == 2
+ gtk_widget_destroy(fake_window_);
+-#endif
+ }
+
+ void OnThemeChanged(GObject* obj, GParamSpec* param, GtkUi* gtkui) {
+@@ -440,6 +428,17 @@ void GtkUi::Initialize() {
+ g_signal_connect_after(settings, "notify::gtk-icon-theme-name",
+ G_CALLBACK(OnThemeChanged), this);
+
++ GdkScreen* screen = gdk_screen_get_default();
++ // Listen for DPI changes.
++ g_signal_connect_after(screen, "notify::resolution",
++ G_CALLBACK(OnDeviceScaleFactorMaybeChangedThunk),
++ this);
++ // Listen for scale factor changes. We would prefer to listen on
++ // |screen|, but there is no scale-factor property, so use an
++ // unmapped window instead.
++ g_signal_connect(fake_window_, "notify::scale-factor",
++ G_CALLBACK(OnDeviceScaleFactorMaybeChangedThunk), this);
++
+ LoadGtkValues();
+
+ #if BUILDFLAG(ENABLE_BASIC_PRINTING)
+@@ -701,12 +700,12 @@ void GtkUi::AddWindowButtonOrderObserver
+ observer->OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_);
+ }
+
+- observer_list_.AddObserver(observer);
++ window_button_order_observer_list_.AddObserver(observer);
+ }
+
+ void GtkUi::RemoveWindowButtonOrderObserver(
+ views::WindowButtonOrderObserver* observer) {
+- observer_list_.RemoveObserver(observer);
++ window_button_order_observer_list_.RemoveObserver(observer);
+ }
+
+ void GtkUi::SetWindowButtonOrdering(
+@@ -715,8 +714,10 @@ void GtkUi::SetWindowButtonOrdering(
+ leading_buttons_ = leading_buttons;
+ trailing_buttons_ = trailing_buttons;
+
+- for (views::WindowButtonOrderObserver& observer : observer_list_)
++ for (views::WindowButtonOrderObserver& observer :
++ window_button_order_observer_list_) {
+ observer.OnWindowButtonOrderingChange(leading_buttons_, trailing_buttons_);
++ }
+ }
+
+ void GtkUi::SetNonClientMiddleClickAction(NonClientMiddleClickAction action) {
+@@ -768,6 +769,16 @@ void GtkUi::NotifyWindowManagerStartupCo
+ gdk_notify_startup_complete();
+ }
+
++void GtkUi::AddDeviceScaleFactorObserver(
++ views::DeviceScaleFactorObserver* observer) {
++ device_scale_factor_observer_list_.AddObserver(observer);
++}
++
++void GtkUi::RemoveDeviceScaleFactorObserver(
++ views::DeviceScaleFactorObserver* observer) {
++ device_scale_factor_observer_list_.RemoveObserver(observer);
++}
++
+ bool GtkUi::MatchEvent(const ui::Event& event,
+ std::vector<ui::TextEditCommandAuraLinux>* commands) {
+ // Ensure that we have a keyboard handler.
+@@ -777,6 +788,10 @@ bool GtkUi::MatchEvent(const ui::Event&
+ return key_bindings_handler_->MatchEvent(event, commands);
+ }
+
++void GtkUi::OnDeviceScaleFactorMaybeChanged(void*, GParamSpec*) {
++ UpdateDeviceScaleFactor();
++}
++
+ void GtkUi::SetScrollbarColors() {
+ thumb_active_color_ = SkColorSetRGB(244, 244, 244);
+ thumb_inactive_color_ = SkColorSetRGB(234, 234, 234);
+@@ -1037,14 +1052,38 @@ void GtkUi::ResetStyle() {
+ native_theme_->NotifyObservers();
+ }
+
+-void GtkUi::UpdateDeviceScaleFactor() {
+- // Note: Linux chrome currently does not support dynamic DPI
+- // changes. This is to allow flags to override the DPI settings
+- // during startup.
+- float scale = GetRawDeviceScaleFactor();
++float GtkUi::GetRawDeviceScaleFactor() {
++ if (display::Display::HasForceDeviceScaleFactor())
++ return display::Display::GetForcedDeviceScaleFactor();
++
++#if GTK_MAJOR_VERSION == 2
++ GtkSettings* gtk_settings = gtk_settings_get_default();
++ gint gtk_dpi = -1;
++ g_object_get(gtk_settings, "gtk-xft-dpi", >k_dpi, nullptr);
++ const float scale_factor = gtk_dpi / (1024 * kDefaultDPI);
++#else
++ GdkScreen* screen = gdk_screen_get_default();
++ gint scale = gtk_widget_get_scale_factor(fake_window_);
++ DCHECK_GT(scale, 0);
++ gdouble resolution = gdk_screen_get_resolution(screen);
++ const float scale_factor =
++ resolution <= 0 ? scale : resolution * scale / kDefaultDPI;
++#endif
++
+ // Blacklist scaling factors <120% (crbug.com/484400) and round
+ // to 1 decimal to prevent rendering problems (crbug.com/485183).
+- device_scale_factor_ = scale < 1.2f ? 1.0f : roundf(scale * 10) / 10;
++ return scale_factor < 1.2f ? 1.0f : roundf(scale_factor * 10) / 10;
++}
++
++void GtkUi::UpdateDeviceScaleFactor() {
++ float old_device_scale_factor = device_scale_factor_;
++ device_scale_factor_ = GetRawDeviceScaleFactor();
++ if (device_scale_factor_ != old_device_scale_factor) {
++ for (views::DeviceScaleFactorObserver& observer :
++ device_scale_factor_observer_list_) {
++ observer.OnDeviceScaleFactorChanged();
++ }
++ }
+ UpdateDefaultFont();
+ }
+
+diff -up chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.h.gtk2fix chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.h
+--- chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.h.gtk2fix 2017-08-03 10:35:28.031517634 -0400
++++ chromium-60.0.3112.78/chrome/browser/ui/libgtkui/gtk_ui.h 2017-08-03 10:37:29.300173415 -0400
+@@ -18,12 +18,14 @@
+ #include "ui/views/linux_ui/linux_ui.h"
+ #include "ui/views/window/frame_buttons.h"
+
++typedef struct _GParamSpec GParamSpec;
+ typedef struct _GtkStyle GtkStyle;
+ typedef struct _GtkWidget GtkWidget;
+
+ namespace libgtkui {
+ class Gtk2KeyBindingsHandler;
+ class GConfListener;
++class DeviceScaleFactorObserver;
+
+ // Interface to GTK2 desktop features.
+ //
+@@ -97,6 +99,10 @@ class GtkUi : public views::LinuxUI {
+ bool UnityIsRunning() override;
+ NonClientMiddleClickAction GetNonClientMiddleClickAction() override;
+ void NotifyWindowManagerStartupComplete() override;
++ void AddDeviceScaleFactorObserver(
++ views::DeviceScaleFactorObserver* observer) override;
++ void RemoveDeviceScaleFactorObserver(
++ views::DeviceScaleFactorObserver* observer) override;
+
+ // ui::TextEditKeybindingDelegate:
+ bool MatchEvent(const ui::Event& event,
+@@ -110,6 +116,12 @@ class GtkUi : public views::LinuxUI {
+ typedef std::map<int, SkColor> ColorMap;
+ typedef std::map<int, color_utils::HSL> TintMap;
+
++ CHROMEG_CALLBACK_1(GtkUi,
++ void,
++ OnDeviceScaleFactorMaybeChanged,
++ void*,
++ GParamSpec*);
++
+ // This method returns the colors webkit will use for the scrollbars. When no
+ // colors are specified by the GTK+ theme, this function averages of the
+ // thumb part and of the track colors.
+@@ -129,9 +141,12 @@ class GtkUi : public views::LinuxUI {
+ bool GetChromeStyleColor(const char* sytle_property,
+ SkColor* ret_color) const;
+
++ float GetRawDeviceScaleFactor();
++
+ ui::NativeTheme* native_theme_;
+
+- // A GtkWindow object with the class "ChromeGtkFrame".
++ // On Gtk2, A GtkWindow object with the class "ChromeGtkFrame". On
++ // Gtk3, a regular GtkWindow.
+ GtkWidget* fake_window_;
+
+ // Colors calculated by LoadGtkValues() that are given to the
+@@ -171,7 +186,12 @@ class GtkUi : public views::LinuxUI {
+ std::unique_ptr<Gtk2KeyBindingsHandler> key_bindings_handler_;
+
+ // Objects to notify when the window frame button order changes.
+- base::ObserverList<views::WindowButtonOrderObserver> observer_list_;
++ base::ObserverList<views::WindowButtonOrderObserver>
++ window_button_order_observer_list_;
++
++ // Objects to notify when the device scale factor changes.
++ base::ObserverList<views::DeviceScaleFactorObserver>
++ device_scale_factor_observer_list_;
+
+ // Whether we should lower the window on a middle click to the non client
+ // area.
+diff -up chromium-60.0.3112.78/ui/views/linux_ui/device_scale_factor_observer.h.gtk2fix chromium-60.0.3112.78/ui/views/linux_ui/device_scale_factor_observer.h
+--- chromium-60.0.3112.78/ui/views/linux_ui/device_scale_factor_observer.h.gtk2fix 2017-08-03 10:39:23.600963296 -0400
++++ chromium-60.0.3112.78/ui/views/linux_ui/device_scale_factor_observer.h 2017-08-03 10:39:39.024664885 -0400
+@@ -0,0 +1,19 @@
++// Copyright 2017 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef UI_VIEWS_LINUX_UI_DEVICE_SCALE_FACTOR_OBSERVER_H_
++#define UI_VIEWS_LINUX_UI_DEVICE_SCALE_FACTOR_OBSERVER_H_
++
++namespace views {
++
++class DeviceScaleFactorObserver {
++ public:
++ virtual ~DeviceScaleFactorObserver() {}
++
++ virtual void OnDeviceScaleFactorChanged() = 0;
++};
++
++} // namespace views
++
++#endif // UI_VIEWS_LINUX_UI_DEVICE_SCALE_FACTOR_OBSERVER_H_
+diff -up chromium-60.0.3112.78/ui/views/linux_ui/linux_ui.h.gtk2fix chromium-60.0.3112.78/ui/views/linux_ui/linux_ui.h
+--- chromium-60.0.3112.78/ui/views/linux_ui/linux_ui.h.gtk2fix 2017-08-03 10:39:48.866474799 -0400
++++ chromium-60.0.3112.78/ui/views/linux_ui/linux_ui.h 2017-08-03 10:41:05.598991893 -0400
+@@ -38,6 +38,7 @@ class NativeTheme;
+
+ namespace views {
+ class Border;
++class DeviceScaleFactorObserver;
+ class LabelButton;
+ class LabelButtonBorder;
+ class WindowButtonOrderObserver;
+@@ -157,6 +158,16 @@ class VIEWS_EXPORT LinuxUI : public ui::
+
+ // Determines the device scale factor of the primary screen.
+ virtual float GetDeviceScaleFactor() const = 0;
++
++ // Registers |observer| to be notified about changes to the device
++ // scale factor.
++ virtual void AddDeviceScaleFactorObserver(
++ DeviceScaleFactorObserver* observer) = 0;
++
++ // Unregisters |observer| from receiving changes to the device scale
++ // factor.
++ virtual void RemoveDeviceScaleFactorObserver(
++ DeviceScaleFactorObserver* observer) = 0;
+ };
+
+ } // namespace views
+diff -up chromium-60.0.3112.78/ui/views/test/desktop_screen_x11_test_api.cc.gtk2fix chromium-60.0.3112.78/ui/views/test/desktop_screen_x11_test_api.cc
+--- chromium-60.0.3112.78/ui/views/test/desktop_screen_x11_test_api.cc.gtk2fix 2017-08-03 10:41:28.014558483 -0400
++++ chromium-60.0.3112.78/ui/views/test/desktop_screen_x11_test_api.cc 2017-08-03 10:41:49.326146074 -0400
+@@ -13,7 +13,7 @@ namespace test {
+ void DesktopScreenX11TestApi::UpdateDisplays() {
+ DesktopScreenX11* screen =
+ static_cast<DesktopScreenX11*>(display::Screen::GetScreen());
+- screen->ConfigureTimerFired();
++ screen->UpdateDisplays();
+ }
+
+ } // namespace test
+diff -up chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.cc.gtk2fix chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.cc
+--- chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.cc.gtk2fix 2017-08-03 10:41:59.219954866 -0400
++++ chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.cc 2017-08-03 10:47:16.589818323 -0400
+@@ -11,6 +11,7 @@
+ #undef RootWindow
+
+ #include "base/logging.h"
++#include "base/threading/thread_task_runner_handle.h"
+ #include "base/trace_event/trace_event.h"
+ #include "ui/aura/window.h"
+ #include "ui/aura/window_event_dispatcher.h"
+@@ -40,10 +41,6 @@ const char* const kAtomsToCache[] = {
+ nullptr
+ };
+
+-// The delay to perform configuration after RRNotify. See the comment
+-// in |Dispatch()|.
+-const int64_t kConfigureDelayMs = 500;
+-
+ double GetDeviceScaleFactor() {
+ float device_scale_factor = 1.0f;
+ if (views::LinuxUI::instance()) {
+@@ -95,7 +92,10 @@ DesktopScreenX11::DesktopScreenX11()
+ has_xrandr_(false),
+ xrandr_event_base_(0),
+ primary_display_index_(0),
++ weak_factory_(this),
+ atom_cache_(xdisplay_, kAtomsToCache) {
++ if (views::LinuxUI::instance())
++ views::LinuxUI::instance()->AddDeviceScaleFactorObserver(this);
+ // We only support 1.3+. There were library changes before this and we should
+ // use the new interface instead of the 1.2 one.
+ int randr_version_major = 0;
+@@ -124,6 +124,8 @@ DesktopScreenX11::DesktopScreenX11()
+ }
+
+ DesktopScreenX11::~DesktopScreenX11() {
++ if (views::LinuxUI::instance())
++ views::LinuxUI::instance()->AddDeviceScaleFactorObserver(this);
+ if (has_xrandr_ && ui::PlatformEventSource::GetInstance())
+ ui::PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this);
+ }
+@@ -251,18 +253,7 @@ uint32_t DesktopScreenX11::DispatchEvent
+ } else if (event->type - xrandr_event_base_ == RRNotify ||
+ (event->type == PropertyNotify &&
+ event->xproperty.atom == atom_cache_.GetAtom("_NET_WORKAREA"))) {
+- // There's some sort of observer dispatch going on here, but I don't think
+- // it's the screen's?
+- if (configure_timer_.get() && configure_timer_->IsRunning()) {
+- configure_timer_->Reset();
+- } else {
+- configure_timer_.reset(new base::OneShotTimer());
+- configure_timer_->Start(
+- FROM_HERE,
+- base::TimeDelta::FromMilliseconds(kConfigureDelayMs),
+- this,
+- &DesktopScreenX11::ConfigureTimerFired);
+- }
++ RestartDelayedConfigurationTask();
+ } else {
+ NOTREACHED();
+ }
+@@ -270,11 +261,15 @@ uint32_t DesktopScreenX11::DispatchEvent
+ return ui::POST_DISPATCH_NONE;
+ }
+
++void DesktopScreenX11::OnDeviceScaleFactorChanged() {
++ RestartDelayedConfigurationTask();
++}
++
+ // static
+ void DesktopScreenX11::UpdateDeviceScaleFactorForTest() {
+ DesktopScreenX11* screen =
+ static_cast<DesktopScreenX11*>(display::Screen::GetScreen());
+- screen->ConfigureTimerFired();
++ screen->UpdateDisplays();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+@@ -288,7 +283,11 @@ DesktopScreenX11::DesktopScreenX11(
+ xrandr_event_base_(0),
+ displays_(test_displays),
+ primary_display_index_(0),
+- atom_cache_(xdisplay_, kAtomsToCache) {}
++ weak_factory_(this),
++ atom_cache_(xdisplay_, kAtomsToCache) {
++ if (views::LinuxUI::instance())
++ views::LinuxUI::instance()->AddDeviceScaleFactorObserver(this);
++}
+
+ std::vector<display::Display> DesktopScreenX11::BuildDisplaysFromXRandRInfo() {
+ std::vector<display::Display> displays;
+@@ -390,7 +389,14 @@ std::vector<display::Display> DesktopScr
+ return displays;
+ }
+
+-void DesktopScreenX11::ConfigureTimerFired() {
++void DesktopScreenX11::RestartDelayedConfigurationTask() {
++ delayed_configuration_task_.Reset(base::Bind(
++ &DesktopScreenX11::UpdateDisplays, weak_factory_.GetWeakPtr()));
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, delayed_configuration_task_.callback());
++}
++
++void DesktopScreenX11::UpdateDisplays() {
+ std::vector<display::Display> old_displays = displays_;
+ SetDisplaysInternal(BuildDisplaysFromXRandRInfo());
+ change_notifier_.NotifyDisplaysChanged(old_displays, displays_);
+diff -up chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.h.gtk2fix chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.h
+--- chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.h.gtk2fix 2017-08-03 10:47:28.734583288 -0400
++++ chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_screen_x11.h 2017-08-03 10:49:54.850756813 -0400
+@@ -9,11 +9,12 @@
+
+ #include <memory>
+
++#include "base/cancelable_callback.h"
+ #include "base/macros.h"
+-#include "base/timer/timer.h"
+ #include "ui/display/display_change_notifier.h"
+ #include "ui/display/screen.h"
+ #include "ui/events/platform/platform_event_dispatcher.h"
++#include "ui/views/linux_ui/device_scale_factor_observer.h"
+ #include "ui/gfx/x/x11_atom_cache.h"
+ #include "ui/views/views_export.h"
+
+@@ -30,7 +31,8 @@ class DesktopScreenX11TestApi;
+
+ // Our singleton screen implementation that talks to xrandr.
+ class VIEWS_EXPORT DesktopScreenX11 : public display::Screen,
+- public ui::PlatformEventDispatcher {
++ public ui::PlatformEventDispatcher,
++ public views::DeviceScaleFactorObserver {
+ public:
+ DesktopScreenX11();
+
+@@ -56,6 +58,9 @@ class VIEWS_EXPORT DesktopScreenX11 : pu
+ bool CanDispatchEvent(const ui::PlatformEvent& event) override;
+ uint32_t DispatchEvent(const ui::PlatformEvent& event) override;
+
++ // views::DeviceScaleFactorObserver:
++ void OnDeviceScaleFactorChanged() override;
++
+ static void UpdateDeviceScaleFactorForTest();
+
+ private:
+@@ -69,10 +74,15 @@ class VIEWS_EXPORT DesktopScreenX11 : pu
+ // the X server.
+ std::vector<display::Display> BuildDisplaysFromXRandRInfo();
+
+- // We delay updating the display so we can coalesce events.
+- void ConfigureTimerFired();
++ // Removes |delayed_configuration_task_| from the task queue (if
++ // it's in the queue) and adds it back at the end of the queue.
++ void RestartDelayedConfigurationTask();
++
++ // Updates |displays_| with the latest XRandR info.
++ void UpdateDisplays();
+
+- // Updates |displays_| and sets FontRenderParams's scale factor.
++ // Updates |displays_| from |displays| and sets FontRenderParams's scale
++ // factor.
+ void SetDisplaysInternal(const std::vector<display::Display>& displays);
+
+ Display* xdisplay_;
+@@ -91,12 +101,14 @@ class VIEWS_EXPORT DesktopScreenX11 : pu
+ // The index into displays_ that represents the primary display.
+ size_t primary_display_index_;
+
+- // The timer to delay configuring outputs. See also the comments in
+- // Dispatch().
+- std::unique_ptr<base::OneShotTimer> configure_timer_;
++ // The task to delay configuring outputs. We delay updating the
++ // display so we can coalesce events.
++ base::CancelableCallback<void()> delayed_configuration_task_;
+
+ display::DisplayChangeNotifier change_notifier_;
+
++ base::WeakPtrFactory<DesktopScreenX11> weak_factory_;
++
+ ui::X11AtomCache atom_cache_;
+
+ DISALLOW_COPY_AND_ASSIGN(DesktopScreenX11);
+diff -up chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc.gtk2fix chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
+--- chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc.gtk2fix 2017-08-03 10:50:14.858370042 -0400
++++ chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc 2017-08-03 10:52:58.367207187 -0400
+@@ -212,13 +212,16 @@ DesktopWindowTreeHostX11::DesktopWindowT
+ has_pointer_focus_(false),
+ modal_dialog_counter_(0),
+ close_widget_factory_(this),
+- weak_factory_(this) {}
++ weak_factory_(this) {
++ display::Screen::GetScreen()->AddObserver(this);
++}
+
+ DesktopWindowTreeHostX11::~DesktopWindowTreeHostX11() {
+ window()->ClearProperty(kHostForRootWindow);
+ aura::client::SetWindowMoveClient(window(), NULL);
+ desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this);
+ DestroyDispatcher();
++ display::Screen::GetScreen()->RemoveObserver(this);
+ }
+
+ // static
+@@ -1360,6 +1363,30 @@ void DesktopWindowTreeHostX11::OnCursorV
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
++// DesktopWindowTreeHostX11, display::DisplayObserver implementation:
++
++void DesktopWindowTreeHostX11::OnDisplayAdded(
++ const display::Display& new_display) {}
++
++void DesktopWindowTreeHostX11::OnDisplayRemoved(
++ const display::Display& old_display) {}
++
++void DesktopWindowTreeHostX11::OnDisplayMetricsChanged(
++ const display::Display& display,
++ uint32_t changed_metrics) {
++ if ((changed_metrics & DISPLAY_METRIC_DEVICE_SCALE_FACTOR) &&
++ display::Screen::GetScreen()->GetDisplayNearestWindow(window()).id() ==
++ display.id()) {
++ // When the scale factor changes, also pretend that a resize
++ // occured so that the window layout will be refreshed and a
++ // compositor redraw will be scheduled. This is weird, but works.
++ // TODO(thomasanderson): Figure out a more direct way of doing
++ // this.
++ RestartDelayedResizeTask();
++ }
++}
++
++////////////////////////////////////////////////////////////////////////////////
+ // DesktopWindowTreeHostX11, private:
+
+ void DesktopWindowTreeHostX11::InitX11Window(
+@@ -2079,13 +2106,8 @@ uint32_t DesktopWindowTreeHostX11::Dispa
+ if (origin_changed)
+ OnHostMovedInPixels(bounds_in_pixels_.origin());
+
+- if (size_changed) {
+- delayed_resize_task_.Reset(base::Bind(
+- &DesktopWindowTreeHostX11::DelayedResize,
+- close_widget_factory_.GetWeakPtr(), bounds_in_pixels.size()));
+- base::ThreadTaskRunnerHandle::Get()->PostTask(
+- FROM_HERE, delayed_resize_task_.callback());
+- }
++ if (size_changed)
++ RestartDelayedResizeTask();
+ break;
+ }
+ case GenericEvent: {
+@@ -2358,6 +2380,14 @@ void DesktopWindowTreeHostX11::EnableEve
+ targeter_for_modal_.reset();
+ }
+
++void DesktopWindowTreeHostX11::RestartDelayedResizeTask() {
++ delayed_resize_task_.Reset(
++ base::Bind(&DesktopWindowTreeHostX11::DelayedResize,
++ close_widget_factory_.GetWeakPtr(), bounds_in_pixels_.size()));
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, delayed_resize_task_.callback());
++}
++
+ ////////////////////////////////////////////////////////////////////////////////
+ // DesktopWindowTreeHost, public:
+
+diff -up chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h.gtk2fix chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h
+--- chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h.gtk2fix 2017-08-03 10:54:34.484348046 -0400
++++ chromium-60.0.3112.78/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h 2017-08-03 10:54:43.564172318 -0400
+@@ -18,6 +18,7 @@
+ #include "ui/aura/scoped_window_targeter.h"
+ #include "ui/aura/window_tree_host.h"
+ #include "ui/base/cursor/cursor_loader_x11.h"
++#include "ui/display/display_observer.h"
+ #include "ui/events/platform/platform_event_dispatcher.h"
+ #include "ui/gfx/geometry/insets.h"
+ #include "ui/gfx/geometry/rect.h"
+@@ -45,7 +46,8 @@ class X11DesktopWindowMoveClient;
+ class VIEWS_EXPORT DesktopWindowTreeHostX11
+ : public DesktopWindowTreeHost,
+ public aura::WindowTreeHost,
+- public ui::PlatformEventDispatcher {
++ public ui::PlatformEventDispatcher,
++ public display::DisplayObserver {
+ public:
+ DesktopWindowTreeHostX11(
+ internal::NativeWidgetDelegate* native_widget_delegate,
+@@ -170,6 +172,12 @@ class VIEWS_EXPORT DesktopWindowTreeHost
+ const gfx::Point& location_in_pixels) override;
+ void OnCursorVisibilityChangedNative(bool show) override;
+
++ // Overridden from display::DisplayObserver:
++ void OnDisplayAdded(const display::Display& new_display) override;
++ void OnDisplayRemoved(const display::Display& old_display) override;
++ void OnDisplayMetricsChanged(const display::Display& display,
++ uint32_t changed_metrics) override;
++
+ private:
+ friend class DesktopWindowTreeHostX11HighDPITest;
+ // Initializes our X11 surface to draw on. This method performs all
+@@ -278,6 +286,10 @@ class VIEWS_EXPORT DesktopWindowTreeHost
+ // Enables event listening after closing |dialog|.
+ void EnableEventListening();
+
++ // Removes |delayed_resize_task_| from the task queue (if it's in
++ // the queue) and adds it back at the end of the queue.
++ void RestartDelayedResizeTask();
++
+ // X11 things
+ // The display and the native X window hosting the root window.
+ XDisplay* xdisplay_;
diff --git a/chromium-60.0.3112.78-jpeg-nomangle.patch b/chromium-60.0.3112.78-jpeg-nomangle.patch
new file mode 100644
index 0000000..0b758a4
--- /dev/null
+++ b/chromium-60.0.3112.78-jpeg-nomangle.patch
@@ -0,0 +1,14 @@
+diff -up chromium-60.0.3112.78/third_party/libjpeg_turbo/jpeglib.h.nomangle chromium-60.0.3112.78/third_party/libjpeg_turbo/jpeglib.h
+--- chromium-60.0.3112.78/third_party/libjpeg_turbo/jpeglib.h.nomangle 2017-08-01 15:29:00.870759406 -0400
++++ chromium-60.0.3112.78/third_party/libjpeg_turbo/jpeglib.h 2017-08-01 15:29:09.326593414 -0400
+@@ -18,10 +18,6 @@
+ #ifndef JPEGLIB_H
+ #define JPEGLIB_H
+
+-/* Begin chromium edits */
+-#include "jpeglibmangler.h"
+-/* End chromium edits */
+-
+ /*
+ * First we include the configuration files that record how this
+ * installation of the JPEG library is set up. jconfig.h can be
diff --git a/chromium-60.0.3112.78-last-commit-position.patch b/chromium-60.0.3112.78-last-commit-position.patch
new file mode 100644
index 0000000..7c26d9f
--- /dev/null
+++ b/chromium-60.0.3112.78-last-commit-position.patch
@@ -0,0 +1,28 @@
+diff -up chromium-60.0.3112.78/tools/gn/BUILD.gn.lastcommit chromium-60.0.3112.78/tools/gn/BUILD.gn
+--- chromium-60.0.3112.78/tools/gn/BUILD.gn.lastcommit 2017-07-31 10:42:38.568041044 -0400
++++ chromium-60.0.3112.78/tools/gn/BUILD.gn 2017-07-31 10:47:50.760974587 -0400
+@@ -268,7 +268,6 @@ executable("gn") {
+
+ deps = [
+ ":gn_lib",
+- ":last_commit_position",
+ "//base",
+ "//build/config:exe_and_shlib_deps",
+ "//build/win:default_exe_manifest",
+diff -up chromium-60.0.3112.78/tools/gn/gn_main.cc.lastcommit chromium-60.0.3112.78/tools/gn/gn_main.cc
+--- chromium-60.0.3112.78/tools/gn/gn_main.cc.lastcommit 2017-07-25 15:05:19.000000000 -0400
++++ chromium-60.0.3112.78/tools/gn/gn_main.cc 2017-07-31 10:42:38.568041044 -0400
+@@ -12,13 +12,7 @@
+ #include "tools/gn/standard_out.h"
+ #include "tools/gn/switches.h"
+
+-// Only the GN-generated build makes this header for now.
+-// TODO(brettw) consider adding this if we need it in GYP.
+-#if defined(GN_BUILD)
+-#include "tools/gn/last_commit_position.h"
+-#else
+ #define LAST_COMMIT_POSITION "UNKNOWN"
+-#endif
+
+ namespace {
+
diff --git a/chromium-60.0.3112.78-no-libpng-prefix.patch b/chromium-60.0.3112.78-no-libpng-prefix.patch
new file mode 100644
index 0000000..0dbdcf9
--- /dev/null
+++ b/chromium-60.0.3112.78-no-libpng-prefix.patch
@@ -0,0 +1,17 @@
+diff -up chromium-60.0.3112.78/third_party/libpng/pnglibconf.h.noprefix chromium-60.0.3112.78/third_party/libpng/pnglibconf.h
+--- chromium-60.0.3112.78/third_party/libpng/pnglibconf.h.noprefix 2017-08-01 14:42:54.321986758 -0400
++++ chromium-60.0.3112.78/third_party/libpng/pnglibconf.h 2017-08-01 14:43:01.493845832 -0400
+@@ -225,13 +225,4 @@
+ #define PNG_USER_CHUNK_MALLOC_MAX 4000000L
+ /* end of chromium settings */
+
+-/* chromium prefixing */
+-/*
+- * This is necessary to build multiple copies of libpng. We need this while pdfium builds
+- * its own copy of libpng.
+- */
+-#define PNG_PREFIX
+-#include "pngprefix.h"
+-/* end of chromium prefixing */
+-
+ #endif /* PNGLCONF_H */
diff --git a/chromium-60.0.3112.78-no-zlib-mangle.patch b/chromium-60.0.3112.78-no-zlib-mangle.patch
new file mode 100644
index 0000000..4b90360
--- /dev/null
+++ b/chromium-60.0.3112.78-no-zlib-mangle.patch
@@ -0,0 +1,13 @@
+diff -up chromium-60.0.3112.78/third_party/zlib/zconf.h.nozmangle chromium-60.0.3112.78/third_party/zlib/zconf.h
+--- chromium-60.0.3112.78/third_party/zlib/zconf.h.nozmangle 2017-08-04 10:45:17.509152089 -0400
++++ chromium-60.0.3112.78/third_party/zlib/zconf.h 2017-08-04 10:45:30.451902380 -0400
+@@ -8,9 +8,6 @@
+ #ifndef ZCONF_H
+ #define ZCONF_H
+
+-/* This include does prefixing as below, but with an updated set of names */
+-#include "names.h"
+-
+ /*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
diff --git a/chromium.spec b/chromium.spec
index e5043e4..5ec59ba 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -8,6 +8,7 @@
# Leave this alone, please.
%global target out/Release
+%global headlesstarget out/Headless
# Debuginfo packages aren't very useful here. If you need to debug
# you should do a proper debug build (not implemented in this spec yet)
@@ -25,7 +26,7 @@
# Requires is trickier.
%global __provides_exclude_from %{chromium_path}/.*\\.so|%{chromium_path}/lib/.*\\.so
-%global privlibs libEGL|libGLESv2|libaccessibility|libanimation|libaura|libaura_extra|libbase|libbase_i18n|libbindings|libblink_core|libblink_modules|libblink_platform|libblink_web|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcc|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcc_surfaces|libchromium_sqlite3|libclearkeycdm|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent|libcpp|libcrcrypto|libdbus|libdevice_base|libdevice_battery|libdevice_event_log|libdevice_gamepad|libdevice_vibration|libdevice_vr|libdevices|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_compositor|libdisplay_types|libdisplay_util|libdomain_reliability|libembedder|libevents|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents_x|libffmpeg|libfingerprint|libgcm|libgeneric_sensor|libgeolocation|libgeometry|libg
eometry_skia|libgesture_detection|libgfx|libgfx_ipc|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_x11|libgin|libgin_features|libgl_in_process_context|libgl_init|libgl_wrapper|libgles2_c_lib|libgles2_implementation|libgles2_utils|libgpu|libgtk2ui|libicui18n|libicuuc|libipc|libjs|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libmanager|libmedia|libmedia_blink|libmedia_gpu|libmedia_mojo_services|libmessage_center|libmidi|libmojo_common_lib|libmojo_ime_lib|libmojo_public_system|libmojo_public_system_cpp|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libonc|libosmesa|libplatform|libplatform_wtf|libpolicy_component|libpolicy_proto|libpower_save_blocker|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_globals|libproxy_config|librange|libsandbox_services|libseccomp_bpf|libsensors|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libsto
rage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base|libui_base_ime|libui_base_x|libui_data_pack|libui_touch_selection|libui_views_mus_lib|liburl|liburl_ipc|liburl_matcher|libuser_manager|libuser_prefs|libv8|libv8_libbase|libv8_libplatform|libviews|libweb_dialogs|libwebdata_common|libwebview|libwidevinecdm|libwidevinecdmadapter|libwm|libwtf|libx11_events_platform|libx11_window
+%global privlibs libaccessibility|libanimation|libaura_extra|libaura|libbase_i18n|libbase|libbindings|libblink_android_mojo_bindings_shared|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libblink_web|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcc|libcc_surfaces|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent_common_mojo_bindings_shared|libcontent|libcpp|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_gamepad|libdevices|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevice_vr_mojo_bindings|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay_compositor|libdisplay|libdisplay_types|libdisplay_util|li
bdomain_reliability|libEGL|libembedder|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents|libevents_x|libffmpeg|libfingerprint|libframe_sinks|libgcm|libgeneric_sensor_public_interfaces_shared|libgeneric_sensor|libgeolocation|libgeometry_skia|libgeometry|libgesture_detection|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_ipc|libgfx|libgfx_x11|libgin_features|libgin|libgles2_c_lib|libgles2_implementation|libgles2_utils|libGLESv2|libgl_init|libgl_in_process_context|libgl_wrapper|libgpu|libgtk2ui|libheadless|libicui18n|libicuuc|libipc_mojom_shared|libipc_mojom|libipc|libjs|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libmanager|libmedia_blink|libmedia_gpu|libmedia_mojo_services|libmedia|libmessage_center|libmidi|libmirclient.9|libmojo_common_lib|libmojo_ime_lib|libmojo_public_system_cpp|libmojo_public_system|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libonc|libosmesa|libplatform|libpoli
cy_component|libpolicy_proto|libpower_save_blocker|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|libpublic|librange|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_internal_shared|libsandbox_services|libseccomp_bpf|libsensors|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom_blink|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_constants|libservice_manager_mojom_shared|libservice_manager_mojom|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base_ime|libui_base|libui_base_x|libui_data_pack|libui_touch_selection|libui_views_mus_lib|liburl_ipc|liburl_matcher|liburl|libuser_manager|libuser_prefs|libv8_libbase|libv8_libplatform|libv8|libviews|libVkLayer_core_validation|libVkLa
yer_object_tracker|libVkLayer_parameter_validation|libVkLayer_swapchain|libVkLayer_threading|libVkLayer_unique_objects|libwebdata_common|libweb_dialogs|libwebview|libwidevinecdmadapter|libwidevinecdm|libwm|libwtf|libx11_events_platform|libx11_window
%global __requires_exclude ^(%{privlibs})\\.so
# Try to not use the Xvfb as it is slow..
@@ -40,14 +41,8 @@
# https://www.chromium.org/developers/testing/addresssanitizer
%global asan 0
-# Only flip this on if stuff is really broken re: nacl.
-# chromium-native_client doesn't build on Fedora 23 because
-# clang is too old and buggy.
-%if 0%{?fedora} <= 23
+# nacl/pnacl are soon to be dead. We're just killing them off early.
%global killnacl 1
-%else
-%global killnacl 0
-%endif
%if 0%{?killnacl}
%global nacl 0
@@ -111,11 +106,15 @@ BuildRequires: libicu-devel >= 5.4
%global default_client_secret miEreAep8nuvTdvLums6qyLK
%global chromoting_client_id 449907151817-8vnlfih032ni8c4jjps9int9t86k546t.apps.googleusercontent.com
-%global majorversion 59
+%global majorversion 60
+%if %{freeworld}
+Name: chromium%{chromium_channel}%{?freeworld:-freeworld}
+%else
Name: chromium%{chromium_channel}
-Version: %{majorversion}.0.3071.115
-Release: 3%{?dist}
+%endif
+Version: %{majorversion}.0.3112.90
+Release: 1%{?dist}
Summary: A WebKit (Blink) powered web browser
Url: http://www.chromium.org/Home
License: BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2)
@@ -149,10 +148,10 @@ Patch18: chromium-52.0.2743.82-master-prefs-path.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1361157
Patch19: chromium-52.0.2743.116-unset-madv_free.patch
# Use gn system files
-Patch20: chromium-54.0.2840.59-gn-system.patch
+Patch20: chromium-60.0.3112.78-gn-system.patch
# Fix last commit position issue
# https://groups.google.com/a/chromium.org/forum/#!topic/gn-dev/7nlJv486bD4
-Patch21: chromium-53.0.2785.92-last-commit-position.patch
+Patch21: chromium-60.0.3112.78-last-commit-position.patch
# Fix issue where timespec is not defined when sys/stat.h is included.
Patch22: chromium-53.0.2785.92-boringssl-time-fix.patch
# I wouldn't have to do this if there was a standard way to append extra compiler flags
@@ -168,24 +167,35 @@ Patch27: chromium-59.0.3071.86-setopaque.patch
Patch31: chromium-56.0.2924.87-fpermissive.patch
# Fix issue with compilation on gcc7
# Thanks to Ben Noordhuis
-Patch33: chromium-59.0.3071.86-gcc7.patch
+Patch33: chromium-60.0.3112.78-gcc7.patch
# Enable mp3 support
-Patch34: chromium-59.0.3071.86-enable-mp3.patch
+Patch34: chromium-60.0.3112.78-enable-mp3.patch
# Revert https://chromium.googlesource.com/chromium/src/+/b794998819088f76b4cf44c8...
# https://bugs.chromium.org/p/chromium/issues/detail?id=712737
# https://bugzilla.redhat.com/show_bug.cgi?id=1446851
Patch36: chromium-58.0.3029.96-revert-b794998819088f76b4cf44c8db6940240c563cf4.patch
# Correctly compile the stdatomic.h in ffmpeg with gcc 4.8
Patch37: chromium-59.0.3071.86-ffmpeg-stdatomic.patch
-# RHEL is too old to have this header in kernel-headers
-# and some Fedora versions do not contain what Chromium expects to find
-# so just use the hardcoded values instead
-Patch38: chromium-59.0.3071.86-dma-buf-header-hack.patch
# Nacl can't die soon enough
Patch39: chromium-59.0.3071.86-system-clang.patch
# Change struct ucontext to ucontext_t in breakpad
# https://patchwork.openembedded.org/patch/141358/
Patch40: chromium-59.0.3071.115-ucontext-fix.patch
+# Fix gn bootstrap. Not convinced anyone at Google ever tries to build Chromium from source.
+Patch41: chromium-60.0.3112.78-fix-gn-bootstrap.patch
+# Do not prefix libpng functions
+Patch42: chromium-60.0.3112.78-no-libpng-prefix.patch
+# Do not mangle libjpeg
+Patch43: chromium-60.0.3112.78-jpeg-nomangle.patch
+# Fix gtk2 build by applying these changes
+# https://chromium.googlesource.com/chromium/src.git/+/804fd4ab5e41584d61c4...
+# https://chromium.googlesource.com/chromium/src.git/+/4313334bead373b139ee...
+# https://chromium.googlesource.com/chromium/src.git/+/ca407201886875966db9...
+# This probably will not be needed with 61+
+Patch44: chromium-60.0.3112.78-gtk2fix.patch
+# Do not mangle zlib
+Patch45: chromium-60.0.3112.78-no-zlib-mangle.patch
+
### Chromium Tests Patches ###
Patch100: chromium-46.0.2490.86-use_system_opus.patch
@@ -220,9 +230,6 @@ Source9: chromium-browser.xml
Source10: https://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip
Source11: chrome-remote-desktop@.service
Source13: master_preferences
-# Upstream did not include third_party/freetype source code in the tarball for 59.0.3071.115
-# So we copy it from the previous build. :/
-Source14: chromium-59.0.3071.109-freetype.tar.bz2
# We can assume gcc and binutils.
BuildRequires: gcc-c++
@@ -241,7 +248,7 @@ BuildRequires: glib2-devel
BuildRequires: gnome-keyring-devel
BuildRequires: gtk2-devel
# Yes. This too.
-BuildRequires: gtk3-devel
+# BuildRequires: gtk3-devel
BuildRequires: glibc-devel
BuildRequires: gperf
BuildRequires: libatomic
@@ -253,7 +260,6 @@ BuildRequires: libusb-devel
BuildRequires: libXdamage-devel
BuildRequires: libXScrnSaver-devel
BuildRequires: libXtst-devel
-BuildRequires: mesa-libGL-devel
BuildRequires: nodejs
BuildRequires: nss-devel
BuildRequires: pciutils-devel
@@ -296,6 +302,7 @@ BuildRequires: bzip2-devel
BuildRequires: dbus-glib-devel
BuildRequires: elfutils-libelf-devel
BuildRequires: flac-devel
+BuildRequires: freetype-devel
BuildRequires: hwdata
BuildRequires: kernel-headers
BuildRequires: libevent-devel
@@ -308,7 +315,7 @@ BuildRequires: libffi-devel
BuildRequires: libicu-devel = 54.1
%endif
BuildRequires: libjpeg-devel
-# BuildRequires: libpng-devel
+BuildRequires: libpng-devel
%if 0
# see https://code.google.com/p/chromium/issues/detail?id=501318
BuildRequires: libsrtp-devel >= 1.4.4
@@ -323,7 +330,7 @@ BuildRequires: libusbx-devel >= 1.0.21-0.1.git448584a
# We don't use libvpx anymore because Chromium loves to
# use bleeding edge revisions here that break other things
# ... so we just use the bundled libvpx.
-# Same is true for libwebp.
+BuildRequires: libwebp-devel
BuildRequires: libxslt-devel
# Same here, it seems.
# BuildRequires: libyuv-devel
@@ -351,6 +358,7 @@ BuildRequires: re2-devel >= 20160401
%endif
BuildRequires: speech-dispatcher-devel
BuildRequires: yasm
+BuildRequires: zlib-devel
BuildRequires: pkgconfig(gnome-keyring-1)
# remote desktop needs this
BuildRequires: pam-devel
@@ -426,15 +434,15 @@ Provides: bundled(libaddressinput) = 0
Provides: bundled(libdrm) = 2.4.70
Provides: bundled(libevent) = 1.4.15
Provides: bundled(libjingle) = 9564
-Provides: bundled(libjpeg-turbo) = 1.4.90
+# Provides: bundled(libjpeg-turbo) = 1.4.90
Provides: bundled(libphonenumber) = a4da30df63a097d67e3c429ead6790ad91d36cf4
-Provides: bundled(libpng) = 1.6.22
+# Provides: bundled(libpng) = 1.6.22
Provides: bundled(libsrtp) = 2cbd85085037dc7bf2eda48d4cf62e2829056e2d
%if %{bundlelibusbx}
Provides: bundled(libusbx) = 1.0.17
%endif
Provides: bundled(libvpx) = 1.6.0
-Provides: bundled(libwebp) = 0.6.0
+# Provides: bundled(libwebp) = 0.6.0
%if %{bundlelibxml}
# Well, it's actually newer than 2.9.4 and has code in it that has been reverted upstream... but eh.
Provides: bundled(libxml) = 2.9.4
@@ -470,8 +478,7 @@ Provides: bundled(webrtc) = 90usrsctp
Provides: bundled(woff2) = 445f541996fe8376f3976d35692fd2b9a6eedf2d
Provides: bundled(xdg-mime)
Provides: bundled(xdg-user-dirs)
-Provides: bundled(x86inc) = 0
-Provides: bundled(zlib) = 1.2.11
+# Provides: bundled(zlib) = 1.2.11
# For selinux scriptlet
Requires(post): /usr/sbin/semanage
@@ -480,9 +487,16 @@ Requires(post): /usr/sbin/restorecon
%description
Chromium is an open-source web browser, powered by WebKit (Blink).
+%package common
+Summary: Files needed for both the headless_shell and full Chromium
+
+%description common
+%{summary}.
+
%if 0%{?shared}
%package libs
Summary: Shared libraries used by chromium (and chrome-remote-desktop)
+Requires: chromium-common%{_isa} = %{version}-%{release}
Requires: chromium-libs-media%{_isa} >= %{majorversion}
Requires(post): %{_sbindir}/update-alternatives
Requires(preun): %{_sbindir}/update-alternatives
@@ -491,14 +505,14 @@ Requires(preun): %{_sbindir}/update-alternatives
Shared libraries used by chromium (and chrome-remote-desktop).
%if %{freeworld}
-%package libs-media-freeworld
+%package -n chromium-libs-media-freeworld
Summary: Chromium media libraries built with all possible codecs
Provides: chromium-libs-media = %{version}-%{release}
Provides: chromium-libs-media%{_isa} = %{version}-%{release}
Requires(post): %{_sbindir}/update-alternatives
Requires(preun): %{_sbindir}/update-alternatives
-%description libs-media-freeworld
+%description -n chromium-libs-media-freeworld
Chromium media libraries built with all possible codecs. Chromium is an
open-source web browser, powered by WebKit (Blink). This package replaces
the default chromium-libs-media package, which is limited in what it
@@ -521,6 +535,7 @@ Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
Requires: xorg-x11-server-Xvfb
+Requires: python2-psutil
%if 0%{?shared}
Requires: chromium-libs%{_isa} = %{version}-%{release}
%endif
@@ -546,13 +561,22 @@ JavaScript execution, and more. ChromeDriver is a standalone server which
implements WebDriver's wire protocol for Chromium. It is being developed by
members of the Chromium and WebDriver teams.
+%package headless
+Summary: A minimal headless shell built from Chromium
+Requires: chromium-common%{_isa} = %{version}-%{release}
+
+%description headless
+A minimal headless client built from Chromium. headless_shell is built
+without support for alsa, cups, dbus, gconf, gio, kerberos, pulseaudio, or
+udev.
+
%prep
%setup -q -T -c -n %{name}-policies -a 10
%setup -q -T -c -n depot_tools -a 2
%if 0%{tests}
-%setup -q -n chromium-%{version} -b 1 -a 14
+%setup -q -n chromium-%{version} -b 1
%else
-%setup -q -n chromium-%{version} -a 14
+%setup -q -n chromium-%{version}
%endif
### Chromium Fedora Patches ###
@@ -577,12 +601,20 @@ members of the Chromium and WebDriver teams.
%patch27 -p1 -b .setopaque
%patch31 -p1 -b .permissive
%patch33 -p1 -b .gcc7
+%if %{freeworld}
+# Do not apply mp3 change
+%else
%patch34 -p1 -b .mp3
+%endif
%patch36 -p1 -b .revert
%patch37 -p1 -b .ffmpeg-stdatomic
-%patch38 -p1 -b .headerhack
%patch39 -p1 -b .system-clang
%patch40 -p1 -b .ucontextfix
+%patch41 -p1 -b .fixgnbootstrap
+%patch42 -p1 -b .noprefix
+%patch43 -p1 -b .nomangle
+%patch44 -p1 -b .gtk2fix
+%patch45 -p1 -b .nozmangle
### Chromium Tests Patches ###
%patch100 -p1 -b .use_system_opus
@@ -693,20 +725,26 @@ ln -s /usr/bin/clang clang
popd
%endif
-CHROMIUM_BROWSER_GN_DEFINES=""
-CHROMIUM_BROWSER_GN_DEFINES+=' is_debug=false'
+# Core defines are flags that are true for both the browser and headless.
+CHROMIUM_CORE_GN_DEFINES=""
+CHROMIUM_CORE_GN_DEFINES+=' is_debug=false'
%ifarch x86_64
-CHROMIUM_BROWSER_GN_DEFINES+=' system_libdir="lib64"'
-%endif
-CHROMIUM_BROWSER_GN_DEFINES+=' google_api_key="%{api_key}" google_default_client_id="%{default_client_id}" google_default_client_secret="%{default_client_secret}"'
-CHROMIUM_BROWSER_GN_DEFINES+=' is_clang=false use_sysroot=false use_gio=true use_pulseaudio=true icu_use_data_file=true'
-%if 0%{?nonacl}
-CHROMIUM_BROWSER_GN_DEFINES+=' enable_nacl=false'
+CHROMIUM_CORE_GN_DEFINES+=' system_libdir="lib64"'
%endif
+CHROMIUM_CORE_GN_DEFINES+=' google_api_key="%{api_key}" google_default_client_id="%{default_client_id}" google_default_client_secret="%{default_client_secret}"'
+CHROMIUM_CORE_GN_DEFINES+=' is_clang=false use_sysroot=false use_gold=false fieldtrial_testing_like_official_build=true'
%if %{freeworld}
-CHROMIUM_BROWSER_GN_DEFINES+=' ffmpeg_branding="ChromeOS" proprietary_codecs=true'
+CHROMIUM_CORE_GN_DEFINES+=' ffmpeg_branding="ChromeOS" proprietary_codecs=true'
%else
-CHROMIUM_BROWSER_GN_DEFINES+=' ffmpeg_branding="Chromium" proprietary_codecs=false'
+CHROMIUM_CORE_GN_DEFINES+=' ffmpeg_branding="Chromium" proprietary_codecs=false'
+%endif
+CHROMIUM_CORE_GN_DEFINES+=' treat_warnings_as_errors=false'
+export CHROMIUM_CORE_GN_DEFINES
+
+CHROMIUM_BROWSER_GN_DEFINES=""
+CHROMIUM_BROWSER_GN_DEFINES+=' use_gio=true use_pulseaudio=true icu_use_data_file=true'
+%if 0%{?nonacl}
+CHROMIUM_BROWSER_GN_DEFINES+=' enable_nacl=false'
%endif
%if 0%{?shared}
CHROMIUM_BROWSER_GN_DEFINES+=' is_component_ffmpeg=true is_component_build=true'
@@ -716,16 +754,21 @@ CHROMIUM_BROWSER_GN_DEFINES+=' is_component_ffmpeg=false is_component_build=fals
CHROMIUM_BROWSER_GN_DEFINES+=' remove_webcore_debug_symbols=true enable_hangout_services_extension=true'
CHROMIUM_BROWSER_GN_DEFINES+=' enable_hotwording=false use_aura=true'
CHROMIUM_BROWSER_GN_DEFINES+=' enable_webrtc=true enable_widevine=true'
-CHROMIUM_BROWSER_GN_DEFINES+=' use_gold=false fieldtrial_testing_like_official_build=true'
%if 0%{gtk3}
CHROMIUM_BROWSER_GN_DEFINES+=' use_gtk3=true'
%else
CHROMIUM_BROWSER_GN_DEFINES+=' use_gtk3=false'
%endif
-# CHROMIUM_BROWSER_GN_DEFINES+=' use_system_libjpeg=true'
-CHROMIUM_BROWSER_GN_DEFINES+=' treat_warnings_as_errors=false'
export CHROMIUM_BROWSER_GN_DEFINES
+CHROMIUM_HEADLESS_GN_DEFINES=""
+CHROMIUM_HEADLESS_GN_DEFINES+=' use_ozone=true ozone_auto_platforms=false ozone_platform="headless" ozone_platform_headless=true'
+CHROMIUM_HEADLESS_GN_DEFINES+=' headless_use_embedded_resources=true icu_use_data_file=false v8_use_external_startup_data=false'
+CHROMIUM_HEADLESS_GN_DEFINES+=' enable_nacl=false enable_print_preview=false enable_remoting=false use_alsa=false use_ash=false'
+CHROMIUM_HEADLESS_GN_DEFINES+=' use_cups=false use_dbus=false use_gconf=false use_gio=false use_kerberos=false use_libpci=false'
+CHROMIUM_HEADLESS_GN_DEFINES+=' use_pulseaudio=false use_udev=false'
+export CHROMIUM_HEADLESS_GN_DEFINES
+
mkdir -p third_party/node/linux/node-linux-x64/bin
ln -s %{_bindir}/node third_party/node/linux/node-linux-x64/bin/node
@@ -739,6 +782,8 @@ build/linux/unbundle/remove_bundled_libraries.py \
'third_party/ffmpeg' \
'third_party/adobe' \
'third_party/flac' \
+ 'third_party/googletest' \
+ 'third_party/glslang-angle' \
'third_party/harfbuzz-ng' \
'third_party/icu' \
'base/third_party/libevent' \
@@ -761,7 +806,6 @@ build/linux/unbundle/remove_bundled_libraries.py \
'third_party/swiftshader/third_party/subzero' \
'third_party/swiftshader/third_party/LLVM' \
'third_party/swiftshader/third_party/llvm-subzero' \
- 'third_party/swiftshader/third_party/pnacl-subzero' \
'third_party/usb_ids' \
'third_party/xdg-utils' \
'third_party/yasm' \
@@ -800,6 +844,7 @@ build/linux/unbundle/remove_bundled_libraries.py \
'third_party/catapult/tracing/third_party/gl-matrix' \
'third_party/catapult/tracing/third_party/jszip' \
'third_party/catapult/tracing/third_party/mannwhitneyu' \
+ 'third_party/catapult/tracing/third_party/oboe' \
'third_party/catapult/third_party/polymer' \
'third_party/catapult/third_party/py_vulcanize' \
'third_party/catapult/third_party/py_vulcanize/third_party/rcssmin' \
@@ -870,16 +915,19 @@ build/linux/unbundle/remove_bundled_libraries.py \
'third_party/sfntly' \
'third_party/sinonjs' \
'third_party/skia' \
+ 'third_party/skia/third_party/vulkan' \
'third_party/smhasher' \
+ 'third_party/spirv-headers' \
+ 'third_party/spirv-tools-angle' \
'third_party/sqlite' \
'third_party/tcmalloc' \
'third_party/usrsctp' \
+ 'third_party/vulkan-validation-layers' \
'third_party/web-animations-js' \
'third_party/webdriver' \
'third_party/webrtc' \
'third_party/widevine' \
'third_party/woff2' \
- 'third_party/x86inc' \
'third_party/zlib/google' \
'url/third_party/mozilla' \
'v8/third_party/inspector_protocol' \
@@ -898,6 +946,7 @@ export PATH=$PATH:%{_builddir}/depot_tools
build/linux/unbundle/replace_gn_files.py --system-libraries \
flac \
+ freetype \
%if 0%{?bundleharfbuzz}
%else
harfbuzz-ng \
@@ -906,13 +955,14 @@ build/linux/unbundle/replace_gn_files.py --system-libraries \
%else
icu \
%endif
-%if 0
- libevent \
-%endif
+ libdrm \
+ libjpeg \
+ libpng \
%if %{bundlelibusbx}
%else
libusb \
%endif
+ libwebp \
%if %{bundlelibxml}
%else
libxml \
@@ -926,16 +976,25 @@ build/linux/unbundle/replace_gn_files.py --system-libraries \
%else
re2 \
%endif
- yasm
+ yasm \
+ zlib
-tools/gn/bootstrap/bootstrap.py -v --gn-gen-args "$CHROMIUM_BROWSER_GN_DEFINES"
-%{target}/gn gen --args="$CHROMIUM_BROWSER_GN_DEFINES" %{target}
+tools/gn/bootstrap/bootstrap.py -v --gn-gen-args "$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES"
+%{target}/gn gen --args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES" %{target}
+
+%if %{freeworld}
+# do not need to do headless gen
+%else
+%{target}/gn gen --args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_HEADLESS_GN_DEFINES" %{headlesstarget}
+%endif
%if %{bundlelibusbx}
# no hackity hack hack
%else
# hackity hack hack
rm -rf third_party/libusb/src/libusb/libusb.h
+# we _shouldn't need to do this, but it looks like we do.
+cp -a %{_includedir}/libusb-1.0/libusb.h third_party/libusb/src/libusb/libusb.h
%endif
# make up a version for widevine
@@ -1019,12 +1078,13 @@ export CHROMIUM_BROWSER_UNIT_TESTS="\
export CHROMIUM_BROWSER_UNIT_TESTS=
%endif
-
-%global target out/Release
-
+# Now do the full browser
%if 0%{freeworld}
../depot_tools/ninja -C %{target} -vvv media $CHROMIUM_BROWSER_UNIT_TESTS
%else
+# Do headless first.
+../depot_tools/ninja -C %{headlesstarget} -vvv headless_shell
+
../depot_tools/ninja -C %{target} -vvv chrome chrome_sandbox chromedriver widevinecdmadapter clearkeycdm policy_templates $CHROMIUM_BROWSER_UNIT_TESTS
# remote client
@@ -1055,6 +1115,10 @@ mkdir -p %{buildroot}%{chromium_path}
pushd %{target}
cp -a libffmpeg.so* %{buildroot}%{chromium_path}
cp -a libmedia.so* %{buildroot}%{chromium_path}
+mv %{buildroot}%{chromium_path}/libffmpeg.so{,.%{lsuffix}}
+mv %{buildroot}%{chromium_path}/libffmpeg.so.TOC{,.%{lsuffix}}
+mv %{buildroot}%{chromium_path}/libmedia.so{,.%{lsuffix}}
+mv %{buildroot}%{chromium_path}/libmedia.so.TOC{,.%{lsuffix}}
popd
%else
mkdir -p %{buildroot}%{_bindir}
@@ -1154,6 +1218,10 @@ cp -a remoting_client_plugin_newlib.* %{buildroot}%{chromium_path}
%endif
popd
+pushd %{headlesstarget}
+cp -a headless_lib.pak headless_shell %{buildroot}%{chromium_path}
+popd
+
cp -a remoting/host/linux/linux_me2me_host.py %{buildroot}%{crd_path}/chrome-remote-desktop
cp -a remoting/host/installer/linux/is-remoting-session %{buildroot}%{crd_path}/
@@ -1547,10 +1615,10 @@ if [ $1 = 0 ]; then
fi
%if %{freeworld}
-%posttrans libs-media-freeworld
+%posttrans -n chromium-libs-media-freeworld
%{_sbindir}/update-alternatives --install \
%{_libdir}/chromium-browser/libffmpeg.so libffmpeg.so \
- %{_libdir}/chromium-browser/libffmpeg.so.freeworld 5 \
+ %{_libdir}/chromium-browser/libffmpeg.so.freeworld 20 \
--slave %{_libdir}/chromium-browser/libffmpeg.so.TOC libffmpeg.so.TOC \
%{_libdir}/chromium-browser/libffmpeg.so.TOC.freeworld \
--slave %{_libdir}/chromium-browser/libmedia.so libmedia.so \
@@ -1558,7 +1626,7 @@ fi
--slave %{_libdir}/chromium-browser/libmedia.so.TOC libmedia.so.TOC \
%{_libdir}/chromium-browser/libmedia.so.TOC.freeworld
-%preun libs-media-freeworld
+%preun -n chromium-libs-media-freeworld
if [ $1 = 0 ]; then
%{_sbindir}/alternatives --remove libffmpeg.so \
%{_libdir}/chromium-browser/libffmpeg.so.freeworld
@@ -1600,6 +1668,7 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%files
%doc AUTHORS
+%doc chrome_policy_list.html *.json
%license LICENSE
%config %{_sysconfdir}/%{name}/
%dir %{_sysconfdir}/%{name}/native-messaging-hosts
@@ -1608,7 +1677,10 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%{_bindir}/%{chromium_browser_channel}
%dir %{chromium_path}
%{chromium_path}/*.bin
-%{chromium_path}/*.pak
+%{chromium_path}/chrome_*.pak
+%{chromium_path}/keyboard_resources.pak
+%{chromium_path}/resources.pak
+%{chromium_path}/views_mus_resources.pak
%{chromium_path}/icudtl.dat
%{chromium_path}/%{chromium_browser_channel}
%{chromium_path}/%{chromium_browser_channel}.sh
@@ -1623,8 +1695,19 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
# %%{chromium_path}/remoting_locales/
# %%{chromium_path}/pseudo_locales/
# %%{chromium_path}/plugins/
-%{chromium_path}/pyproto/
%attr(4755, root, root) %{chromium_path}/chrome-sandbox
+%{_mandir}/man1/%{chromium_browser_channel}.*
+%{_datadir}/icons/hicolor/*/apps/%{chromium_browser_channel}.png
+%{_datadir}/applications/*.desktop
+%{_datadir}/appdata/*.appdata.xml
+%{_datadir}/gnome-control-center/default-apps/chromium-browser.xml
+
+%files common
+%{chromium_path}/headless_lib.pak
+%{chromium_path}/libosmesa.so
+%{chromium_path}/mus_app_resources_*.pak
+%{chromium_path}/pyproto/
+%{chromium_path}/resources/
%dir %{chromium_path}/locales/
%lang(am) %{chromium_path}/locales/am.pak
%lang(ar) %{chromium_path}/locales/ar.pak
@@ -1679,18 +1762,13 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%lang(vi) %{chromium_path}/locales/vi.pak
%lang(zh_CN) %{chromium_path}/locales/zh-CN.pak
%lang(zh_TW) %{chromium_path}/locales/zh-TW.pak
-# %%{chromium_path}/locales/fake-bidi.pak
-%{chromium_path}/resources/
-%{_mandir}/man1/%{chromium_browser_channel}.*
-%{_datadir}/icons/hicolor/*/apps/%{chromium_browser_channel}.png
-%{_datadir}/applications/*.desktop
-%{_datadir}/appdata/*.appdata.xml
-%{_datadir}/gnome-control-center/default-apps/chromium-browser.xml
-%doc chrome_policy_list.html *.json
+%files headless
+%{chromium_path}/headless_shell
%if 0%{?shared}
%files libs
+%exclude %{chromium_path}/libosmesa.so
%exclude %{chromium_path}/libffmpeg.so*
%exclude %{chromium_path}/libmedia.so*
%exclude %{chromium_path}/libwidevinecdm.so
@@ -1729,7 +1807,7 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%if 0%{?shared}
%if %{freeworld}
-%files libs-media-freeworld
+%files -n chromium-libs-media-freeworld
%else
%files libs-media
%endif
@@ -1741,6 +1819,16 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%changelog
+* Fri Aug 4 2017 Tom Callaway <spot(a)fedoraproject.org> 60.0.3112.90-1
+- update to 60.0.3112.90
+
+* Mon Jul 31 2017 Tom Callaway <spot(a)fedoraproject.org> 60.0.3112.78-1
+- update to 60.0.3112.78
+
+* Fri Jul 21 2017 Tom Callaway <spot(a)fedoraproject.org> 59.0.3071.115-4
+- put common files in -common subpackage
+- build headless_shell for -headless subpackage
+
* Fri Jul 21 2017 Tom Callaway <spot(a)fedoraproject.org> 59.0.3071.115-3
- use posttrans to ensure that old libs are gone before trying to make alternative symlinks
diff --git a/sources b/sources
index db65c06..24b41df 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,3 @@
SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03
-SHA512 (policy_templates.zip) = a997bd5d410cf8f0f104fb5b69b60699c9e60eb3f99b42e0aff167843f3a45923a9a99c881cac9cd4472a60ca9c7d1ba897e15d485fbfd66c996419e7fadd3f8
-SHA512 (chromium-59.0.3071.115-clean.tar.xz) = 001e6d9b4cae244767de7e85575d4071421d588422ca434461939e9652549bcd43c56fe0c510ab0d7d0a050e97d98f4086b8bf102dbadd7f83dc8827b9ea7ed1
-SHA512 (chromium-59.0.3071.109-freetype.tar.bz2) = 62a698c0229c0eb5ed4d31efd211db70f1183f4f86558bd68a6110214b2f0a61eecdde27efcab359ecee684b3df819b37a75505c1b9ea6bec407d289d6e78a66
+SHA512 (chromium-60.0.3112.90-clean.tar.xz) = 3b1579037b3debc0f714e5de3e02bd5fc1c8aa7482479ffc20b824653b11191ed558cef147633b30da16ffd8c26d5eacb95b93610041a44a6ea84606702f7ac1
+SHA512 (policy_templates.zip) = 4d2a7162adb3ca224f3e1bf1d2936ae395603e8ffa3fda7753e666a16c42c7ba54c7acfcfdc742e22978ace37e471ed099d222063708d4d8a299da3daf135f15
7 years, 3 months
[chromium-libs-media-freeworld: 1/8] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
by Miro Hrončok
commit 5a7429033fe66743abaa1a707b3b27082efd22cc
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jul 26 04:48:28 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
chromium.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
---
diff --git a/chromium.spec b/chromium.spec
index e5043e4..55bd1f7 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -115,7 +115,7 @@ BuildRequires: libicu-devel >= 5.4
Name: chromium%{chromium_channel}
Version: %{majorversion}.0.3071.115
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: A WebKit (Blink) powered web browser
Url: http://www.chromium.org/Home
License: BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2)
@@ -1741,6 +1741,9 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%changelog
+* Wed Jul 26 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 59.0.3071.115-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
* Fri Jul 21 2017 Tom Callaway <spot(a)fedoraproject.org> 59.0.3071.115-3
- use posttrans to ensure that old libs are gone before trying to make alternative symlinks
7 years, 3 months
[qmmp-plugins-freeworld] version bump to 1.1.10
by Karel Volný
commit 533743b734834af56dee028624b33c0eb6b04ac8
Author: Karel Volny <kvolny(a)redhat.com>
Date: Tue Aug 8 11:24:34 2017 +0200
version bump to 1.1.10
.gitignore | 1 +
qmmp-plugins-freeworld.spec | 5 ++++-
sources | 2 +-
3 files changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index cb1d8fe..d0ea0c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ qmmp-0.9.6.tar.bz2
/qmmp-1.1.7.tar.bz2
/qmmp-1.1.8.tar.bz2
/qmmp-1.1.9.tar.bz2
+/qmmp-1.1.10.tar.bz2
diff --git a/qmmp-plugins-freeworld.spec b/qmmp-plugins-freeworld.spec
index cafddd7..c2b0268 100644
--- a/qmmp-plugins-freeworld.spec
+++ b/qmmp-plugins-freeworld.spec
@@ -1,5 +1,5 @@
Name: qmmp-plugins-freeworld
-Version: 1.1.9
+Version: 1.1.10
Release: 1%{?dist}
Summary: Plugins for qmmp (Qt-based multimedia player)
@@ -173,6 +173,9 @@ fi
%changelog
+* Tue Aug 08 2017 Karel Volný <kvolny(a)redhat.com> 1.1.10-1
+- version bump to 1.1.10
+
* Fri Jun 09 2017 Karel Volný <kvolny(a)redhat.com> 1.1.9-1
- version bump to 1.1.9
- add weak backwards dependency on qmmp (see also rhbz#1450271)
diff --git a/sources b/sources
index cb9df70..c6e46ab 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7f41f0deb2b48b1e37fd96039ea977e8 qmmp-1.1.9.tar.bz2
+a7fafb406230b96d1a1684c974a22236 qmmp-1.1.10.tar.bz2
7 years, 3 months
[vidcutter] Add %define debug_package %{nil} for f27 build
by Martin Gansser
commit cb6a02817337a154ffc2a6aba91780dde4b3ebb6
Author: Martin Gansser <martinkg(a)fedoraproject.org>
Date: Tue Aug 8 10:38:42 2017 +0200
Add %define debug_package %{nil} for f27 build
vidcutter.spec | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
---
diff --git a/vidcutter.spec b/vidcutter.spec
index 4c3352a..05a9a70 100644
--- a/vidcutter.spec
+++ b/vidcutter.spec
@@ -1,6 +1,8 @@
+%define debug_package %{nil}
+
Name: vidcutter
Version: 4.0.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: The simplest + fastest video cutter & joiner
License: GPLv3+
Url: http://vidcutter.ozmartians.com
@@ -70,6 +72,9 @@ fi
%{_datadir}/pixmaps/%{name}.svg
%changelog
+* Tue Aug 08 2017 Martin Gansser <martinkg(a)fedoraproject.org> - 4.0.0-3
+- Add %%define debug_package %%{nil} for f27 build
+
* Mon Aug 07 2017 Martin Gansser <martinkg(a)fedoraproject.org> - 4.0.0-2
- Add BR desktop-file-utils
- Add RR hicolor-icon-theme
7 years, 3 months
[vidcutter] Add BR desktop-file-utils Add RR hicolor-icon-theme Remove mime scriptlets as they are obsolete in f
by Martin Gansser
commit 1746b7716b93501ee636bdb1f7245c0ee1efc94e
Author: Martin Gansser <martinkg(a)fedoraproject.org>
Date: Tue Aug 8 09:30:54 2017 +0200
Add BR desktop-file-utils
Add RR hicolor-icon-theme
Remove mime scriptlets as they are obsolete in f25 and greater
.gitignore | 1 +
sources | 1 +
vidcutter.spec | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 81 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..125b774 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/vidcutter-4.0.0.tar.gz
diff --git a/sources b/sources
index e69de29..97248a3 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+d095757fc24cec83e0a965cc02de41ed vidcutter-4.0.0.tar.gz
diff --git a/vidcutter.spec b/vidcutter.spec
new file mode 100644
index 0000000..4c3352a
--- /dev/null
+++ b/vidcutter.spec
@@ -0,0 +1,79 @@
+Name: vidcutter
+Version: 4.0.0
+Release: 2%{?dist}
+Summary: The simplest + fastest video cutter & joiner
+License: GPLv3+
+Url: http://vidcutter.ozmartians.com
+Source0: https://github.com/ozmartian/%{name}/archive/%{version}.tar.gz#/%{name}-%...
+
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: mpv-libs-devel
+BuildRequires: desktop-file-utils
+Requires: python3-qt5
+Requires: ffmpeg
+Requires: python3-pyopengl
+Requires: mediainfo
+Requires: hicolor-icon-theme
+
+%description
+The simplest & sexiest tool for cutting and joining your videos without the
+need for re-encoding or a diploma in multimedia. VidCutter focuses on getting
+the job done using tried and true tech in its arsenal via mpv and FFmpeg.
+
+%prep
+%setup -q
+sed -i "s/pypi/rpm/" vidcutter/__init__.py
+
+# E: wrong-script-interpreter
+sed -i -e 's|#!/usr/bin/env python3|#!/usr/bin/python3|g' vidcutter/*.py
+sed -i -e 's|#!/usr/bin/env python3|#!/usr/bin/python3|g' vidcutter/libs/*.py
+
+%build
+%py3_build
+
+%install
+%py3_install
+# E: non-executable-script
+for file in %{buildroot}%{python3_sitearch}/vidcutter/{__init__,__main__,about,settings,updater,videoconsole,videocutter,videoinfo,videolist,videoslider,videostyle,videotoolbar,libs/mpvwidget,libs/notifications,libs/taskbarprogress,libs/videoservice,libs/widgets}.py; do
+ chmod a+x $file
+done
+
+%check
+desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
+
+%post
+touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+/usr/bin/update-desktop-database &> /dev/null || :
+
+%postun
+/sbin/ldconfig
+if [ $1 -eq 0 ] ; then
+ touch --no-create %{_datadir}/icons/hicolor &>/dev/null
+ /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+fi
+/usr/bin/update-desktop-database &> /dev/null || :
+
+%posttrans
+/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+
+%files
+%license LICENSE
+%doc README.md
+%{_bindir}/%{name}
+%{python3_sitearch}/%{name}
+%{python3_sitearch}/vidcutter-%{version}-py?.?.egg-info
+%{_datadir}/applications/%{name}.desktop
+%{_datadir}/icons/hicolor/*/apps/%{name}.png
+%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg
+%{_datadir}/mime/packages/x-vidcutter.xml
+%{_datadir}/pixmaps/%{name}.svg
+
+%changelog
+* Mon Aug 07 2017 Martin Gansser <martinkg(a)fedoraproject.org> - 4.0.0-2
+- Add BR desktop-file-utils
+- Add RR hicolor-icon-theme
+- Remove mime scriptlets as they are obsolete in f25 and greater
+
+* Mon Aug 07 2017 Martin Gansser <martinkg(a)fedoraproject.org> - 4.0.0-1
+- Initial build
7 years, 3 months
[mythtv] Update to lates fixes/0.28, v0.28.1-38-geef6a48.
by Richard Shaw
commit 0faba599d2e492ac4aef0d1d187dd4fc0f5a5978
Author: Richard Shaw <hobbes1069(a)gmail.com>
Date: Mon Aug 7 11:24:44 2017 -0500
Update to lates fixes/0.28, v0.28.1-38-geef6a48.
ChangeLog | 367 +++++++++
mythtv-0.28-fixes.patch | 1146 ++++++++++++++++++++++++++-
mythtv.spec | 22 +-
ticket13049-bswap-guard.diff | 13 -
ticket13049-remove-ffmpeg-bswap-change.diff | 26 -
5 files changed, 1512 insertions(+), 62 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 65a9161..60a1502 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,370 @@
+commit eef6a480b0eca5201eec785b0ce57f9a6f4b7fdd
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Wed Jul 12 15:33:31 2017 -0400
+
+ Fix bugs that occur when using a different video mode for playback.
+
+ Fixes these cases where the code does not cater for the video mode
+ changing between GUI and playback.
+ - Playback using xv-blit and maybe others is shown in the wrong size and position.
+ - Playback using OpenGL is displaced downward.
+ - LiveTV using OpenGL is the wrong size.
+ - Program Guide and other screens selected from within LiveTV when using OpenGL
+ are cut off on the right.
+
+ Fixes #7408
+ Fixes #11363
+ Fixes #13054
+
+ (cherry picked from commit 7388b5a60c54d5e812a535bf5212295e512c5c3f)
+
+commit 457a417f407bd38fa0d989f9ca006a5fb3173695
+Author: Roger Siddons <rsiddons(a)mythtv.org>
+Date: Tue Apr 19 12:32:28 2016 +0100
+
+ Services: Fix exception messages
+
+ Some exceptions are thrown as const char* so they are not being logged.
+ Exceptions should be thrown as QStrings.
+
+ (cherry picked from commit 29e2269424b6b84afeb3d68158ada829429a0610)
+
+commit 1c2863c23f9c188b00b59255c5408c0ca06d44f5
+Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
+Date: Wed Nov 9 17:04:40 2016 +0000
+
+ [PATCH] Support tuning via freqid translation for ExternalRecorder
+
+ Signed-off-by: John Poet <jpoet(a)mythtv.org>
+
+ Fixes #12919
+
+ (cherry picked from commit 87140917197b156a5c06ac6ce36eb47de358a313)
+
+commit 392be659b69243ce70311480db82cd111689fc53
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Wed Jun 28 11:21:47 2017 -0400
+
+ Fixes #13059 - Flickering pause on Raspberry Pi.
+
+ (cherry picked from commit 42d4a3146a0658403579ba9446050b3974090b6d)
+
+commit 8f7475b88902052b1eb27f297370d5f4f22b2aff
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Tue Jun 20 19:25:13 2017 -0400
+
+ Fix Raspberry Pi hardware deinterlace
+
+ Fixes #13030
+
+ (cherry picked from commit 4b8862829d98aff2e5baba92ee98e1dd3b505e6b)
+
+commit ec95cbd7f401ab43d4d7c5a7d5b17a0e5021a260
+Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
+Date: Thu Jun 15 11:36:31 2017 +0100
+
+ Refs #13031 - No GL/gl.h on osx
+
+ (cherry picked from commit ab0dfcba5e3b92b90f993148c9449450c40acbff)
+
+commit 6a683aff7834054238413e83b0cf3f832f91cacb
+Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
+Date: Thu Jun 15 11:03:40 2017 +0100
+
+ Refs #13031 - Reorganise the OpenGL includes a bit to fix build issues on arch on rpi
+
+ (cherry picked from commit 05ad15bab9c11b7f102efc42a435406d7d0157c9)
+
+commit 98550bedeeea666cc412fe3ee9ac3ffa12803ce5
+Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
+Date: Wed Jun 7 09:15:00 2017 +0100
+
+ Refs #13047 - fix check for OSX platforms
+
+ (cherry picked from commit 37c41f1b411070471060b2f2d695e3a1ee8bebe3)
+
+commit 219fbe688eab463cdf1f948270459f47bf9f0885
+Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
+Date: Tue Jun 6 22:55:50 2017 +0100
+
+ Refs #13047 - Windows also has major() and minor() in <sys/types.h>
+
+ (cherry picked from commit 0a8e8423e8cc4d7ced1db96ba58caeb85c5af6e0)
+
+commit b012ff0f6b284969183863d42a6a14eb77ed0a1d
+Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
+Date: Tue Jun 6 22:39:03 2017 +0100
+
+ Refs #13047 - major() and minor() are defined in <sys/sysmacros.h>
+
+ On BSD platforms they remain defined in <sys/types.h>
+
+ (cherry picked from commit eca27c542b70deb58e50ad4581b2d6f6b2e1d3c2)
+
+commit 63ada4ffb865f9cc2d723113dbc5263748e8410f
+Author: John Poet <jpoet(a)mythtv.org>
+Date: Tue Jun 6 12:25:15 2017 -0600
+
+ ProgramInfo::ToMap: Add a copy of 'description' called 'description0'.
+
+ This allows themes to set different characteristics for the description
+ depend on other elements.
+
+ (cherry picked from commit fe0928403e5b544894d22ab614ed69e4430f518d)
+
+commit b3480d043721848bda06d841eca09a6a2149c7e1
+Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
+Date: Mon Jun 5 09:45:34 2017 +0100
+
+ Remove a custom FFmpeg patch for bswap_dbl
+
+ We have been carrying a custom patch for FFmpeg which
+ adds bswap_dbl to the ffmpeg codebase, yet it's not
+ used within ffmpeg, and we also have the same definition
+ in libs/libmythbase/bswap.h:29
+
+ This was causing duplicate function definition errors
+ building on some platforms.
+
+ Rather than carrying an unneeded ffmpeg customization
+ around lets just remove that customization.
+
+ Fixes #13049
+ Refs #12634 <- no longer requires `avoid_bswap_conflict.patch`
+
+ (cherry picked from commit 517216c725bedcff47db908e161abae1dd18e7a3)
+
+commit 2d42863a62dc721e5ddea61a3aedfc414ca4c0ff
+Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
+Date: Fri Jun 2 10:49:33 2017 +0100
+
+ Fixes #13050 - Properly enable symbol visibility for GCC7
+
+ Signed-off-by: Stuart Auchterlonie <stuarta(a)mythtv.org>
+ (cherry picked from commit 1866a820f69162d1ffda724e0173478eeac0f78b)
+
+commit e3b8adeb88e42719ce2acae9eb3a2981a27eba68
+Author: Jonatan Lindblad <jlindblad(a)mythtv.org>
+Date: Thu Jun 1 17:59:39 2017 +0200
+
+ TV: Fix ESCAPE being ignored
+
+ The cause was that lcdVolumeTimerId was never set to 0 after killing it.
+ Since timer IDs are reused by Qt the timer started when ESCAPE was
+ pressed to exit playback could be treated as lcdVolumeTimerId and ending
+ up never being processed. This only happened if the LCD support was
+ enabled and the volume was changed.
+
+ Fixes #12566
+
+ (cherry picked from commit bdbc6363a311f08cdb61eab81d62243b56b7bd12)
+
+commit 4664d5ca42a21548f390cd26bd14500559f0da9e
+Author: Bill Meek <bmeek(a)mythtv.org>
+Date: Thu Jun 1 08:17:04 2017 -0500
+
+ Services API: Dvr/GetTitleInfoList was returning Deleted recordings.
+
+ (cherry picked from commit 08a03c582cbac3927805213fa3a1786ccd05f525)
+
+commit af9826265820668395c64f04179a90dcdf331adb
+Author: Roger Siddons <rsiddons(a)mythtv.org>
+Date: Wed May 10 01:18:44 2017 +0100
+
+ Prevent cutlist editor crash when extending marks
+
+ Code was modifying the container without adjusting the iterator.
+ Fixes #13039
+
+ (cherry picked from commit 9d2f7b67ef004c20c24048922a1f9367c6127399)
+
+commit 2d247dc4600cc11166f056f48058f74252a27419
+Author: Roger Siddons <rsiddons(a)mythtv.org>
+Date: Thu Apr 20 09:26:51 2017 +0100
+
+ Python: Fix bookmarkupdate error
+
+ Python scripts updating a recording with no bookmark elicit:
+ Failed due to: "MySQL error 1292: Incorrect datetime value: '0' for column 'bookmarkupdate' at row 1"
+
+ The bindings use a default of 0, which is rejected by newer MySQL versions
+
+ (cherry picked from commit 37ef0fa91e7fdffb0edccec288b00471c60f2148)
+
+commit e26a33c69af48399b8c52b1d76872d64a944d137
+Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
+Date: Tue Apr 18 11:10:45 2017 -0400
+
+ Fix parsing of season from xmltv
+
+ Fixes #12786
+
+ Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
+ (cherry picked from commit 585f509dea5a8e9c7d7e213d4440ebde958e8138)
+
+commit 14f82aa54c2825b58b08499a2f448dd6a155fb05
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Tue Apr 18 10:45:01 2017 -0400
+
+ Fix for LCD device code hanging
+
+ When playing recordings if the audio changes (e.g. number of
+ channels change), it sends a message to the lcd server
+ from the wrong thread.
+ After this no LCD messages get through, but queue indefinitely.
+ The fix uses a slot to ensure messages are send from the
+ correct thread.
+
+ Refs #12566
+ Fixes #12567
+
+ (cherry picked from commit 3cd374dd16d2257485468e0415892d417eb7520a)
+
+commit 0037461751becd40aedd2d3dd8bd2ad5e0836c9f
+Author: Karl Dietz <dekarl(a)mythtv.org>
+Date: Wed Mar 22 22:37:13 2017 +0100
+
+ Set MySQL session mode in Perl bindings
+
+ this allows optimize_mythdb.pl to work against newer (5.7+)
+ versions of MySQL.
+
+ Patch by Michael Dean
+
+ Refs #12871
+
+ (cherry picked from commit 83c67a0c7b5eec295e9cad757ff6edc1438078ff)
+
+commit 70266230d3d3afcf9c356cf503fce210fe67ab07
+Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
+Date: Mon Feb 13 16:19:57 2017 -0700
+
+ Use XMLTV dd_progid data to create seriesid
+
+ The current seriesid processing for XMLTV grabbers using a hash for the
+ title is non-optimal in the (Schedules Direct) case where the seriesid can
+ be more accurately represented (via a supplied dd_progid). The internal
+ datadirect grabber creates such a seriesid from its feeds.
+
+ From some research and discussions with Schedules Direct regarding the
+ gracenote upstream (raw) data, there is a true seriesid available, but
+ passing that through to MythTV, and then adjusting existing data has some
+ challenges (some upstream). And while there are some potential approaches,
+ rather than wait for the perfect, we can do something now which is
+ equivalent to the internal dd grabber.
+
+ This patch creates a better seriesid from a XMLTV source which provides a
+ dd_progid with a seriesid which is compatible with the (internal)
+ DataDirect? grabber (further moving forward to allowing the eventual removal
+ of the internal DD grabber).
+
+ The following patch (based on some initial work by Mr. Poet) creates an
+ appropriate seriesid.
+
+ Note:
+
+ The uniqueid value was added to the code in commit
+ 347ea0319330cb06cf3e418e12e79602c3235bc0 (over a decade ago) however it was
+ never set, and always empty, resulting in some dead code. It appears that
+ the uniqueid may have been intended to serve the same/equivalent purposes of
+ programid (at some point). This patch removes the (dead) uniqueid along the
+ way as part of the larger set of fixes.
+
+ As this patch changes the seriesid for new grabbed programs, those that are
+ using the "this series" matching based on the previous seriesid may run into
+ some issues. Likely the easiest solution to recommend is to recreate those
+ rules.
+
+ Signed-off-by: John Poet <jpoet(a)mythtv.org>
+ (cherry picked from commit 4e5cf2b4ef875ee578b121be9867ba05da5fab17)
+
+commit 845f6d47b4d904589050a12b67245161339a41e6
+Author: John Poet <jpoet(a)mythtv.org>
+Date: Fri Feb 10 14:54:54 2017 -0700
+
+ Another attempt at preventing mythfilldatabase from inserting duplicate
+ channels.
+
+ In ChannelData::channelList use ChannelUtil::LoadChannels instead of
+ ChannelUtil::GetChannels, as the former seems to be more reliable.
+
+ (cherry picked from commit b25f8c630bbd73602c4bf646c9aa760cb0fb60fc)
+
+commit 3dd03e36ed6df640665e1c8b93944442d9f91406
+Author: John Poet <jpoet(a)mythtv.org>
+Date: Sun Jun 12 01:17:40 2016 -0600
+
+ mythfilldatabase: Also try matching ATSC major.minor when update xmltvid.
+
+ (cherry picked from commit 5933e03efdb136a5bd35f60bdcf24f8a1a32749b)
+
+commit 044b22b95734ee607806ff8cea04e84c5112438d
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Wed Mar 15 10:32:01 2017 +0000
+
+ MythArchive: guard against an empty deleteMap in the thumb image finder
+
+ (cherry picked from commit abb225031b2ece763f773bdf060cfde1ec7abe81)
+
+commit 0bd473036fdb132c6f094eff360de3e444256aeb
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Wed Mar 15 10:29:54 2017 +0000
+
+ MythArchive: update the initial seek amount text on the thumb image finder
+
+ (cherry picked from commit 9572352cc6e267254ede2feea567c088e5d5b7ad)
+
+commit 2622ddd0c7f8e9cd037bbb8da0225975c305fda8
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Wed Mar 15 09:22:03 2017 +0000
+
+ IPTV Tuner: fix recording/playing simultaneous RTSP streams
+
+ Thanks to strenker on the forum for tracking this down.
+
+ (cherry picked from commit b5659411dd7e964c86077f49f6bde29736df680d)
+
+commit 8f13742e18f76ede87e46f1ce12bd00aa40d621b
+Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
+Date: Tue Mar 7 10:02:21 2017 -0500
+
+ Validate the programme starttime/channel early
+
+ If a programme does not have a starttime the (later) attempted
+ insertion of the program into the database will result in a
+ database constraint error. If the program does not have a
+ channel there will be a match error later. Verify both early
+ (perhaps with better log messages).
+
+ Fixes #13011
+
+ Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
+ (cherry picked from commit ab4513fbb6f50f1402835b5599f6ff79b4b0fd48)
+
+commit 12232f081c672165f67819de8cd9f437c991a082
+Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
+Date: Tue Mar 7 10:00:21 2017 -0500
+
+ Improve fromXMLTVDate processing for mythfilldatabase
+
+ In cases where the system is running in localtime, the
+ current processing will apply timezone validation to
+ the input datetime, which can result in rejection of valid
+ datetimes.
+
+ Fixes #13010
+
+ Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
+ (cherry picked from commit 841073ea8c1f49e858f5bb6c18e3c0ade04eb512)
+
+commit dc2b2782408f25992f34fad71628ece96f5d9f3a
+Author: John Poet <jpoet(a)mythtv.org>
+Date: Tue May 17 18:20:41 2016 -0600
+
+ mythfilldatabase - xmltvparser.cpp: Fix whitespace.
+
+ (cherry picked from commit 55eb77fda5f4578801d579e9823e7eeb8bb8399c)
+
commit 3255b983b039f26c36cae016f4a522183283837c
Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
Date: Fri Mar 3 15:08:14 2017 +0000
diff --git a/mythtv-0.28-fixes.patch b/mythtv-0.28-fixes.patch
index e0be7b2..870d5f2 100644
--- a/mythtv-0.28-fixes.patch
+++ b/mythtv-0.28-fixes.patch
@@ -1,14 +1,215 @@
- mythtv/libs/libmythbase/loggingserver.cpp | 2 +-
- mythtv/libs/libmythtv/eitfixup.cpp | 2 ++
- mythtv/libs/libmythtv/eithelper.cpp | 17 +++++++++--------
- mythtv/libs/libmythtv/mythavutil.cpp | 15 ++++++++++++++-
- mythtv/libs/libmythupnp/mythxmlclient.cpp | 4 +++-
- mythtv/libs/libmythupnp/soapclient.cpp | 4 +++-
- mythtv/libs/libmythupnp/ssdp.cpp | 4 ++++
- mythtv/libs/libmythupnp/upnp.h | 1 +
- mythtv/programs/mythfrontend/proglist.cpp | 4 ++--
- 9 files changed, 39 insertions(+), 14 deletions(-)
+ .../mytharchive/mytharchive/thumbfinder.cpp | 8 +
+ mythtv/bindings/perl/MythTV.pm | 2 +
+ mythtv/bindings/python/MythTV/dataheap.py | 2 +-
+ mythtv/configure | 15 +-
+ mythtv/external/FFmpeg/libavutil/bswap.h | 15 --
+ mythtv/libs/libmyth/programinfo.cpp | 2 +-
+ mythtv/libs/libmythbase/lcddevice.cpp | 10 +-
+ mythtv/libs/libmythbase/lcddevice.h | 5 +-
+ mythtv/libs/libmythbase/loggingserver.cpp | 2 +-
+ mythtv/libs/libmythtv/deletemap.cpp | 3 +-
+ mythtv/libs/libmythtv/eitfixup.cpp | 2 +
+ mythtv/libs/libmythtv/eithelper.cpp | 17 +-
+ mythtv/libs/libmythtv/iptvtuningdata.h | 2 +-
+ mythtv/libs/libmythtv/mythavutil.cpp | 15 +-
+ mythtv/libs/libmythtv/privatedecoder_omx.cpp | 89 +--------
+ mythtv/libs/libmythtv/privatedecoder_omx.h | 4 -
+ .../libs/libmythtv/recorders/ExternalChannel.cpp | 5 +
+ mythtv/libs/libmythtv/recorders/ExternalChannel.h | 1 +
+ mythtv/libs/libmythtv/tv_play.cpp | 31 +++-
+ mythtv/libs/libmythtv/videoout_omx.cpp | 20 +-
+ mythtv/libs/libmythtv/videoout_omx.h | 1 +
+ mythtv/libs/libmythtv/videoout_opengl.cpp | 19 +-
+ mythtv/libs/libmythtv/videooutwindow.cpp | 8 +
+ mythtv/libs/libmythtv/videooutwindow.h | 1 +
+ mythtv/libs/libmythtv/videosource.cpp | 4 +
+ mythtv/libs/libmythui/mythrender_opengl.h | 3 -
+ mythtv/libs/libmythui/mythrender_opengl1.h | 3 +
+ mythtv/libs/libmythupnp/mythxmlclient.cpp | 4 +-
+ mythtv/libs/libmythupnp/soapclient.cpp | 4 +-
+ mythtv/libs/libmythupnp/ssdp.cpp | 4 +
+ mythtv/libs/libmythupnp/upnp.h | 1 +
+ mythtv/programs/mythbackend/services/content.cpp | 4 +-
+ mythtv/programs/mythbackend/services/dvr.cpp | 2 +-
+ mythtv/programs/mythbackend/services/guide.cpp | 18 +-
+ mythtv/programs/mythbackend/services/myth.cpp | 2 +-
+ mythtv/programs/mythfilldatabase/channeldata.cpp | 39 +++-
+ mythtv/programs/mythfilldatabase/channeldata.h | 6 +-
+ mythtv/programs/mythfilldatabase/xmltvparser.cpp | 205 ++++++++++++---------
+ mythtv/programs/mythfrontend/proglist.cpp | 4 +-
+ 39 files changed, 329 insertions(+), 253 deletions(-)
+diff --git a/mythplugins/mytharchive/mytharchive/thumbfinder.cpp b/mythplugins/mytharchive/mytharchive/thumbfinder.cpp
+index d2bcdf5..25b3829 100644
+--- a/mythplugins/mytharchive/mytharchive/thumbfinder.cpp
++++ b/mythplugins/mytharchive/mytharchive/thumbfinder.cpp
+@@ -159,6 +159,8 @@ bool ThumbFinder::Create(void)
+
+ connect(m_frameButton, SIGNAL(Clicked()), this, SLOT(updateThumb()));
+
++ m_seekAmountText->SetText(SeekAmounts[m_currentSeek].name);
++
+ BuildFocusList();
+
+ SetFocusWidget(m_imageGrid);
+@@ -274,6 +276,12 @@ void ThumbFinder::loadCutList()
+ delete progInfo;
+ }
+
++ if (m_deleteMap.isEmpty())
++ {
++ LOG(VB_GENERAL, LOG_ERR, "ThumbFinder::loadCutList: Got an empty delete map");
++ return;
++ }
++
+ // if the first mark is a end mark then add the start mark at the beginning
+ frm_dir_map_t::const_iterator it = m_deleteMap.begin();
+ if (it.value() == MARK_CUT_END)
+diff --git a/mythtv/bindings/perl/MythTV.pm b/mythtv/bindings/perl/MythTV.pm
+index 188fcc0..db196ec 100644
+--- a/mythtv/bindings/perl/MythTV.pm
++++ b/mythtv/bindings/perl/MythTV.pm
+@@ -372,6 +372,8 @@ EOF
+ $self->{'db_user'},
+ $self->{'db_pass'})
+ or die "Cannot connect to database: $!\n\n";
++ $self->{'dbh'}->do("SET SESSION sql_mode = ''")
++ or die "Can't set sql_mode: $!\n\n";
+ $self->{'dbh'}->do("SET time_zone = 'Etc/UTC'")
+ or die "Can't set timezone: $!\n\n";
+
+diff --git a/mythtv/bindings/python/MythTV/dataheap.py b/mythtv/bindings/python/MythTV/dataheap.py
+index 859e060..4de3085 100644
+--- a/mythtv/bindings/python/MythTV/dataheap.py
++++ b/mythtv/bindings/python/MythTV/dataheap.py
+@@ -283,7 +283,7 @@ class Recorded( CMPRecord, DBDataWrite ):
+ 'commflagged':0, 'recgroup':'Default', 'seriesid':'',
+ 'programid':'', 'lastmodified':'CURRENT_TIMESTAMP',
+ 'filesize':0, 'stars':0, 'previouslyshown':0,
+- 'preserve':0, 'bookmarkupdate':0,
++ 'preserve':0, 'bookmarkupdate':None,
+ 'findid':0, 'deletepending':0, 'transcoder':0,
+ 'timestretch':1, 'recpriority':0, 'playgroup':'Default',
+ 'profile':'No', 'duplicate':1, 'transcoded':0,
+diff --git a/mythtv/configure b/mythtv/configure
+index af0d6a6..5019732 100755
+--- a/mythtv/configure
++++ b/mythtv/configure
+@@ -7618,19 +7618,10 @@ esac
+
+ if enabled gxx; then
+ if enabled symbol_visibility; then
+- # Don't check for patch levels in gcc4 series.
+- # See https://bugs.launchpad.net/ubuntu/+source/gcc-4.8/+bug/1360404
+- if expr "$gxx_version" : '4\.[2-9]' >/dev/null || expr "$gxx_version" : '[5-9]\..*\.' >/dev/null; then
+- check_cxxflags -fvisibility-inlines-hidden
+- append CCONFIG "use_hidesyms"
+- else
+- disable symbol_visibility
+- warn "--enable-symbol-visibility requires gcc 4.2 or higher"
+- fi
+- fi
+- if expr "$gxx_version" : '4\.[3-9]' >/dev/null || expr "$gxx_version" : '[5-9]\..*\.' >/dev/null; then
+- check_cxxflags -Wmissing-declarations
++ check_cxxflags -fvisibility-inlines-hidden
++ append CCONFIG "use_hidesyms"
+ fi
++ check_cxxflags -Wmissing-declarations
+ check_cxxflags -Wno-switch
+ check_cxxflags -Woverloaded-virtual
+ check_cxxflags -funit-at-a-time
+diff --git a/mythtv/external/FFmpeg/libavutil/bswap.h b/mythtv/external/FFmpeg/libavutil/bswap.h
+index 331d391..91cb795 100644
+--- a/mythtv/external/FFmpeg/libavutil/bswap.h
++++ b/mythtv/external/FFmpeg/libavutil/bswap.h
+@@ -76,21 +76,6 @@ static inline uint64_t av_const av_bswap64(uint64_t x)
+ }
+ #endif
+
+-#ifndef av_bswap_dbl
+-static inline double bswap_dbl(double x)
+-{
+- union {
+- uint32_t l[2];
+- double d;
+- } w, r;
+- w.d = x;
+- r.l[0] = av_bswap32(w.l[1]);
+- r.l[1] = av_bswap32(w.l[0]);
+- return r.d;
+-}
+-#endif
+-
+-
+ // be2ne ... big-endian to native-endian
+ // le2ne ... little-endian to native-endian
+
+diff --git a/mythtv/libs/libmyth/programinfo.cpp b/mythtv/libs/libmyth/programinfo.cpp
+index 56a1a3b..3d7c94d 100644
+--- a/mythtv/libs/libmyth/programinfo.cpp
++++ b/mythtv/libs/libmyth/programinfo.cpp
+@@ -1593,7 +1593,7 @@ void ProgramInfo::ToMap(InfoMap &progMap,
+
+ progMap["titlesubtitle"] = tempSubTitle;
+
+- progMap["description"] = description;
++ progMap["description"] = progMap["description0"] = description;
+
+ if (season > 0 || episode > 0)
+ {
+diff --git a/mythtv/libs/libmythbase/lcddevice.cpp b/mythtv/libs/libmythbase/lcddevice.cpp
+index f3924d9..1ee9964 100644
+--- a/mythtv/libs/libmythbase/lcddevice.cpp
++++ b/mythtv/libs/libmythbase/lcddevice.cpp
+@@ -77,6 +77,7 @@ LCD::LCD()
+
+ connect(m_retryTimer, SIGNAL(timeout()), this, SLOT(restartConnection()));
+ connect(m_LEDTimer, SIGNAL(timeout()), this, SLOT(outputLEDs()));
++ connect(this, &LCD::sendToServer, this, &LCD::sendToServerSlot, Qt::QueuedConnection);
+ }
+
+ bool LCD::m_enabled = false;
+@@ -204,13 +205,20 @@ bool LCD::connectToHost(const QString &lhostname, unsigned int lport)
+ return m_connected;
+ }
+
+-void LCD::sendToServer(const QString &someText)
++void LCD::sendToServerSlot(const QString &someText)
+ {
+ QMutexLocker locker(&m_socketLock);
+
+ if (!m_socket || !m_lcdReady)
+ return;
+
++ if (m_socket->thread() != QThread::currentThread())
++ {
++ LOG(VB_GENERAL, LOG_ERR,
++ "Sending to LCDServer from wrong thread.");
++ return;
++ }
++
+ // Check the socket, make sure the connection is still up
+ if (QAbstractSocket::ConnectedState != m_socket->state())
+ {
+diff --git a/mythtv/libs/libmythbase/lcddevice.h b/mythtv/libs/libmythbase/lcddevice.h
+index b6346ec..c3247b4 100644
+--- a/mythtv/libs/libmythbase/lcddevice.h
++++ b/mythtv/libs/libmythbase/lcddevice.h
+@@ -293,10 +293,13 @@ class MBASE_PUBLIC LCD : public QObject
+ void restartConnection(); // Try to re-establish the connection to
+ // LCDServer every 10 seconds
+ void outputLEDs();
++ void sendToServerSlot(const QString &someText);
++
++signals:
++ void sendToServer(const QString &someText);
+
+ private:
+ bool startLCDServer(void);
+- void sendToServer(const QString &someText);
+ void init();
+ void handleKeyPress(const QString &keyPressed);
+ QString quotedString(const QString &string);
diff --git a/mythtv/libs/libmythbase/loggingserver.cpp b/mythtv/libs/libmythbase/loggingserver.cpp
index 4ebb705..15aafa2 100644
--- a/mythtv/libs/libmythbase/loggingserver.cpp
@@ -22,6 +223,20 @@ index 4ebb705..15aafa2 100644
{
qLock.unlock();
bool logged = m_logger->logqmsg(*query, item);
+diff --git a/mythtv/libs/libmythtv/deletemap.cpp b/mythtv/libs/libmythtv/deletemap.cpp
+index 1be1a02..adf06c2 100644
+--- a/mythtv/libs/libmythtv/deletemap.cpp
++++ b/mythtv/libs/libmythtv/deletemap.cpp
+@@ -489,7 +489,8 @@ void DeleteMap::NewCut(uint64_t frame)
+ {
+ LOG(VB_PLAYBACK, LOG_INFO, LOC +
+ QString("Deleting bounded marker: %1").arg(otherframe));
+- Delete(otherframe);
++ it = m_deleteMap.erase(it);
++ m_changed = true;
+ }
+ }
+ }
diff --git a/mythtv/libs/libmythtv/eitfixup.cpp b/mythtv/libs/libmythtv/eitfixup.cpp
index 6c664c9..28b9816 100644
--- a/mythtv/libs/libmythtv/eitfixup.cpp
@@ -67,6 +282,19 @@ index 5b66988..1369cab 100644
fix[ 2112LL << 32 | 2U << 16] = EITFixUp::kFixUK;
fix[ 2116LL << 32 | 2U << 16] = EITFixUp::kFixUK;
fix[ 2301LL << 32 | 2U << 16] = EITFixUp::kFixUK | EITFixUp::kFixHTML;
+diff --git a/mythtv/libs/libmythtv/iptvtuningdata.h b/mythtv/libs/libmythtv/iptvtuningdata.h
+index c5a3c2e..111052d 100644
+--- a/mythtv/libs/libmythtv/iptvtuningdata.h
++++ b/mythtv/libs/libmythtv/iptvtuningdata.h
+@@ -97,7 +97,7 @@ class MTV_PUBLIC IPTVTuningData
+ const QUrl u = GetDataURL();
+ if (IsHLS())
+ return QString("%1(%2)").arg(u.toString()).arg(GetBitrate(0));
+- if (IsHTTPTS())
++ if (IsHTTPTS() || IsRTSP())
+ return QString("%1").arg(u.toString());
+ return QString("%1:%2:%3")
+ .arg(u.host()).arg(u.userInfo()).arg(u.port()).toLower();
diff --git a/mythtv/libs/libmythtv/mythavutil.cpp b/mythtv/libs/libmythtv/mythavutil.cpp
index afed323..c69c4d2 100644
--- a/mythtv/libs/libmythtv/mythavutil.cpp
@@ -101,6 +329,409 @@ index afed323..c69c4d2 100644
SWS_FAST_BILINEAR, NULL, NULL, NULL);
if (d->swsctx == NULL)
{
+diff --git a/mythtv/libs/libmythtv/privatedecoder_omx.cpp b/mythtv/libs/libmythtv/privatedecoder_omx.cpp
+index b2999ad..f644ed5 100644
+--- a/mythtv/libs/libmythtv/privatedecoder_omx.cpp
++++ b/mythtv/libs/libmythtv/privatedecoder_omx.cpp
+@@ -92,9 +92,6 @@ void PrivateDecoderOMX::GetDecoders(render_opts &opts)
+ PrivateDecoderOMX::PrivateDecoderOMX() :
+ m_videc(gCoreContext->GetSetting("OMXVideoDecode", VIDEO_DECODE), *this),
+ m_filter(0), m_bStartTime(false),
+-#ifdef USING_BROADCOM
+- m_eMode(OMX_InterlaceFieldsInterleavedUpperFirst), m_bRepeatFirstField(false),
+-#endif
+ m_avctx(0),
+ m_lock(QMutex::Recursive), m_bSettingsChanged(false),
+ m_bSettingsHaveChanged(false)
+@@ -888,6 +885,7 @@ int PrivateDecoderOMX::GetBufferedFrame(AVStream *stream, AVFrame *picture)
+ OMX_BUFFERHEADERTYPE *hdr = m_obufs.takeFirst();
+ m_lock.unlock();
+
++ OMX_U32 nFlags = hdr->nFlags;
+ if (hdr->nFlags & ~OMX_BUFFERFLAG_ENDOFFRAME)
+ LOG(VB_PLAYBACK, LOG_DEBUG, LOC +
+ QString("Decoded frame flags=%1").arg(HeaderFlags(hdr->nFlags)) );
+@@ -1019,39 +1017,15 @@ int PrivateDecoderOMX::GetBufferedFrame(AVStream *stream, AVFrame *picture)
+ if (ret)
+ {
+ #ifdef USING_BROADCOM
+- switch (m_eMode)
+- {
+- case OMX_InterlaceProgressive:
+- picture->interlaced_frame = 0;
+- picture->top_field_first = 0;
+- break;
+- case OMX_InterlaceFieldSingleUpperFirst:
+- /* The data is interlaced, fields sent
+- * separately in temporal order, with upper field first */
+- picture->interlaced_frame = 1;
+- picture->top_field_first = 1;
+- break;
+- case OMX_InterlaceFieldSingleLowerFirst:
+- picture->interlaced_frame = 1;
+- picture->top_field_first = 0;
+- break;
+- case OMX_InterlaceFieldsInterleavedUpperFirst:
+- /* The data is interlaced, two fields sent together line
+- * interleaved, with the upper field temporally earlier */
++ if (nFlags & OMX_BUFFERFLAG_INTERLACED)
+ picture->interlaced_frame = 1;
++ else
++ picture->interlaced_frame = 0;
++ if (nFlags & OMX_BUFFERFLAG_TOP_FIELD_FIRST)
+ picture->top_field_first = 1;
+- break;
+- case OMX_InterlaceFieldsInterleavedLowerFirst:
+- picture->interlaced_frame = 1;
++ else
+ picture->top_field_first = 0;
+- break;
+- case OMX_InterlaceMixed:
+- /* The stream may contain a mixture of progressive
+- * and interlaced frames */
+- picture->interlaced_frame = 1;
+- break;
+- }
+- picture->repeat_pict = m_bRepeatFirstField;
++ picture->repeat_pict = 0;
+ #endif // USING_BROADCOM
+
+ if (!frame)
+@@ -1128,55 +1102,6 @@ OMX_ERRORTYPE PrivateDecoderOMX::SettingsChanged(AVCodecContext *avctx)
+ .arg(Error2String(e)));
+
+ #ifdef USING_BROADCOM
+- OMX_CONFIG_INTERLACETYPE inter;
+- e = GetInterlace(inter, index);
+- if (e == OMX_ErrorNone)
+- {
+- LOG(VB_PLAYBACK, LOG_INFO, LOC + QString("%1%2")
+- .arg(Interlace2String(inter.eMode))
+- .arg(inter.bRepeatFirstField ? " rpt 1st" : "") );
+-
+- m_bRepeatFirstField = inter.bRepeatFirstField;
+- m_eMode = inter.eMode;
+-#if 0 // Can't change interlacing setting, at least not on RPi
+- switch (inter.eMode)
+- {
+- case OMX_InterlaceProgressive:
+- break;
+-
+- case OMX_InterlaceFieldSingleUpperFirst:
+- case OMX_InterlaceFieldSingleLowerFirst:
+- break;
+-
+- case OMX_InterlaceFieldsInterleavedUpperFirst:
+- /* The data is interlaced, two fields sent together line
+- * interleaved, with the upper field temporally earlier */
+- inter.eMode = OMX_InterlaceFieldSingleUpperFirst;
+- break;
+- case OMX_InterlaceFieldsInterleavedLowerFirst:
+- inter.eMode = OMX_InterlaceFieldSingleLowerFirst;
+- break;
+-
+- case OMX_InterlaceMixed:
+- inter.eMode = OMX_InterlaceFieldSingleUpperFirst;
+- break;
+- }
+-
+- if (m_eMode != inter.eMode)
+- {
+- e = m_videc.SetConfig(OMX_IndexConfigCommonInterlace, &inter);
+- if (e == OMX_ErrorNone)
+- m_eMode = inter.eMode;
+- else
+- LOG(VB_PLAYBACK, LOG_ERR, LOC + QString(
+- "Set ConfigCommonInterlace error %1")
+- .arg(Error2String(e)));
+- }
+-#endif
+- }
+-#endif // USING_BROADCOM
+-
+-#ifdef USING_BROADCOM
+ if (VERBOSE_LEVEL_CHECK(VB_PLAYBACK, LOG_INFO))
+ {
+ OMX_CONFIG_POINTTYPE aspect;
+diff --git a/mythtv/libs/libmythtv/privatedecoder_omx.h b/mythtv/libs/libmythtv/privatedecoder_omx.h
+index 7fe28eb..6a00506 100644
+--- a/mythtv/libs/libmythtv/privatedecoder_omx.h
++++ b/mythtv/libs/libmythtv/privatedecoder_omx.h
+@@ -70,10 +70,6 @@ class PrivateDecoderOMX : public PrivateDecoder, private OMXComponentCtx
+ OMXComponent m_videc;
+ AVBitStreamFilterContext *m_filter;
+ bool m_bStartTime;
+-#ifdef USING_BROADCOM
+- OMX_INTERLACETYPE m_eMode;
+- bool m_bRepeatFirstField;
+-#endif
+ AVCodecContext *m_avctx;
+
+ QMutex mutable m_lock; // Protects data following
+diff --git a/mythtv/libs/libmythtv/recorders/ExternalChannel.cpp b/mythtv/libs/libmythtv/recorders/ExternalChannel.cpp
+index 604819c..5d44f8d 100644
+--- a/mythtv/libs/libmythtv/recorders/ExternalChannel.cpp
++++ b/mythtv/libs/libmythtv/recorders/ExternalChannel.cpp
+@@ -95,6 +95,11 @@ bool ExternalChannel::Tune(const QString &channum)
+ return true;
+ }
+
++bool ExternalChannel::Tune(const QString &freqid, int /*finetune*/)
++{
++ return ExternalChannel::Tune(freqid);
++}
++
+ bool ExternalChannel::EnterPowerSavingMode(void)
+ {
+ Close();
+diff --git a/mythtv/libs/libmythtv/recorders/ExternalChannel.h b/mythtv/libs/libmythtv/recorders/ExternalChannel.h
+index d74e5a9..da3b79f 100644
+--- a/mythtv/libs/libmythtv/recorders/ExternalChannel.h
++++ b/mythtv/libs/libmythtv/recorders/ExternalChannel.h
+@@ -29,6 +29,7 @@ class ExternalChannel : public DTVChannel
+ using DTVChannel::Tune;
+ virtual bool Tune(const DTVMultiplex&) { return true; }
+ virtual bool Tune(const QString &channum);
++ virtual bool Tune(const QString &freqid, int /*finetune*/);
+
+ virtual bool EnterPowerSavingMode(void);
+
+diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
+index d6367a6..12fa839 100644
+--- a/mythtv/libs/libmythtv/tv_play.cpp
++++ b/mythtv/libs/libmythtv/tv_play.cpp
+@@ -2601,15 +2601,21 @@ void TV::HandleStateChange(PlayerContext *mctx, PlayerContext *ctx)
+ {
+ if (!ctx->IsPIP())
+ GetMythUI()->DisableScreensaver();
+- MythMainWindow *mainWindow = GetMythMainWindow();
+- mainWindow->setBaseSize(player_bounds.size());
+- mainWindow->setMinimumSize(
+- (db_use_fixed_size) ? player_bounds.size() : QSize(16, 16));
+- mainWindow->setMaximumSize(
+- (db_use_fixed_size) ? player_bounds.size() :
+- QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
+- mainWindow->setGeometry(player_bounds);
+- mainWindow->ResizePainterWindow(player_bounds.size());
++ bool switchMode = gCoreContext->GetNumSetting("UseVideoModes", 0);
++ // player_bounds is not applicable when switching modes so
++ // skip this logic in that case.
++ if (!switchMode)
++ {
++ MythMainWindow *mainWindow = GetMythMainWindow();
++ mainWindow->setBaseSize(player_bounds.size());
++ mainWindow->setMinimumSize(
++ (db_use_fixed_size) ? player_bounds.size() : QSize(16, 16));
++ mainWindow->setMaximumSize(
++ (db_use_fixed_size) ? player_bounds.size() :
++ QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
++ mainWindow->setGeometry(player_bounds);
++ mainWindow->ResizePainterWindow(player_bounds.size());
++ }
+ // PGB Do not disable the GUI when using openmax renderer,
+ // to ensure that space next to letterbox pictures
+ // is painted.
+@@ -3296,6 +3302,7 @@ void TV::HandleLCDVolumeTimerEvent()
+
+ QMutexLocker locker(&timerIdLock);
+ KillTimer(lcdVolumeTimerId);
++ lcdVolumeTimerId = 0;
+ }
+
+ int TV::StartTimer(int interval, int line)
+@@ -9867,7 +9874,11 @@ void TV::customEvent(QEvent *e)
+ mctx->UnlockDeletePlayer(__FILE__, __LINE__);
+ ReturnPlayerLock(mctx);
+
+- if (!db_use_gui_size_for_tv || !db_use_fixed_size)
++ // player_bounds is not applicable when switching modes so
++ // skip this logic in that case.
++ bool switchMode = gCoreContext->GetNumSetting("UseVideoModes", 0);
++ if (!switchMode
++ && (!db_use_gui_size_for_tv || !db_use_fixed_size))
+ {
+ mwnd->setMinimumSize(QSize(16, 16));
+ mwnd->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
+diff --git a/mythtv/libs/libmythtv/videoout_omx.cpp b/mythtv/libs/libmythtv/videoout_omx.cpp
+index 3c5c448..63a5c3f 100644
+--- a/mythtv/libs/libmythtv/videoout_omx.cpp
++++ b/mythtv/libs/libmythtv/videoout_omx.cpp
+@@ -286,7 +286,8 @@ VideoOutputOMX::VideoOutputOMX() :
+ m_render(gCoreContext->GetSetting("OMXVideoRender", VIDEO_RENDER), *this),
+ m_imagefx(gCoreContext->GetSetting("OMXVideoFilter", IMAGE_FX), *this),
+ m_context(0),
+- m_backgroundscreen(0), m_glOsdThread(0), m_changed(false)
++ m_backgroundscreen(0), m_glOsdThread(0), m_changed(false),
++ m_videoPaused(false)
+ {
+ #ifdef OSD_EGL
+ m_osdpainter = 0;
+@@ -755,6 +756,10 @@ void VideoOutputOMX::UpdatePauseFrame(int64_t &disp_timecode)
+ CopyFrame(&av_pause_frame, used_frame);
+ }
+
++ // Suppress deinterlace while paused to prevent the jiggles.
++ av_pause_frame.interlaced_frame = 0;
++ av_pause_frame.top_field_first = 0;
++
+ disp_timecode = av_pause_frame.disp_timecode;
+ }
+
+@@ -773,9 +778,11 @@ void VideoOutputOMX::ProcessFrame(VideoFrame *frame, OSD *osd,
+ return;
+ }
+
++ m_videoPaused = false;
+ if (!frame)
+ {
+ // Rotate pause frames
++ m_videoPaused = true;
+ vbuffers.Enqueue(kVideoBuffer_pause, vbuffers.Dequeue(kVideoBuffer_pause));
+ frame = vbuffers.GetScratchFrame();
+ CopyFrame(frame, &av_pause_frame);
+@@ -877,7 +884,18 @@ void VideoOutputOMX::Show(FrameScanType scan)
+
+ hdr->nFilledLen = frame->offsets[2] + (frame->offsets[1] >> 2);
+ hdr->nFlags = OMX_BUFFERFLAG_ENDOFFRAME;
++ if (frame->interlaced_frame)
++ hdr->nFlags |= OMX_BUFFERFLAG_INTERLACED;
++ if (frame->top_field_first)
++ hdr->nFlags |= OMX_BUFFERFLAG_TOP_FIELD_FIRST;
+ OMXComponent &cmpnt = m_imagefx.IsValid() ? m_imagefx : m_render;
++ // Paused - do not display anything unless softblend set
++ if (m_videoPaused && GetOSDRenderer() != "softblend")
++ {
++ // fake out that the buffer was already emptied
++ EmptyBufferDone(cmpnt, hdr);
++ return;
++ }
+ OMX_ERRORTYPE e = OMX_EmptyThisBuffer(cmpnt.Handle(), hdr);
+ if (e != OMX_ErrorNone)
+ {
+diff --git a/mythtv/libs/libmythtv/videoout_omx.h b/mythtv/libs/libmythtv/videoout_omx.h
+index fb162d1..5ecdcdb 100644
+--- a/mythtv/libs/libmythtv/videoout_omx.h
++++ b/mythtv/libs/libmythtv/videoout_omx.h
+@@ -88,6 +88,7 @@ class VideoOutputOMX : public VideoOutput, private OMXComponentCtx
+ MythScreenType *m_backgroundscreen;
+ GlOsdThread *m_glOsdThread;
+ bool m_changed;
++ bool m_videoPaused;
+ };
+
+ #endif // ndef VIDEOOUT_OMX_H
+diff --git a/mythtv/libs/libmythtv/videoout_opengl.cpp b/mythtv/libs/libmythtv/videoout_opengl.cpp
+index 7a13935..a743e92 100644
+--- a/mythtv/libs/libmythtv/videoout_opengl.cpp
++++ b/mythtv/libs/libmythtv/videoout_opengl.cpp
+@@ -363,7 +363,24 @@ bool VideoOutputOpenGL::SetupOpenGL(void)
+ if (!gl_context)
+ return false;
+
+- const QRect dvr = window.GetDisplayVisibleRect();
++ QRect dvr = window.GetDisplayVisibleRect();
++
++ MythMainWindow *mainWin = GetMythMainWindow();
++ QSize mainSize = mainWin->size();
++
++ // If the Video screen mode has vertically less pixels
++ // than the GUI screen mode - OpenGL coordinate adjustments
++ // must be made to put the video at the top of the display
++ // area instead of at the bottom.
++ if (dvr.height() < mainSize.height())
++ dvr.setTop(dvr.top()-mainSize.height()+dvr.height());
++
++ // If the Video screen mode has horizontally less pixels
++ // than the GUI screen mode - OpenGL width must be set
++ // as the higher GUI width so that the Program Guide
++ // invoked from playback is not cut off.
++ if (dvr.width() < mainSize.width())
++ dvr.setWidth(mainSize.width());
+
+ if (video_codec_id == kCodec_NONE)
+ {
+diff --git a/mythtv/libs/libmythtv/videooutwindow.cpp b/mythtv/libs/libmythtv/videooutwindow.cpp
+index 78993b5..0ea9a17 100644
+--- a/mythtv/libs/libmythtv/videooutwindow.cpp
++++ b/mythtv/libs/libmythtv/videooutwindow.cpp
+@@ -93,6 +93,12 @@ VideoOutWindow::VideoOutWindow() :
+ gCoreContext->GetNumSetting("yScanDisplacement", 0));
+ db_use_gui_size = gCoreContext->GetNumSetting("GuiSizeForTV", 0);
+
++ populateGeometry();
++}
++
++void VideoOutWindow::populateGeometry(void)
++{
++ qApp->processEvents();
+ QDesktopWidget *desktop = NULL;
+ if (qobject_cast<QApplication*>(qApp))
+ desktop = QApplication::desktop();
+@@ -489,6 +495,8 @@ bool VideoOutWindow::Init(const QSize &new_video_dim_buf,
+ AspectOverrideMode new_aspectoverride,
+ AdjustFillMode new_adjustfill)
+ {
++ // Refresh the geometry in case the video mode has changed
++ populateGeometry();
+ display_visible_rect = db_use_gui_size ? new_display_visible_rect :
+ screen_geom;
+
+diff --git a/mythtv/libs/libmythtv/videooutwindow.h b/mythtv/libs/libmythtv/videooutwindow.h
+index 0d5b04d..93aef00 100644
+--- a/mythtv/libs/libmythtv/videooutwindow.h
++++ b/mythtv/libs/libmythtv/videooutwindow.h
+@@ -68,6 +68,7 @@ class VideoOutWindow
+ void SetNeedRepaint(bool needRepaint)
+ { needrepaint = needRepaint; }
+
++ void populateGeometry(void);
+ // Gets
+ bool IsVideoScalingAllowed(void) const { return db_scaling_allowed; }
+ /// \brief Returns if videooutput is embedding
+diff --git a/mythtv/libs/libmythtv/videosource.cpp b/mythtv/libs/libmythtv/videosource.cpp
+index 97618ad..0b530ae 100644
+--- a/mythtv/libs/libmythtv/videosource.cpp
++++ b/mythtv/libs/libmythtv/videosource.cpp
+@@ -3,7 +3,11 @@
+ // Standard UNIX C headers
+ #include <unistd.h>
+ #include <fcntl.h>
++#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(_WIN32)
+ #include <sys/types.h>
++#else
++#include <sys/sysmacros.h>
++#endif
+ #include <sys/stat.h>
+
+ // C++ headers
+diff --git a/mythtv/libs/libmythui/mythrender_opengl.h b/mythtv/libs/libmythui/mythrender_opengl.h
+index adaf302..a18c515 100644
+--- a/mythtv/libs/libmythui/mythrender_opengl.h
++++ b/mythtv/libs/libmythui/mythrender_opengl.h
+@@ -19,9 +19,6 @@
+ #ifdef USING_X11
+ #define GLX_GLXEXT_PROTOTYPES
+ #define XMD_H 1
+-#ifndef GL_ES_VERSION_2_0
+-#include <GL/gl.h>
+-#endif
+ #undef GLX_ARB_get_proc_address
+ #endif // USING_X11
+
+diff --git a/mythtv/libs/libmythui/mythrender_opengl1.h b/mythtv/libs/libmythui/mythrender_opengl1.h
+index ce651df..53e25fe 100644
+--- a/mythtv/libs/libmythui/mythrender_opengl1.h
++++ b/mythtv/libs/libmythui/mythrender_opengl1.h
+@@ -3,6 +3,9 @@
+
+ #include "mythrender_opengl.h"
+ #include "mythrender_opengl_defs1.h"
++#if !defined(Q_OS_MAC)
++#include <GL/gl.h>
++#endif
+
+ class MUI_PUBLIC MythRenderOpenGL1 : public MythRenderOpenGL
+ {
diff --git a/mythtv/libs/libmythupnp/mythxmlclient.cpp b/mythtv/libs/libmythupnp/mythxmlclient.cpp
index 45d7497..c6fe011 100644
--- a/mythtv/libs/libmythupnp/mythxmlclient.cpp
@@ -160,6 +791,501 @@ index 4b0457f..acc2bd9 100644
} UPnPResultCode;
+diff --git a/mythtv/programs/mythbackend/services/content.cpp b/mythtv/programs/mythbackend/services/content.cpp
+index 1f5cd1b..5eea0ae 100644
+--- a/mythtv/programs/mythbackend/services/content.cpp
++++ b/mythtv/programs/mythbackend/services/content.cpp
+@@ -503,7 +503,7 @@ QFileInfo Content::GetPreviewImage( int nRecordedId,
+ if (!sFormat.isEmpty()
+ && !QImageWriter::supportedImageFormats().contains(sFormat.toLower().toLocal8Bit()))
+ {
+- throw "GetPreviewImage: Specified 'Format' is not supported.";
++ throw QString("GetPreviewImage: Specified 'Format' is not supported.");
+ }
+
+ // ----------------------------------------------------------------------
+@@ -1081,7 +1081,7 @@ DTC::LiveStreamInfo *Content::AddVideoLiveStream( int nId,
+ int nSampleRate )
+ {
+ if (nId < 0)
+- throw( "Id is invalid" );
++ throw QString( "Id is invalid" );
+
+ VideoMetadataListManager::VideoMetadataPtr metadata =
+ VideoMetadataListManager::loadOneFromDatabase(nId);
+diff --git a/mythtv/programs/mythbackend/services/dvr.cpp b/mythtv/programs/mythbackend/services/dvr.cpp
+index 605dd48..abdf07d 100644
+--- a/mythtv/programs/mythbackend/services/dvr.cpp
++++ b/mythtv/programs/mythbackend/services/dvr.cpp
+@@ -741,7 +741,7 @@ DTC::TitleInfoList* Dvr::GetTitleInfoList()
+ "SELECT title, inetref, count(title) as count "
+ " FROM recorded AS r "
+ " JOIN recgroups AS g ON r.recgroupid = g.recgroupid "
+- " WHERE g.recgroup != 'LiveTV' "
++ " WHERE g.recgroup NOT IN ('Deleted', 'LiveTV') "
+ " AND r.deletepending = 0 "
+ " GROUP BY title, inetref "
+ " ORDER BY title");
+diff --git a/mythtv/programs/mythbackend/services/guide.cpp b/mythtv/programs/mythbackend/services/guide.cpp
+index cd2e61e..c349e8c 100644
+--- a/mythtv/programs/mythbackend/services/guide.cpp
++++ b/mythtv/programs/mythbackend/services/guide.cpp
+@@ -53,16 +53,16 @@ DTC::ProgramGuide *Guide::GetProgramGuide( const QDateTime &rawStartTime ,
+ int nCount)
+ {
+ if (!rawStartTime.isValid())
+- throw( "StartTime is invalid" );
++ throw QString( "StartTime is invalid" );
+
+ if (!rawEndTime.isValid())
+- throw( "EndTime is invalid" );
++ throw QString( "EndTime is invalid" );
+
+ QDateTime dtStartTime = rawStartTime.toUTC();
+ QDateTime dtEndTime = rawEndTime.toUTC();
+
+ if (dtEndTime < dtStartTime)
+- throw( "EndTime is before StartTime");
++ throw QString( "EndTime is before StartTime");
+
+ if (nStartIndex <= 0)
+ nStartIndex = 0;
+@@ -179,16 +179,16 @@ DTC::ProgramList* Guide::GetProgramList(int nStartIndex,
+ bool bDescending)
+ {
+ if (!rawStartTime.isNull() && !rawStartTime.isValid())
+- throw( "StartTime is invalid" );
++ throw QString( "StartTime is invalid" );
+
+ if (!rawEndTime.isNull() && !rawEndTime.isValid())
+- throw( "EndTime is invalid" );
++ throw QString( "EndTime is invalid" );
+
+ QDateTime dtStartTime = rawStartTime;
+ QDateTime dtEndTime = rawEndTime;
+
+ if (!rawEndTime.isNull() && dtEndTime < dtStartTime)
+- throw( "EndTime is before StartTime");
++ throw QString( "EndTime is before StartTime");
+
+ MSqlQuery query(MSqlQuery::InitCon());
+
+@@ -333,9 +333,9 @@ DTC::Program* Guide::GetProgramDetails( int nChanId,
+
+ {
+ if (!(nChanId > 0))
+- throw( "Channel ID is invalid" );
++ throw QString( "Channel ID is invalid" );
+ if (!rawStartTime.isValid())
+- throw( "StartTime is invalid" );
++ throw QString( "StartTime is invalid" );
+
+ QDateTime dtStartTime = rawStartTime.toUTC();
+
+@@ -506,7 +506,7 @@ QStringList Guide::GetStoredSearches( const QString& sType )
+
+ if (iType == kNoSearch)
+ {
+- //throw( "Invalid Type" );
++ //throw QString( "Invalid Type" );
+ return keywordList;
+ }
+
+diff --git a/mythtv/programs/mythbackend/services/myth.cpp b/mythtv/programs/mythbackend/services/myth.cpp
+index d7a3a83..f0744a8 100644
+--- a/mythtv/programs/mythbackend/services/myth.cpp
++++ b/mythtv/programs/mythbackend/services/myth.cpp
+@@ -437,7 +437,7 @@ QDateTime Myth::ParseISODateString(const QString& DateTimeString)
+ QDateTime dateTime = QDateTime().fromString(DateTimeString, Qt::ISODate);
+
+ if (!dateTime.isValid())
+- throw( "Unable to parse DateTimeString" );
++ throw QString( "Unable to parse DateTimeString" );
+
+ return dateTime;
+ }
+diff --git a/mythtv/programs/mythfilldatabase/channeldata.cpp b/mythtv/programs/mythfilldatabase/channeldata.cpp
+index c0ee522..9825c4e 100644
+--- a/mythtv/programs/mythfilldatabase/channeldata.cpp
++++ b/mythtv/programs/mythfilldatabase/channeldata.cpp
+@@ -128,27 +128,31 @@ QString ChannelData::normalizeChannelKey(const QString &chanName) const
+ return result;
+ }
+
+-QHash<QString, ChannelInfo> ChannelData::channelList(int sourceId)
++ChannelList ChannelData::channelList(int sourceId)
+ {
+- QHash<QString, ChannelInfo> retList;
++ ChannelList retList;
+
+- ChannelInfoList channelList = ChannelUtil::GetChannels(sourceId, false);
++ uint avail = 0;
++ ChannelInfoList channelList = ChannelUtil::LoadChannels(0, 0, avail, false,
++ ChannelUtil::kChanOrderByChanNum,
++ ChannelUtil::kChanGroupByChanid,
++ sourceId);
+
+ ChannelInfoList::iterator it = channelList.begin();
+ for ( ; it != channelList.end(); ++it)
+ {
+ QString chanName = (*it).name;
+ QString key = normalizeChannelKey(chanName);
+- retList[key] = (*it);
++ retList.insert(key, *it);
+ }
+
+ return retList;
+ }
+
+ ChannelInfo ChannelData::FindMatchingChannel(const ChannelInfo &chanInfo,
+- QHash<QString, ChannelInfo> existingChannels) const
++ ChannelList existingChannels) const
+ {
+- QHash<QString, ChannelInfo>::iterator it;
++ ChannelList::iterator it;
+ for (it = existingChannels.begin(); it != existingChannels.end(); ++it)
+ {
+ if ((*it).xmltvid == chanInfo.xmltvid)
+@@ -158,6 +162,27 @@ ChannelInfo ChannelData::FindMatchingChannel(const ChannelInfo &chanInfo,
+ QString searchKey = normalizeChannelKey(chanInfo.name);
+ ChannelInfo existChan = existingChannels.value(searchKey);
+
++ if (existChan.chanid < 1)
++ {
++ // Check if it is ATSC
++ int chansep = chanInfo.channum.indexOf(QRegExp("\\D"));
++ if (chansep > 0)
++ {
++ // Populate xmltvid for scanned ATSC channels
++ uint major = chanInfo.channum.left(chansep).toInt();
++ uint minor = chanInfo.channum.right
++ (chanInfo.channum.length() - (chansep + 1)).toInt();
++
++ for (it = existingChannels.begin();
++ it != existingChannels.end(); ++it)
++ {
++ if ((*it).atsc_major_chan == major &&
++ (*it).atsc_minor_chan == minor)
++ return (*it);
++ }
++ }
++ }
++
+ return existChan;
+ }
+
+@@ -169,7 +194,7 @@ void ChannelData::handleChannels(int id, ChannelInfoList *chanlist)
+ return;
+ }
+
+- QHash<QString, ChannelInfo> existingChannels = channelList(id);
++ ChannelList existingChannels = channelList(id);
+ QString fileprefix = SetupIconCacheDirectory();
+
+ QDir::setCurrent(fileprefix);
+diff --git a/mythtv/programs/mythfilldatabase/channeldata.h b/mythtv/programs/mythfilldatabase/channeldata.h
+index 978ec8c..af0aa1c 100644
+--- a/mythtv/programs/mythfilldatabase/channeldata.h
++++ b/mythtv/programs/mythfilldatabase/channeldata.h
+@@ -7,6 +7,8 @@
+ // libmythtv
+ #include "channelinfo.h"
+
++using ChannelList = QMultiHash<QString, ChannelInfo>;
++
+ class ChannelData
+ {
+ public:
+@@ -21,8 +23,8 @@ class ChannelData
+ unsigned int chanid);
+
+ ChannelInfo FindMatchingChannel(const ChannelInfo &chanInfo,
+- QHash<QString, ChannelInfo> existingChannels) const;
+- QHash<QString, ChannelInfo> channelList(int sourceId);
++ ChannelList existingChannels) const;
++ ChannelList channelList(int sourceId);
+ QString normalizeChannelKey(const QString &chanName) const;
+
+ public:
+diff --git a/mythtv/programs/mythfilldatabase/xmltvparser.cpp b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
+index 62a3a13..21bf5b8 100644
+--- a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
++++ b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
+@@ -131,82 +131,107 @@ static void fromXMLTVDate(QString ×tr, QDateTime &dt)
+ return;
+ }
+
+- QStringList split = timestr.split(" ");
++ QStringList split = timestr.split(" ", QString::SkipEmptyParts);
+ QString ts = split[0];
+- QDateTime tmpDT;
+- tmpDT.setTimeSpec(Qt::LocalTime);
+-
+- // UTC/GMT, just strip
+- if (ts.endsWith('Z'))
+- ts.truncate(ts.length()-1);
+-
+- if (ts.length() == 14)
+- {
+- tmpDT = QDateTime::fromString(ts, "yyyyMMddHHmmss");
+- }
+- else if (ts.length() == 12)
+- {
+- tmpDT = QDateTime::fromString(ts, "yyyyMMddHHmm");
+- }
+- else if (ts.length() == 8)
+- {
+- tmpDT = QDateTime::fromString(ts, "yyyyMMdd");
+- }
+- else if (ts.length() == 6)
++ QDate tmpDate;
++ QTime tmpTime;
++ QString tzoffset;
++
++ // Process the TZ offset (if any)
++ if (split.size() > 1)
+ {
+- tmpDT = QDateTime::fromString(ts, "yyyyMM");
++ tzoffset = split[1];
++ // These shouldn't be required and they aren't ISO 8601 but the
++ // xmltv spec mentions these and just these so handle them just in
++ // case
++ if (tzoffset == "GMT" || tzoffset == "UTC")
++ tzoffset = "+0000";
++ else if (tzoffset == "BST")
++ tzoffset = "+0100";
+ }
+- else if (ts.length() == 4)
++ else
+ {
+- tmpDT = QDateTime::fromString(ts, "yyyy");
++ // We will accept a datetime with a trailing Z as being explicit
++ if (ts.endsWith('Z'))
++ {
++ tzoffset = "+0000";
++ ts.truncate(ts.length()-1);
++ }
++ else
++ {
++ tzoffset = "+0000";
++ static bool warned_once_on_implicit_utc = false;
++ if (!warned_once_on_implicit_utc)
++ {
++ LOG(VB_XMLTV, LOG_WARNING, "No explicit time zone found, "
++ "guessing implicit UTC! Please consider enhancing "
++ "the guide source to provide explicit UTC or local "
++ "time instead.");
++ warned_once_on_implicit_utc = true;
++ }
++ }
+ }
+
+- if (!tmpDT.isValid())
++ // Process the date part
++ QString tsDate = ts.left(8);
++ if (tsDate.length() == 8)
++ tmpDate = QDate::fromString(tsDate, "yyyyMMdd");
++ else if (tsDate.length() == 6)
++ tmpDate = QDate::fromString(tsDate, "yyyyMM");
++ else if (tsDate.length() == 4)
++ tmpDate = QDate::fromString(tsDate, "yyyy");
++ if (!tmpDate.isValid())
+ {
+- LOG(VB_GENERAL, LOG_ERR,
+- QString("Ignoring unknown timestamp format: %1")
+- .arg(ts));
++ LOG(VB_XMLTV, LOG_ERR,
++ QString("Invalid datetime (date) in XMLTV data, ignoring: %1")
++ .arg(timestr));
+ return;
+ }
+-
+- if (split.size() > 1)
++
++ // Process the time part (if any)
++ if (ts.length() > 8)
+ {
+- QString tmp = split[1].trimmed();
+-
+- // These shouldn't be required and they aren't ISO 8601 but the
+- // xmltv spec mentions these and just these so handle them just in
+- // case
+- if (tmp == "GMT" || tmp == "UTC")
+- tmp = "+0000";
+- else if (tmp == "BST")
+- tmp = "+0100";
+-
+- // While this seems like a hack, it's better than what was done before
+- QString isoDateString = QString("%1 %2").arg(tmpDT.toString(Qt::ISODate))
+- .arg(tmp);
+- // Work around Qt bug where zero offset dates are flagged as LocalTime
+- tmpDT = QDateTime::fromString(isoDateString, Qt::ISODate);
+- if (tmpDT.timeSpec() == Qt::LocalTime)
+- tmpDT.setTimeSpec(Qt::UTC);
+- dt = tmpDT.toUTC();
++ QString tsTime = ts.mid(8);
++ if (tsTime.length() == 6)
++ tmpTime = QTime::fromString(tsTime, "HHmmss");
++ else if (tsTime.length() == 4)
++ tmpTime = QTime::fromString(tsTime, "HHmm");
++ else if (tsTime.length() == 2)
++ tmpTime = QTime::fromString(tsTime, "HH");
++ if (!tmpTime.isValid())
++ {
++ // Time part exists, but is (somehow) invalid
++ LOG(VB_XMLTV, LOG_ERR,
++ QString("Invalid datetime (time) in XMLTV data, ignoring: %1")
++ .arg(timestr));
++ return;
++ }
+ }
+-
+- if (!dt.isValid())
+- {
+- static bool warned_once_on_implicit_utc = false;
+- if (!warned_once_on_implicit_utc)
++
++ QDateTime tmpDT = QDateTime(tmpDate, tmpTime, Qt::UTC);
++ if (!tmpDT.isValid())
+ {
+- LOG(VB_XMLTV, LOG_ERR, "No explicit time zone found, "
+- "guessing implicit UTC! Please consider enhancing "
+- "the guide source to provice explicit UTC or local "
+- "time instead.");
+- warned_once_on_implicit_utc = true;
++ LOG(VB_XMLTV, LOG_ERR,
++ QString("Invalid datetime (combination of date/time) "
++ "in XMLTV data, ignoring: %1").arg(timestr));
++ return;
+ }
+- dt = tmpDT;
++
++ // While this seems like a hack, it's better than what was done before
++ QString isoDateString = tmpDT.toString(Qt::ISODate);
++ if (isoDateString.endsWith('Z')) // Should always be Z, but ...
++ isoDateString.truncate(isoDateString.length()-1);
++ isoDateString += tzoffset;
++ dt = QDateTime::fromString(isoDateString, Qt::ISODate).toUTC();
++
++ if (!dt.isValid())
++ {
++ LOG(VB_XMLTV, LOG_ERR,
++ QString("Invalid datetime (zone offset) in XMLTV data, "
++ "ignoring: %1").arg(timestr));
++ return;
+ }
+
+- dt.setTimeSpec(Qt::UTC);
+-
+ timestr = MythDate::toString(dt, MythDate::kFilename);
+ }
+
+@@ -277,8 +302,7 @@ static void parseAudio(QDomElement &element, ProgInfo *pginfo)
+
+ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ {
+- QString uniqueid, season, episode, totalepisodes;
+- int dd_progid_done = 0;
++ QString programid, season, episode, totalepisodes;
+ ProgInfo *pginfo = new ProgInfo();
+
+ QString text = element.attribute("start", "");
+@@ -451,8 +475,11 @@ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ int idx = episodenum.indexOf('.');
+ if (idx != -1)
+ episodenum.remove(idx, 1);
+- pginfo->programId = episodenum;
+- dd_progid_done = 1;
++ programid = episodenum;
++ /* Only EPisodes and SHows are part of a series for SD */
++ if (programid.startsWith(QString("EP")) ||
++ programid.startsWith(QString("SH")))
++ pginfo->seriesId = QString("EP") + programid.mid(2,8);
+ }
+ else if (info.attribute("system") == "xmltv_ns")
+ {
+@@ -462,6 +489,7 @@ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ totalepisodes = episode.section('/',1,1).trimmed();
+ episode = episode.section('/',0,0).trimmed();
+ season = episodenum.section('.',0,0).trimmed();
++ season = season.section('/',0,0).trimmed();
+ QString part(episodenum.section('.',2,2));
+ QString partnumber(part.section('/',0,0).trimmed());
+ QString parttotal(part.section('/',1,1).trimmed());
+@@ -549,22 +577,20 @@ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ && ProgramInfo::kCategorySeries != pginfo->categoryType)
+ pginfo->airdate = current_year;
+
+- /* Let's build ourself a programid */
+- QString programid;
++ if (programid.isEmpty())
++ {
+
+- if (ProgramInfo::kCategoryMovie == pginfo->categoryType)
+- programid = "MV";
+- else if (ProgramInfo::kCategorySeries == pginfo->categoryType)
+- programid = "EP";
+- else if (ProgramInfo::kCategorySports == pginfo->categoryType)
+- programid = "SP";
+- else
+- programid = "SH";
++ /* Let's build ourself a programid */
++
++ if (ProgramInfo::kCategoryMovie == pginfo->categoryType)
++ programid = "MV";
++ else if (ProgramInfo::kCategorySeries == pginfo->categoryType)
++ programid = "EP";
++ else if (ProgramInfo::kCategorySports == pginfo->categoryType)
++ programid = "SP";
++ else
++ programid = "SH";
+
+- if (!uniqueid.isEmpty()) // we already have a unique id ready for use
+- programid.append(uniqueid);
+- else
+- {
+ QString seriesid = QString::number(ELFHash(pginfo->title.toUtf8()));
+ pginfo->seriesId = seriesid;
+ programid.append(seriesid);
+@@ -602,8 +628,8 @@ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ programid.clear();
+ }
+ }
+- if (dd_progid_done == 0)
+- pginfo->programId = programid;
++
++ pginfo->programId = programid;
+
+ return pginfo;
+ }
+@@ -662,7 +688,21 @@ bool XMLTVParser::parseFile(
+ {
+ ProgInfo *pginfo = parseProgram(e);
+
+- if (pginfo->startts == pginfo->endts)
++ if (!(pginfo->starttime.isValid()))
++ {
++ LOG(VB_GENERAL, LOG_WARNING, QString("Invalid programme (%1), "
++ "invalid start time, "
++ "skipping")
++ .arg(pginfo->title));
++ }
++ else if (pginfo->channel.isEmpty())
++ {
++ LOG(VB_GENERAL, LOG_WARNING, QString("Invalid programme (%1), "
++ "missing channel, "
++ "skipping")
++ .arg(pginfo->title));
++ }
++ else if (pginfo->startts == pginfo->endts)
+ {
+ LOG(VB_GENERAL, LOG_WARNING, QString("Invalid programme (%1), "
+ "identical start and end "
+@@ -712,4 +752,3 @@ bool XMLTVParser::parseFile(
+
+ return true;
+ }
+-
diff --git a/mythtv/programs/mythfrontend/proglist.cpp b/mythtv/programs/mythfrontend/proglist.cpp
index 37e4506..ebd94c1 100644
--- a/mythtv/programs/mythfrontend/proglist.cpp
diff --git a/mythtv.spec b/mythtv.spec
index 7570f9b..99c7621 100644
--- a/mythtv.spec
+++ b/mythtv.spec
@@ -1,7 +1,3 @@
-# Does not currently build on ppc
-# https://code.mythtv.org/trac/ticket/13049
-#ExcludeArch: ppc64 ppc64le
-
# Specfile for building MythTV and MythPlugins RPMs from a git checkout.
#
# by: Chris Petersen <cpetersen(a)mythtv.org>
@@ -64,7 +60,7 @@
%define desktop_vendor RPMFusion
# MythTV Version string -- preferably the output from git describe
-%define vers_string v0.28.1-23-gaf98262
+%define vers_string v0.28.1-38-geef6a48
%define branch fixes/0.28
# Git revision and branch ID
@@ -85,7 +81,7 @@ Version: 0.28.1
%if "%{branch}" == "master"
Release: 0.5.git.%{_gitrev}%{?dist}
%else
-Release: 5%{?dist}
+Release: 6%{?dist}
%endif
# The primary license is GPLv2+, but bits are borrowed from a number of
@@ -137,7 +133,6 @@ Source0: https://github.com/MythTV/%{name}/archive/v%{version}.tar.gz#/%{name}
# Also update ChangeLog with git log v0.28..HEAD > ChangeLog
# and update define vers_string to v0.28-52-ge6a60f7 with git describe
Patch0: mythtv-0.28-fixes.patch
-Patch1: ticket13049-remove-ffmpeg-bswap-change.diff
Source10: PACKAGE-LICENSING
Source11: ChangeLog
@@ -282,7 +277,7 @@ BuildRequires: python2-devel
%if 0%{?fedora}
BuildRequires: python2-mysql
%else
-BuildRequires: MySQL-python
+BuildRequires: MySQL-python
%endif
BuildRequires: python-urlgrabber
%endif
@@ -502,8 +497,9 @@ Requires: freetype, lame
Requires: perl(XML::Simple)
Requires: mythtv-common = %{version}-%{release}
Requires: mythtv-base-themes = %{version}
+Requires: mariadb >= 5
Requires: python-MythTV
-Requires: google-droid-sans-mono-fonts
+%{?fedora:Requires: google-droid-sans-mono-fonts}
%{?fedora:Recommends: mesa-vdpau-drivers}
Provides: mythtv-frontend-api = %{mythfeapiver}
@@ -782,14 +778,11 @@ on demand content.
################################################################################
%prep
-%setup -q -n %{name}-%{version}
+%autosetup -p1 -n %{name}-%{version}
# Remove compiled python file
#find -name *.pyc -exec rm -f {} \;
-%patch0 -p1
-%patch1 -p1
-
# Install ChangeLog
install -m 0644 %{SOURCE11} .
@@ -1355,6 +1348,9 @@ exit 0
%changelog
+* Sun Aug 6 2017 Richard Shaw <hobbes1069(a)gmail.com> - 0.28.1-6
+- Update to lates fixes/0.28, v0.28.1-38-geef6a48.
+
* Mon Jun 19 2017 Paul Howarth <paul(a)city-fan.org> - 0.28.1-5
- Perl 5.26 rebuild
7 years, 3 months