Commit 2756923f authored by Jose Lopes's avatar Jose Lopes Committed by Commit Bot

media: Migrate ReceiveEncodedFrameCallback to once callback.

This is a once callback because it is run to indicate the completion of
the RequestEncodedFrame method:
* https://cs.chromium.org/chromium/src/media/cast/cast_receiver.h?rcl=dbfabe22380e821376c625ccabce8cc92e1c4b2b&l=43
* https://cs.chromium.org/chromium/src/media/cast/receiver/frame_receiver.h?rcl=dbfabe22380e821376c625ccabce8cc92e1c4b2b&l=62

This callback is placed in a queue by RequestEncodedFrame in:
* https://cs.chromium.org/chromium/src/media/cast/receiver/frame_receiver.cc?rcl=dbfabe22380e821376c625ccabce8cc92e1c4b2b&l=80

And it is extracted from the queue in:
* https://cs.chromium.org/chromium/src/media/cast/receiver/frame_receiver.cc?rcl=dbfabe22380e821376c625ccabce8cc92e1c4b2b&l=281

And passed to EmitOneFrame to be executed once in:
* https://cs.chromium.org/chromium/src/media/cast/receiver/frame_receiver.cc?rcl=dbfabe22380e821376c625ccabce8cc92e1c4b2b&l=301

This is part of the base::Callback migration.

Context: https://cs.chromium.org/chromium/src/docs/callback.md?rcl=9fcc3764aea8f97e9f6de4a9ee61d554e67edcda&l=40

