- fix widewine extension issue - vaapi, disable UseChromeOSDirectVideoDecoder - workaround for linking issue in clang <= 14epel8
parent
325cac37d2
commit
2148ca21fb
@ -1,20 +0,0 @@
|
||||
diff -up chromium-100.0.4896.60/chrome/common/chrome_paths.cc.widevine-other-locations chromium-100.0.4896.60/chrome/common/chrome_paths.cc
|
||||
--- chromium-100.0.4896.60/chrome/common/chrome_paths.cc.widevine-other-locations 2022-04-02 15:48:56.944051789 +0000
|
||||
+++ chromium-100.0.4896.60/chrome/common/chrome_paths.cc 2022-04-02 15:52:34.825642103 +0000
|
||||
@@ -319,6 +319,16 @@ bool PathProvider(int key, base::FilePat
|
||||
|
||||
#if BUILDFLAG(ENABLE_WIDEVINE)
|
||||
case chrome::DIR_BUNDLED_WIDEVINE_CDM:
|
||||
+ base::PathService::Get(base::DIR_HOME, &cur);
|
||||
+ cur = cur.Append(FILE_PATH_LITERAL(".local/lib/libwidevinecdm.so"));
|
||||
+ if (base::PathExists(cur)) {
|
||||
+ break;
|
||||
+ }
|
||||
+ // Yes, this has an arch hardcoded in the path, but at this time, it is the only place to find libwidevinecdm.so
|
||||
+ if (base::PathExists(base::FilePath(FILE_PATH_LITERAL("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so")))) {
|
||||
+ cur = base::FilePath(FILE_PATH_LITERAL("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so"));
|
||||
+ break;
|
||||
+ }
|
||||
if (!GetComponentDirectory(&cur))
|
||||
return false;
|
||||
cur = cur.AppendASCII(kWidevineCdmBaseDirectory);
|
@ -0,0 +1,19 @@
|
||||
diff -up chromium-108.0.5359.124/build/config/compiler/BUILD.gn.me chromium-108.0.5359.124/build/config/compiler/BUILD.gn
|
||||
--- chromium-108.0.5359.124/build/config/compiler/BUILD.gn.me 2023-01-03 21:02:16.602183035 +0100
|
||||
+++ chromium-108.0.5359.124/build/config/compiler/BUILD.gn 2023-01-03 21:04:11.606320859 +0100
|
||||
@@ -589,15 +589,6 @@ config("compiler") {
|
||||
if (is_clang) {
|
||||
cflags_cc += [ "-fno-trigraphs" ]
|
||||
}
|
||||
- } else if (is_linux) {
|
||||
- # TODO(crbug.com/1284275): Switch to C++20 on all platforms.
|
||||
- if (is_clang) {
|
||||
- cflags_cc += [ "-std=${standard_prefix}++20" ]
|
||||
- } else {
|
||||
- # The gcc bots are currently using GCC 9, which is not new enough to
|
||||
- # support "c++20"/"gnu++20".
|
||||
- cflags_cc += [ "-std=${standard_prefix}++2a" ]
|
||||
- }
|
||||
} else {
|
||||
cflags_cc += [ "-std=${standard_prefix}++17" ]
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
diff -up chromium-108.0.5359.124/AUTHORS.first_dts chromium-108.0.5359.124/AUTHORS
|
||||
--- chromium-108.0.5359.124/AUTHORS.first_dts 2022-12-31 15:30:52.923006393 +0100
|
||||
+++ chromium-108.0.5359.124/AUTHORS 2022-12-31 15:32:50.431215836 +0100
|
||||
@@ -97,6 +97,7 @@ Andra Paraschiv <andra.paraschiv@intel.c
|
||||
Andras Tokodi <a.tokodi@eyeo.com>
|
||||
Andreas Nazlidis <andreas221b@gmail.com>
|
||||
Andreas Papacharalampous <andreas@apap04.com>
|
||||
+Andreas Schneider <asn@cryptomilk.org>
|
||||
Andrei Borza <andrei.borza@gmail.com>
|
||||
Andrei Parvu <andrei.prv@gmail.com>
|
||||
Andrei Parvu <parvu@adobe.com>
|
||||
diff -up chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.cc.first_dts chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.cc
|
||||
--- chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.cc.first_dts 2022-12-14 01:39:52.000000000 +0100
|
||||
+++ chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.cc 2022-12-31 15:30:52.923006393 +0100
|
||||
@@ -58,7 +58,7 @@ namespace media {
|
||||
|
||||
namespace {
|
||||
|
||||
-constexpr int64_t kInvalidPTSMarker = static_cast<int64_t>(0x8000000000000000);
|
||||
+constexpr int64_t kRelativeTsBase = static_cast<int64_t>(0x7ffeffffffffffff);
|
||||
|
||||
void SetAVStreamDiscard(AVStream* stream, AVDiscard discard) {
|
||||
DCHECK(stream);
|
||||
@@ -91,7 +91,7 @@ static base::TimeDelta FramesToTimeDelta
|
||||
sample_rate);
|
||||
}
|
||||
|
||||
-static base::TimeDelta ExtractStartTime(AVStream* stream) {
|
||||
+static base::TimeDelta ExtractStartTime(AVStream* stream, int64_t first_dts) {
|
||||
// The default start time is zero.
|
||||
base::TimeDelta start_time;
|
||||
|
||||
@@ -101,12 +101,12 @@ static base::TimeDelta ExtractStartTime(
|
||||
|
||||
// Next try to use the first DTS value, for codecs where we know PTS == DTS
|
||||
// (excludes all H26x codecs). The start time must be returned in PTS.
|
||||
- if (av_stream_get_first_dts(stream) != kNoFFmpegTimestamp &&
|
||||
+ if (first_dts != AV_NOPTS_VALUE &&
|
||||
stream->codecpar->codec_id != AV_CODEC_ID_HEVC &&
|
||||
stream->codecpar->codec_id != AV_CODEC_ID_H264 &&
|
||||
stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) {
|
||||
const base::TimeDelta first_pts =
|
||||
- ConvertFromTimeBase(stream->time_base, av_stream_get_first_dts(stream));
|
||||
+ ConvertFromTimeBase(stream->time_base, first_dts);
|
||||
if (first_pts < start_time)
|
||||
start_time = first_pts;
|
||||
}
|
||||
@@ -275,6 +275,7 @@ FFmpegDemuxerStream::FFmpegDemuxerStream
|
||||
fixup_negative_timestamps_(false),
|
||||
fixup_chained_ogg_(false),
|
||||
num_discarded_packet_warnings_(0),
|
||||
+ first_dts_(AV_NOPTS_VALUE),
|
||||
last_packet_pos_(AV_NOPTS_VALUE),
|
||||
last_packet_dts_(AV_NOPTS_VALUE) {
|
||||
DCHECK(demuxer_);
|
||||
@@ -341,6 +342,11 @@ void FFmpegDemuxerStream::EnqueuePacket(
|
||||
int64_t packet_dts =
|
||||
packet->dts == AV_NOPTS_VALUE ? packet->pts : packet->dts;
|
||||
|
||||
+ if (first_dts_ == AV_NOPTS_VALUE && packet->dts != AV_NOPTS_VALUE &&
|
||||
+ last_packet_dts_ != AV_NOPTS_VALUE) {
|
||||
+ first_dts_ = packet->dts - (last_packet_dts_ + kRelativeTsBase);
|
||||
+ }
|
||||
+
|
||||
// Chained ogg files have non-monotonically increasing position and time stamp
|
||||
// values, which prevents us from using them to determine if a packet should
|
||||
// be dropped. Since chained ogg is only allowed on single track audio only
|
||||
@@ -683,6 +689,7 @@ void FFmpegDemuxerStream::FlushBuffers(b
|
||||
ResetBitstreamConverter();
|
||||
|
||||
if (!preserve_packet_position) {
|
||||
+ first_dts_ = AV_NOPTS_VALUE;
|
||||
last_packet_pos_ = AV_NOPTS_VALUE;
|
||||
last_packet_dts_ = AV_NOPTS_VALUE;
|
||||
}
|
||||
@@ -1434,7 +1441,8 @@ void FFmpegDemuxer::OnFindStreamInfoDone
|
||||
|
||||
max_duration = std::max(max_duration, streams_[i]->duration());
|
||||
|
||||
- base::TimeDelta start_time = ExtractStartTime(stream);
|
||||
+ base::TimeDelta start_time =
|
||||
+ ExtractStartTime(stream, streams_[i]->first_dts());
|
||||
|
||||
// Note: This value is used for seeking, so we must take the true value and
|
||||
// not the one possibly clamped to zero below.
|
||||
@@ -1591,7 +1599,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::Find
|
||||
for (const auto& stream : streams_) {
|
||||
if (!stream || stream->IsEnabled() != enabled)
|
||||
continue;
|
||||
- if (av_stream_get_first_dts(stream->av_stream()) == kInvalidPTSMarker)
|
||||
+ if (stream->first_dts() == AV_NOPTS_VALUE)
|
||||
continue;
|
||||
if (!lowest_start_time_stream ||
|
||||
stream->start_time() < lowest_start_time_stream->start_time()) {
|
||||
@@ -1612,7 +1620,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::Find
|
||||
if (stream->type() != DemuxerStream::VIDEO)
|
||||
continue;
|
||||
|
||||
- if (av_stream_get_first_dts(stream->av_stream()) == kInvalidPTSMarker)
|
||||
+ if (stream->first_dts() == AV_NOPTS_VALUE)
|
||||
continue;
|
||||
|
||||
if (!stream->IsEnabled())
|
||||
@@ -1926,4 +1934,4 @@ void FFmpegDemuxer::RunPendingSeekCB(Pip
|
||||
std::move(pending_seek_cb_).Run(status);
|
||||
}
|
||||
|
||||
-} // namespace media
|
||||
+} // namespace media
|
||||
\ Kein Zeilenumbruch am Dateiende.
|
||||
diff -up chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.h.first_dts chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.h
|
||||
--- chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.h.first_dts 2022-12-14 01:39:52.000000000 +0100
|
||||
+++ chromium-108.0.5359.124/media/filters/ffmpeg_demuxer.h 2022-12-31 15:30:52.924006403 +0100
|
||||
@@ -145,6 +145,8 @@ class MEDIA_EXPORT FFmpegDemuxerStream :
|
||||
base::TimeDelta start_time() const { return start_time_; }
|
||||
void set_start_time(base::TimeDelta time) { start_time_ = time; }
|
||||
|
||||
+ int64_t first_dts() const { return first_dts_; }
|
||||
+
|
||||
private:
|
||||
friend class FFmpegDemuxerTest;
|
||||
|
||||
@@ -202,6 +204,7 @@ class MEDIA_EXPORT FFmpegDemuxerStream :
|
||||
bool fixup_chained_ogg_;
|
||||
|
||||
int num_discarded_packet_warnings_;
|
||||
+ int64_t first_dts_;
|
||||
int64_t last_packet_pos_;
|
||||
int64_t last_packet_dts_;
|
||||
};
|
@ -0,0 +1,32 @@
|
||||
diff -up chromium-108.0.5359.124/chrome/common/chrome_paths.cc.widevine-other-locations chromium-108.0.5359.124/chrome/common/chrome_paths.cc
|
||||
--- chromium-108.0.5359.124/chrome/common/chrome_paths.cc.widevine-other-locations 2023-01-02 11:10:03.951330305 +0100
|
||||
+++ chromium-108.0.5359.124/chrome/common/chrome_paths.cc 2023-01-02 13:42:26.781022150 +0100
|
||||
@@ -319,6 +319,16 @@ bool PathProvider(int key, base::FilePat
|
||||
|
||||
#if BUILDFLAG(ENABLE_WIDEVINE)
|
||||
case chrome::DIR_BUNDLED_WIDEVINE_CDM:
|
||||
+ base::PathService::Get(base::DIR_HOME, &cur);
|
||||
+ cur = cur.Append(FILE_PATH_LITERAL(".config/chromium/WidevineCdm"));
|
||||
+ if (base::PathExists(cur)) {
|
||||
+ break;
|
||||
+ }
|
||||
+ // Yes, this has an arch hardcoded in the path, but at this time, it is the only place to find libwidevinecdm.so
|
||||
+ if (base::PathExists(base::FilePath(FILE_PATH_LITERAL("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so")))) {
|
||||
+ cur = base::FilePath(FILE_PATH_LITERAL("/opt/google/chrome/WidevineCdm"));
|
||||
+ break;
|
||||
+ }
|
||||
if (!GetComponentDirectory(&cur))
|
||||
return false;
|
||||
cur = cur.AppendASCII(kWidevineCdmBaseDirectory);
|
||||
diff -up chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn.widevine-other-locations chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn
|
||||
--- chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn.widevine-other-locations 2023-01-02 11:10:45.953114153 +0100
|
||||
+++ chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn 2023-01-02 11:10:45.953114153 +0100
|
||||
@@ -22,7 +22,7 @@ buildflag_header("buildflags") {
|
||||
|
||||
flags = [
|
||||
"ENABLE_WIDEVINE=$enable_widevine",
|
||||
- "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm",
|
||||
+ "BUNDLE_WIDEVINE_CDM=true",
|
||||
"ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component",
|
||||
"ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM=$enable_media_foundation_widevine_cdm",
|
||||
]
|
Loading…
Reference in new issue