Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: webrtc/api/androidvideotracksource.cc

Issue 2328333002: New class AdaptedVideoTrackSource. (Closed)
Patch Set: Comment improvement. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/androidvideotracksource.h ('k') | webrtc/media/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/androidvideotracksource.cc
diff --git a/webrtc/api/androidvideotracksource.cc b/webrtc/api/androidvideotracksource.cc
index f0bd26a510e647d0156193f8e59e91ccbdf44f78..15e622af3aa47bcf52f0bf012985d27b9a732acd 100644
--- a/webrtc/api/androidvideotracksource.cc
+++ b/webrtc/api/androidvideotracksource.cc
@@ -12,8 +12,6 @@
#include <utility>
-#include "third_party/libyuv/include/libyuv/rotate.h"
-
namespace webrtc {
AndroidVideoTrackSource::AndroidVideoTrackSource(rtc::Thread* signaling_thread,
@@ -27,21 +25,9 @@ AndroidVideoTrackSource::AndroidVideoTrackSource(rtc::Thread* signaling_thread,
j_egl_context)),
is_screencast_(is_screencast) {
LOG(LS_INFO) << "AndroidVideoTrackSource ctor";
- worker_thread_checker_.DetachFromThread();
camera_thread_checker_.DetachFromThread();
}
-bool AndroidVideoTrackSource::GetStats(AndroidVideoTrackSource::Stats* stats) {
- rtc::CritScope lock(&stats_crit_);
-
- if (!stats_) {
- return false;
- }
-
- *stats = *stats_;
- return true;
-}
-
void AndroidVideoTrackSource::SetState(SourceState state) {
if (rtc::Thread::Current() != signaling_thread_) {
invoker_.AsyncInvoke<void>(
@@ -56,34 +42,6 @@ void AndroidVideoTrackSource::SetState(SourceState state) {
}
}
-void AndroidVideoTrackSource::AddOrUpdateSink(
- rtc::VideoSinkInterface<cricket::VideoFrame>* sink,
- const rtc::VideoSinkWants& wants) {
- RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
-
- broadcaster_.AddOrUpdateSink(sink, wants);
- OnSinkWantsChanged(broadcaster_.wants());
-}
-
-void AndroidVideoTrackSource::RemoveSink(
- rtc::VideoSinkInterface<cricket::VideoFrame>* sink) {
- RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
-
- broadcaster_.RemoveSink(sink);
- OnSinkWantsChanged(broadcaster_.wants());
-}
-
-void AndroidVideoTrackSource::OnSinkWantsChanged(
- const rtc::VideoSinkWants& wants) {
- {
- rtc::CritScope lock(&apply_rotation_crit_);
- apply_rotation_ = wants.rotation_applied;
- }
-
- video_adapter_.OnResolutionRequest(wants.max_pixel_count,
- wants.max_pixel_count_step_up);
-}
-
void AndroidVideoTrackSource::OnByteBufferFrameCaptured(const void* frame_data,
int length,
int width,
@@ -94,17 +52,20 @@ void AndroidVideoTrackSource::OnByteBufferFrameCaptured(const void* frame_data,
RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 ||
rotation == 270);
+ int64_t camera_time_us = timestamp_ns / rtc::kNumNanosecsPerMicrosec;
+ int64_t translated_camera_time_us =
+ timestamp_aligner_.TranslateTimestamp(camera_time_us, rtc::TimeMicros());
+
int adapted_width;
int adapted_height;
int crop_width;
int crop_height;
int crop_x;
int crop_y;
- int64_t translated_camera_time_us;
- if (!AdaptFrame(width, height, timestamp_ns / rtc::kNumNanosecsPerMicrosec,
+ if (!AdaptFrame(width, height, camera_time_us,
&adapted_width, &adapted_height, &crop_width, &crop_height,
- &crop_x, &crop_y, &translated_camera_time_us)) {
+ &crop_x, &crop_y)) {
return;
}
@@ -134,33 +95,9 @@ void AndroidVideoTrackSource::OnByteBufferFrameCaptured(const void* frame_data,
buffer->MutableDataU(), buffer->StrideU(),
buffer->width(), buffer->height());
- // Applying rotation is only supported for legacy reasons, and the performance
- // for this path is not critical.
- rtc::CritScope lock(&apply_rotation_crit_);
- if (apply_rotation_ && rotation != 0) {
- rtc::scoped_refptr<I420Buffer> rotated_buffer =
- rotation == 180 ? I420Buffer::Create(buffer->width(), buffer->height())
- : I420Buffer::Create(buffer->height(), buffer->width());
-
- libyuv::I420Rotate(
- buffer->DataY(), buffer->StrideY(),
- buffer->DataU(), buffer->StrideU(),
- buffer->DataV(), buffer->StrideV(),
- rotated_buffer->MutableDataY(), rotated_buffer->StrideY(),
- rotated_buffer->MutableDataU(), rotated_buffer->StrideU(),
- rotated_buffer->MutableDataV(), rotated_buffer->StrideV(),
- buffer->width(), buffer->height(),
- static_cast<libyuv::RotationMode>(rotation));
-
- buffer = rotated_buffer;
- }
-
OnFrame(cricket::WebRtcVideoFrame(
- buffer,
- apply_rotation_ ? webrtc::kVideoRotation_0
- : static_cast<webrtc::VideoRotation>(rotation),
- translated_camera_time_us, 0),
- width, height);
+ buffer, static_cast<webrtc::VideoRotation>(rotation),
+ translated_camera_time_us, 0));
}
void AndroidVideoTrackSource::OnTextureFrameCaptured(
@@ -173,17 +110,20 @@ void AndroidVideoTrackSource::OnTextureFrameCaptured(
RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 ||
rotation == 270);
+ int64_t camera_time_us = timestamp_ns / rtc::kNumNanosecsPerMicrosec;
+ int64_t translated_camera_time_us =
+ timestamp_aligner_.TranslateTimestamp(camera_time_us, rtc::TimeMicros());
+
int adapted_width;
int adapted_height;
int crop_width;
int crop_height;
int crop_x;
int crop_y;
- int64_t translated_camera_time_us;
- if (!AdaptFrame(width, height, timestamp_ns / rtc::kNumNanosecsPerMicrosec,
+ if (!AdaptFrame(width, height, camera_time_us,
&adapted_width, &adapted_height, &crop_width, &crop_height,
- &crop_x, &crop_y, &translated_camera_time_us)) {
+ &crop_x, &crop_y)) {
surface_texture_helper_->ReturnTextureFrame();
return;
}
@@ -195,8 +135,11 @@ void AndroidVideoTrackSource::OnTextureFrameCaptured(
crop_x / static_cast<float>(width),
crop_y / static_cast<float>(height));
- rtc::CritScope lock(&apply_rotation_crit_);
- if (apply_rotation_) {
+ // Make a local copy, since value of apply_rotation() may change
+ // under our feet.
+ bool do_rotate = apply_rotation();
+
+ if (do_rotate) {
if (rotation == webrtc::kVideoRotation_90 ||
rotation == webrtc::kVideoRotation_270) {
std::swap(adapted_width, adapted_height);
@@ -208,21 +151,9 @@ void AndroidVideoTrackSource::OnTextureFrameCaptured(
surface_texture_helper_->CreateTextureFrame(
adapted_width, adapted_height,
webrtc_jni::NativeHandleImpl(handle.oes_texture_id, matrix)),
- apply_rotation_ ? webrtc::kVideoRotation_0
- : static_cast<webrtc::VideoRotation>(rotation),
- translated_camera_time_us, 0),
- width, height);
-}
-
-void AndroidVideoTrackSource::OnFrame(const cricket::VideoFrame& frame,
- int width,
- int height) {
- {
- rtc::CritScope lock(&stats_crit_);
- stats_ = rtc::Optional<AndroidVideoTrackSource::Stats>({width, height});
- }
-
- broadcaster_.OnFrame(frame);
+ do_rotate ? webrtc::kVideoRotation_0
+ : static_cast<webrtc::VideoRotation>(rotation),
+ translated_camera_time_us, 0));
}
void AndroidVideoTrackSource::OnOutputFormatRequest(int width,
@@ -232,39 +163,7 @@ void AndroidVideoTrackSource::OnOutputFormatRequest(int width,
cricket::VideoFormat format(width, height,
cricket::VideoFormat::FpsToInterval(fps), 0);
- video_adapter_.OnOutputFormatRequest(format);
-}
-
-bool AndroidVideoTrackSource::AdaptFrame(int width,
- int height,
- int64_t camera_time_us,
- int* out_width,
- int* out_height,
- int* crop_width,
- int* crop_height,
- int* crop_x,
- int* crop_y,
- int64_t* translated_camera_time_us) {
- RTC_DCHECK(camera_thread_checker_.CalledOnValidThread());
-
- int64_t system_time_us = rtc::TimeMicros();
- *translated_camera_time_us =
- timestamp_aligner_.TranslateTimestamp(camera_time_us, system_time_us);
-
- if (!broadcaster_.frame_wanted()) {
- return false;
- }
-
- if (!video_adapter_.AdaptFrameResolution(
- width, height, camera_time_us * rtc::kNumNanosecsPerMicrosec,
- crop_width, crop_height, out_width, out_height)) {
- // VideoAdapter dropped the frame.
- return false;
- }
- *crop_x = (width - *crop_width) / 2;
- *crop_y = (height - *crop_height) / 2;
-
- return true;
+ video_adapter()->OnOutputFormatRequest(format);
}
} // namespace webrtc
« no previous file with comments | « webrtc/api/androidvideotracksource.h ('k') | webrtc/media/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698