Bug: 714018
Change-Id: Iaaaa1b830c5f8e65a94124233d28614e36c8f1de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2077994
Commit-Queue: Jose Lopes <jabolopes@google.com>
Reviewed-by: default avatarYuri Wiitala <miu@chromium.org>
Reviewed-by: default avatarAlbert J. Wong <ajwong@chromium.org>
Cr-Commit-Position: refs/heads/master@{#747613}
parent d2e6fc9e
...@@ -39,13 +39,6 @@ using VideoFrameDecodedCallback = ...@@ -39,13 +39,6 @@ using VideoFrameDecodedCallback =
base::TimeTicks playout_time, base::TimeTicks playout_time,
bool is_continuous)>; bool is_continuous)>;
// The following callback delivers encoded frame data and metadata. The client
// should examine the |frame_id| field to determine whether any frames have been
// dropped (i.e., frame_id should be incrementing by one each time). Note: A
// NULL pointer can be returned on error.
typedef base::Callback<void(std::unique_ptr<EncodedFrame>)>
ReceiveEncodedFrameCallback;
class CastReceiver { class CastReceiver {
public: public:
static std::unique_ptr<CastReceiver> Create( static std::unique_ptr<CastReceiver> Create(
......
...@@ -74,10 +74,9 @@ FrameReceiver::~FrameReceiver() { ...@@ -74,10 +74,9 @@ FrameReceiver::~FrameReceiver() {
cast_environment_->logger()->Unsubscribe(&event_subscriber_); cast_environment_->logger()->Unsubscribe(&event_subscriber_);
} }
void FrameReceiver::RequestEncodedFrame( void FrameReceiver::RequestEncodedFrame(ReceiveEncodedFrameCallback callback) {
const ReceiveEncodedFrameCallback& callback) {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
frame_request_queue_.push_back(callback); frame_request_queue_.push_back(std::move(callback));
EmitAvailableEncodedFrames(); EmitAvailableEncodedFrames();
} }
...@@ -282,7 +281,7 @@ void FrameReceiver::EmitAvailableEncodedFrames() { ...@@ -282,7 +281,7 @@ void FrameReceiver::EmitAvailableEncodedFrames() {
cast_environment_->PostTask( cast_environment_->PostTask(
CastEnvironment::MAIN, FROM_HERE, CastEnvironment::MAIN, FROM_HERE,
base::BindOnce(&FrameReceiver::EmitOneFrame, AsWeakPtr(), base::BindOnce(&FrameReceiver::EmitOneFrame, AsWeakPtr(),
frame_request_queue_.front(), base::Passed(std::move(*frame_request_queue_.begin())),
base::Passed(&encoded_frame))); base::Passed(&encoded_frame)));
frame_request_queue_.pop_front(); frame_request_queue_.pop_front();
} }
...@@ -296,11 +295,11 @@ void FrameReceiver::EmitAvailableEncodedFramesAfterWaiting() { ...@@ -296,11 +295,11 @@ void FrameReceiver::EmitAvailableEncodedFramesAfterWaiting() {
} }
void FrameReceiver::EmitOneFrame( void FrameReceiver::EmitOneFrame(
const ReceiveEncodedFrameCallback& callback, ReceiveEncodedFrameCallback callback,
std::unique_ptr<EncodedFrame> encoded_frame) const { std::unique_ptr<EncodedFrame> encoded_frame) const {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
if (!callback.is_null()) if (!callback.is_null())
callback.Run(std::move(encoded_frame)); std::move(callback).Run(std::move(encoded_frame));
} }
base::TimeTicks FrameReceiver::GetPlayoutTime(const EncodedFrame& frame) const { base::TimeTicks FrameReceiver::GetPlayoutTime(const EncodedFrame& frame) const {
......
...@@ -32,6 +32,13 @@ namespace cast { ...@@ -32,6 +32,13 @@ namespace cast {
class CastEnvironment; class CastEnvironment;
// The following callback delivers encoded frame data and metadata. The client
// should examine the |frame_id| field to determine whether any frames have been
// dropped (i.e., frame_id should be incrementing by one each time). Note: A
// nullptr can be returned on error.
using ReceiveEncodedFrameCallback =
base::OnceCallback<void(std::unique_ptr<EncodedFrame>)>;
// FrameReceiver receives packets out-of-order while clients make requests for // FrameReceiver receives packets out-of-order while clients make requests for
// complete frames in-order. (A frame consists of one or more packets.) // complete frames in-order. (A frame consists of one or more packets.)
// //
...@@ -63,7 +70,7 @@ class FrameReceiver : public RtpPayloadFeedback { ...@@ -63,7 +70,7 @@ class FrameReceiver : public RtpPayloadFeedback {
// //
// The given |callback| is guaranteed to be run at some point in the future, // The given |callback| is guaranteed to be run at some point in the future,
// except for those requests still enqueued at destruction time. // except for those requests still enqueued at destruction time.
void RequestEncodedFrame(const ReceiveEncodedFrameCallback& callback); void RequestEncodedFrame(ReceiveEncodedFrameCallback callback);
// Called to deliver another packet, possibly a duplicate, and possibly // Called to deliver another packet, possibly a duplicate, and possibly
// out-of-order. Returns true if the parsing of the packet succeeded. // out-of-order. Returns true if the parsing of the packet succeeded.
...@@ -96,7 +103,7 @@ class FrameReceiver : public RtpPayloadFeedback { ...@@ -96,7 +103,7 @@ class FrameReceiver : public RtpPayloadFeedback {
// This method is used by EmitAvailableEncodedFrames() to return to the event // This method is used by EmitAvailableEncodedFrames() to return to the event
// loop, but make sure that FrameReceiver is still alive before the callback // loop, but make sure that FrameReceiver is still alive before the callback
// is run. // is run.
void EmitOneFrame(const ReceiveEncodedFrameCallback& callback, void EmitOneFrame(ReceiveEncodedFrameCallback callback,
std::unique_ptr<EncodedFrame> encoded_frame) const; std::unique_ptr<EncodedFrame> encoded_frame) const;
// Computes the playout time for a frame with the given |rtp_timestamp|. // Computes the playout time for a frame with the given |rtp_timestamp|.
......
...@@ -254,10 +254,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesSkippingWhenAppropriate) { ...@@ -254,10 +254,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesSkippingWhenAppropriate) {
const base::TimeTicks first_frame_capture_time = testing_clock_.NowTicks(); const base::TimeTicks first_frame_capture_time = testing_clock_.NowTicks();
// Enqueue a request for a frame. // Enqueue a request for a frame.
const ReceiveEncodedFrameCallback frame_encoded_callback = receiver_->RequestEncodedFrame(base::BindOnce(
base::Bind(&FakeFrameClient::DeliverEncodedFrame, &FakeFrameClient::DeliverEncodedFrame, base::Unretained(&frame_client_)));
base::Unretained(&frame_client_));
receiver_->RequestEncodedFrame(frame_encoded_callback);
task_runner_->RunTasks(); task_runner_->RunTasks();
EXPECT_EQ(0, frame_client_.number_times_called()); EXPECT_EQ(0, frame_client_.number_times_called());
...@@ -272,7 +270,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesSkippingWhenAppropriate) { ...@@ -272,7 +270,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesSkippingWhenAppropriate) {
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
// Enqueue a second request for a frame, but it should not be fulfilled yet. // Enqueue a second request for a frame, but it should not be fulfilled yet.
receiver_->RequestEncodedFrame(frame_encoded_callback); receiver_->RequestEncodedFrame(base::BindOnce(
&FakeFrameClient::DeliverEncodedFrame, base::Unretained(&frame_client_)));
task_runner_->RunTasks(); task_runner_->RunTasks();
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
...@@ -292,7 +291,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesSkippingWhenAppropriate) { ...@@ -292,7 +291,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesSkippingWhenAppropriate) {
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
// Enqueue a third request for a frame. // Enqueue a third request for a frame.
receiver_->RequestEncodedFrame(frame_encoded_callback); receiver_->RequestEncodedFrame(base::BindOnce(
&FakeFrameClient::DeliverEncodedFrame, base::Unretained(&frame_client_)));
task_runner_->RunTasks(); task_runner_->RunTasks();
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
...@@ -368,10 +368,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesRefusingToSkipAny) { ...@@ -368,10 +368,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesRefusingToSkipAny) {
const base::TimeTicks first_frame_capture_time = testing_clock_.NowTicks(); const base::TimeTicks first_frame_capture_time = testing_clock_.NowTicks();
// Enqueue a request for a frame. // Enqueue a request for a frame.
const ReceiveEncodedFrameCallback frame_encoded_callback = receiver_->RequestEncodedFrame(base::BindOnce(
base::Bind(&FakeFrameClient::DeliverEncodedFrame, &FakeFrameClient::DeliverEncodedFrame, base::Unretained(&frame_client_)));
base::Unretained(&frame_client_));
receiver_->RequestEncodedFrame(frame_encoded_callback);
task_runner_->RunTasks(); task_runner_->RunTasks();
EXPECT_EQ(0, frame_client_.number_times_called()); EXPECT_EQ(0, frame_client_.number_times_called());
...@@ -386,7 +384,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesRefusingToSkipAny) { ...@@ -386,7 +384,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesRefusingToSkipAny) {
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
// Enqueue a second request for a frame, but it should not be fulfilled yet. // Enqueue a second request for a frame, but it should not be fulfilled yet.
receiver_->RequestEncodedFrame(frame_encoded_callback); receiver_->RequestEncodedFrame(base::BindOnce(
&FakeFrameClient::DeliverEncodedFrame, base::Unretained(&frame_client_)));
task_runner_->RunTasks(); task_runner_->RunTasks();
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
...@@ -403,7 +402,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesRefusingToSkipAny) { ...@@ -403,7 +402,8 @@ TEST_F(FrameReceiverTest, ReceivesFramesRefusingToSkipAny) {
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
// Enqueue a third request for a frame. // Enqueue a third request for a frame.
receiver_->RequestEncodedFrame(frame_encoded_callback); receiver_->RequestEncodedFrame(base::BindOnce(
&FakeFrameClient::DeliverEncodedFrame, base::Unretained(&frame_client_)));
task_runner_->RunTasks(); task_runner_->RunTasks();
EXPECT_EQ(1, frame_client_.number_times_called()); EXPECT_EQ(1, frame_client_.number_times_called());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment