- 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