summaryrefslogtreecommitdiff
path: root/chromium/media/filters/ffmpeg_demuxer.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-03-12 09:13:00 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-03-16 09:58:26 +0000
commit03561cae90f1d99b5c54b1ef3be69f10e882b25e (patch)
treecc5f0958e823c044e7ae51cc0117fe51432abe5e /chromium/media/filters/ffmpeg_demuxer.cc
parentfa98118a45f7e169f8846086dc2c22c49a8ba310 (diff)
downloadqtwebengine-chromium-03561cae90f1d99b5c54b1ef3be69f10e882b25e.tar.gz
BASELINE: Update Chromium to 88.0.4324.208
Change-Id: I3ae87d23e4eff4b4a469685658740a213600c667 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/filters/ffmpeg_demuxer.cc')
-rw-r--r--chromium/media/filters/ffmpeg_demuxer.cc81
1 files changed, 41 insertions, 40 deletions
diff --git a/chromium/media/filters/ffmpeg_demuxer.cc b/chromium/media/filters/ffmpeg_demuxer.cc
index d34db63f3ef..fa39c5698ed 100644
--- a/chromium/media/filters/ffmpeg_demuxer.cc
+++ b/chromium/media/filters/ffmpeg_demuxer.cc
@@ -17,7 +17,7 @@
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/numerics/safe_conversions.h"
-#include "base/single_thread_task_runner.h"
+#include "base/sequenced_task_runner.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/sys_byteorder.h"
@@ -343,7 +343,7 @@ FFmpegDemuxerStream::~FFmpegDemuxerStream() {
}
void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(packet->size);
DCHECK(packet->data);
@@ -462,7 +462,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
}
if (packet_end - header_start < MPEG1AudioStreamParser::kHeaderSize ||
- !MPEG1AudioStreamParser::ParseHeader(nullptr, header_start,
+ !MPEG1AudioStreamParser::ParseHeader(nullptr, nullptr, header_start,
nullptr)) {
LIMITED_MEDIA_LOG(INFO, media_log_, num_discarded_packet_warnings_, 5)
<< "Discarding invalid MP3 packet, ts: "
@@ -663,13 +663,13 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
}
void FFmpegDemuxerStream::SetEndOfStream() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
end_of_stream_ = true;
SatisfyPendingRead();
}
void FFmpegDemuxerStream::FlushBuffers(bool preserve_packet_position) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(preserve_packet_position || !read_cb_)
<< "There should be no pending read";
@@ -697,7 +697,7 @@ void FFmpegDemuxerStream::Abort() {
}
void FFmpegDemuxerStream::Stop() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
buffer_queue_.Clear();
demuxer_ = nullptr;
stream_ = nullptr;
@@ -709,17 +709,17 @@ void FFmpegDemuxerStream::Stop() {
}
DemuxerStream::Type FFmpegDemuxerStream::type() const {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
return type_;
}
DemuxerStream::Liveness FFmpegDemuxerStream::liveness() const {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
return liveness_;
}
void FFmpegDemuxerStream::Read(ReadCB read_cb) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
CHECK(!read_cb_) << "Overlapping reads are not supported";
read_cb_ = BindToCurrentLoop(std::move(read_cb));
@@ -748,7 +748,7 @@ void FFmpegDemuxerStream::Read(ReadCB read_cb) {
}
void FFmpegDemuxerStream::EnableBitstreamConverter() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
InitBitstreamConverter();
@@ -806,26 +806,26 @@ void FFmpegDemuxerStream::InitBitstreamConverter() {
bool FFmpegDemuxerStream::SupportsConfigChanges() { return false; }
AudioDecoderConfig FFmpegDemuxerStream::audio_decoder_config() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK_EQ(type_, AUDIO);
DCHECK(audio_config_.get());
return *audio_config_;
}
VideoDecoderConfig FFmpegDemuxerStream::video_decoder_config() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK_EQ(type_, VIDEO);
DCHECK(video_config_.get());
return *video_config_;
}
bool FFmpegDemuxerStream::IsEnabled() const {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
return is_enabled_;
}
void FFmpegDemuxerStream::SetEnabled(bool enabled, base::TimeDelta timestamp) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(demuxer_);
DCHECK(demuxer_->ffmpeg_task_runner());
if (enabled == is_enabled_)
@@ -845,7 +845,7 @@ void FFmpegDemuxerStream::SetEnabled(bool enabled, base::TimeDelta timestamp) {
}
void FFmpegDemuxerStream::SetLiveness(Liveness liveness) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK_EQ(liveness_, LIVENESS_UNKNOWN);
liveness_ = liveness;
}
@@ -855,7 +855,7 @@ Ranges<base::TimeDelta> FFmpegDemuxerStream::GetBufferedRanges() const {
}
void FFmpegDemuxerStream::SatisfyPendingRead() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
if (read_cb_) {
if (!buffer_queue_.IsEmpty()) {
std::move(read_cb_).Run(DemuxerStream::kOk, buffer_queue_.Pop());
@@ -901,7 +901,7 @@ base::TimeDelta FFmpegDemuxerStream::ConvertStreamTimestamp(
// FFmpegDemuxer
//
FFmpegDemuxer::FFmpegDemuxer(
- const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ const scoped_refptr<base::SequencedTaskRunner>& task_runner,
DataSource* data_source,
const EncryptedMediaInitDataCB& encrypted_media_init_data_cb,
MediaTracksUpdatedCB media_tracks_updated_cb,
@@ -944,7 +944,7 @@ std::string FFmpegDemuxer::GetDisplayName() const {
void FFmpegDemuxer::Initialize(DemuxerHost* host,
PipelineStatusCallback init_cb) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
host_ = host;
weak_this_ = cancel_pending_seek_factory_.GetWeakPtr();
init_cb_ = std::move(init_cb);
@@ -952,7 +952,7 @@ void FFmpegDemuxer::Initialize(DemuxerHost* host,
// Give a WeakPtr to BlockingUrlProtocol since we'll need to release it on the
// blocking thread pool.
url_protocol_ = std::make_unique<BlockingUrlProtocol>(
- data_source_, BindToCurrentLoop(base::Bind(
+ data_source_, BindToCurrentLoop(base::BindRepeating(
&FFmpegDemuxer::OnDataSourceError, weak_this_)));
glue_ = std::make_unique<FFmpegGlue>(url_protocol_.get());
AVFormatContext* format_context = glue_->format_context();
@@ -978,7 +978,7 @@ void FFmpegDemuxer::Initialize(DemuxerHost* host,
}
void FFmpegDemuxer::AbortPendingReads() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
// If Stop() has been called, then drop this call.
if (stopped_)
@@ -1012,7 +1012,7 @@ void FFmpegDemuxer::AbortPendingReads() {
}
void FFmpegDemuxer::Stop() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
if (init_cb_)
RunInitCB(PIPELINE_ERROR_ABORT);
@@ -1043,7 +1043,7 @@ void FFmpegDemuxer::Stop() {
void FFmpegDemuxer::StartWaitingForSeek(base::TimeDelta seek_time) {}
void FFmpegDemuxer::CancelPendingSeek(base::TimeDelta seek_time) {
- if (task_runner_->BelongsToCurrentThread()) {
+ if (task_runner_->RunsTasksInCurrentSequence()) {
AbortPendingReads();
} else {
// Don't use GetWeakPtr() here since we are on the wrong thread.
@@ -1054,7 +1054,7 @@ void FFmpegDemuxer::CancelPendingSeek(base::TimeDelta seek_time) {
}
void FFmpegDemuxer::Seek(base::TimeDelta time, PipelineStatusCallback cb) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(!pending_seek_cb_);
TRACE_EVENT_ASYNC_BEGIN0("media", "FFmpegDemuxer::Seek", this);
pending_seek_cb_ = std::move(cb);
@@ -1064,7 +1064,7 @@ void FFmpegDemuxer::Seek(base::TimeDelta time, PipelineStatusCallback cb) {
void FFmpegDemuxer::SeekInternal(base::TimeDelta time,
base::OnceClosure seek_cb) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
// FFmpeg requires seeks to be adjusted according to the lowest starting time.
// Since EnqueuePacket() rebased negative timestamps by the start time, we
@@ -1120,7 +1120,7 @@ base::Time FFmpegDemuxer::GetTimelineOffset() const {
}
std::vector<DemuxerStream*> FFmpegDemuxer::GetAllStreams() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
std::vector<DemuxerStream*> result;
// Put enabled streams at the beginning of the list so that
// MediaResource::GetFirstStream returns the enabled stream if there is one.
@@ -1174,12 +1174,12 @@ void FFmpegDemuxer::OnEncryptedMediaInitData(
}
void FFmpegDemuxer::NotifyCapacityAvailable() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
ReadFrameIfNeeded();
}
void FFmpegDemuxer::NotifyBufferingChanged() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
Ranges<base::TimeDelta> buffered;
bool initialized_buffered_ranges = false;
for (const auto& stream : streams_) {
@@ -1226,7 +1226,7 @@ static int CalculateBitrate(AVFormatContext* format_context,
}
void FFmpegDemuxer::OnOpenContextDone(bool result) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
if (stopped_) {
MEDIA_LOG(ERROR, media_log_) << GetDisplayName() << ": bad state";
RunInitCB(PIPELINE_ERROR_ABORT);
@@ -1258,7 +1258,7 @@ void FFmpegDemuxer::OnOpenContextDone(bool result) {
}
void FFmpegDemuxer::OnFindStreamInfoDone(int result) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
if (stopped_ || !data_source_) {
MEDIA_LOG(ERROR, media_log_) << GetDisplayName() << ": bad state";
RunInitCB(PIPELINE_ERROR_ABORT);
@@ -1640,7 +1640,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::FindPreferredStreamForSeeking(
}
void FFmpegDemuxer::OnSeekFrameSuccess() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(pending_seek_cb_);
if (stopped_) {
@@ -1667,7 +1667,7 @@ void FFmpegDemuxer::FindAndEnableProperTracks(
base::TimeDelta curr_time,
DemuxerStream::Type track_type,
TrackChangeCB change_completed_cb) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
std::set<FFmpegDemuxerStream*> enabled_streams;
for (const auto& id : track_ids) {
@@ -1752,7 +1752,7 @@ void FFmpegDemuxer::OnSelectedVideoTrackChanged(
}
void FFmpegDemuxer::ReadFrameIfNeeded() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
// Make sure we have work to do before reading.
if (stopped_ || !StreamsHaveAvailableCapacity() || pending_read_ ||
@@ -1776,7 +1776,7 @@ void FFmpegDemuxer::ReadFrameIfNeeded() {
}
void FFmpegDemuxer::OnReadFrameDone(ScopedAVPacket packet, int result) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(pending_read_);
pending_read_ = false;
@@ -1847,7 +1847,7 @@ void FFmpegDemuxer::OnReadFrameDone(ScopedAVPacket packet, int result) {
}
bool FFmpegDemuxer::StreamsHaveAvailableCapacity() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
for (const auto& stream : streams_) {
if (stream && stream->IsEnabled() && stream->HasAvailableCapacity())
return true;
@@ -1856,9 +1856,10 @@ bool FFmpegDemuxer::StreamsHaveAvailableCapacity() {
}
bool FFmpegDemuxer::IsMaxMemoryUsageReached() const {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
- size_t memory_left = GetDemuxerMemoryLimit();
+ size_t memory_left =
+ GetDemuxerMemoryLimit(Demuxer::DemuxerTypes::kFFmpegDemuxer);
for (const auto& stream : streams_) {
if (!stream)
continue;
@@ -1872,7 +1873,7 @@ bool FFmpegDemuxer::IsMaxMemoryUsageReached() const {
}
void FFmpegDemuxer::StreamHasEnded() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
for (const auto& stream : streams_) {
if (stream)
stream->SetEndOfStream();
@@ -1891,7 +1892,7 @@ void FFmpegDemuxer::NotifyDemuxerError(PipelineStatus status) {
}
void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
for (const auto& stream : streams_) {
if (stream)
stream->SetLiveness(liveness);
@@ -1899,7 +1900,7 @@ void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) {
}
void FFmpegDemuxer::RunInitCB(PipelineStatus status) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(init_cb_);
TRACE_EVENT_ASYNC_END1("media", "FFmpegDemuxer::Initialize", this, "status",
PipelineStatusToString(status));
@@ -1907,7 +1908,7 @@ void FFmpegDemuxer::RunInitCB(PipelineStatus status) {
}
void FFmpegDemuxer::RunPendingSeekCB(PipelineStatus status) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(task_runner_->RunsTasksInCurrentSequence());
DCHECK(pending_seek_cb_);
TRACE_EVENT_ASYNC_END1("media", "FFmpegDemuxer::Seek", this, "status",
PipelineStatusToString(status));