Index: webrtc/media/base/videoadapter.h |
diff --git a/webrtc/media/base/videoadapter.h b/webrtc/media/base/videoadapter.h |
index 50b7d4c4be19253bb2fa74d996f594a590b9b38a..2db0ada271324f5b61350ef0ca508d4d8856fdbe 100644 |
--- a/webrtc/media/base/videoadapter.h |
+++ b/webrtc/media/base/videoadapter.h |
@@ -32,12 +32,23 @@ class VideoAdapter { |
// interval. |
void SetExpectedInputFrameInterval(int64_t interval); |
- // Return the adapted resolution given the input resolution. The returned |
- // resolution will be 0x0 if the frame should be dropped. |
- VideoFormat AdaptFrameResolution(int in_width, int in_height); |
+ // Return the adapted resolution given the input resolution. The input |
+ // resolution should first be cropped to the specified resolution, and then |
+ // scaled to the final output resolution. The output resolution will be 0x0 if |
+ // the frame should be dropped. |
+ void AdaptFrameResolution(int in_width, |
+ int in_height, |
+ int* cropped_width, |
+ int* cropped_height, |
+ int* out_width, |
+ int* out_height); |
// Requests the output frame size and frame interval from |
- // |AdaptFrameResolution| to not be larger than |format|. |
+ // |AdaptFrameResolution| to not be larger than |format|. Also, the input |
+ // frame size will be cropped to match the requested aspect ratio. The |
+ // requested aspect ratio is orientation agnostic and will be adjusted to |
+ // maintain the input orientation, so it doesn't matter if e.g. 1280x720 or |
+ // 720x1280 is requested. |
void OnOutputFormatRequest(const VideoFormat& format); |
// Requests the output frame size from |AdaptFrameResolution| to not have |
@@ -46,28 +57,22 @@ class VideoAdapter { |
void OnResolutionRequest(rtc::Optional<int> max_pixel_count, |
rtc::Optional<int> max_pixel_count_step_up); |
- const VideoFormat& input_format() const; |
- |
private: |
- void SetInputFormat(const VideoFormat& format); |
- bool Adapt(int max_num_pixels, int max_pixel_count_step_up); |
- |
- VideoFormat input_format_; |
- VideoFormat output_format_; |
- int output_num_pixels_; |
int frames_in_; // Number of input frames. |
int frames_out_; // Number of output frames. |
int frames_scaled_; // Number of frames scaled. |
int adaption_changes_; // Number of changes in scale factor. |
int previous_width_; // Previous adapter output width. |
int previous_height_; // Previous adapter output height. |
- int64_t interval_next_frame_; |
+ int input_interval_ GUARDED_BY(critical_section_); |
+ int64_t interval_next_frame_ GUARDED_BY(critical_section_); |
// Max number of pixels requested via calls to OnOutputFormatRequest, |
// OnResolutionRequest respectively. |
// The adapted output format is the minimum of these. |
- int format_request_max_pixel_count_; |
- int resolution_request_max_pixel_count_; |
+ rtc::Optional<VideoFormat> requested_format_ GUARDED_BY(critical_section_); |
+ int resolution_request_max_pixel_count_ GUARDED_BY(critical_section_); |
+ int resolution_request_max_pixel_count_step_up_ GUARDED_BY(critical_section_); |
// The critical section to protect the above variables. |
rtc::CriticalSection critical_section_; |