webrtc/api
Henrik Boström 825e4f19ce VideoAdapter: Interpret requested resolution as max restriction.
The `requested_resolution` API must not change aspect ratio, example:
- Frame is 60x30
- Requested is 30x30
- We expect 30x15 (not 30x30!) as to maintain aspect ratio.

This bug was previously fixed by making VideoAdapter unaware of the
requested resolution behind a flag: this seemed OK since the
VideoStreamEncoder ultimately decides the resolution, whether or not
the incoming frame is adapted.

But this is not desired for some non-Chrome use cases. This CL attempts
to make both Chrome and non-Chrome use cases happy by implementing the
aspect ratio preserving restriction inside VideoAdapter too.

This allows us to get rid of the "use_standard_requested_resolution"
flag and change the "VideoStreamEncoderResolutionTest" TEST_P to
TEST_F.

Bug: webrtc:366067962, webrtc:366284861
Change-Id: I1dfd10963274c5fdfd18d0f4443b2f209d2e9a4b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/362720
Reviewed-by: Jonas Oreland <jonaso@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43037}
2024-09-17 14:33:26 +00:00
..
adaptation Deprecate rtc::RefCountInterface 2024-06-07 09:47:26 +00:00
audio Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
audio_codecs Delete deprecated AudioDecoderFactory::MakeAudioDecoder 2024-09-04 07:17:59 +00:00
call [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
crypto [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
environment Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
g3doc Reland "Migrate WebRTC documentation to new renderer" 2023-01-31 09:30:04 +00:00
metronome [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
neteq Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
numerics [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
rtc_event_log Include-what-you-use api/rtc_event_log/ 2024-06-16 13:53:56 +00:00
stats Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
task_queue Add missing dependency. 2024-08-07 07:00:06 +00:00
test Ensure <sys/socket.h> is included by using "rtc_base/net_helpers.h". 2024-09-10 14:23:24 +00:00
transport Ensure <netinet/in.h> is included by using rtc_base/ip_address.h. 2024-09-11 08:11:44 +00:00
units Apply include-cleaner to api/units 2024-08-18 06:55:23 +00:00
video VideoAdapter: Interpret requested resolution as max restriction. 2024-09-17 14:33:26 +00:00
video_codecs Export scalability mode helper APIs. 2024-09-17 11:58:08 +00:00
voip Review abseil-in-webrtc for freshness 2024-09-02 16:26:48 +00:00
array_view.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
array_view_unittest.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
async_dns_resolver.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
audio_options.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
audio_options.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
BUILD.gn Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
candidate.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
candidate.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
candidate_unittest.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
create_peerconnection_factory.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
create_peerconnection_factory.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
data_channel_interface.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
data_channel_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
DEPS Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
dtls_transport_interface.cc Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
dtls_transport_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
dtmf_sender_interface.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
enable_media.cc Remove DegradedCall - To be submitted after 2024-07-01 2024-08-30 08:08:39 +00:00
enable_media.h Mark EnableMedia with RTC_EXPORT 2023-10-31 22:15:21 +00:00
enable_media_with_defaults.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
enable_media_with_defaults.h Add EnableMediaWithDefaults to replace SetMediaEngineDefaults 2023-11-01 11:47:59 +00:00
fec_controller.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
fec_controller_override.h
field_trials.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
field_trials.h Add FieldTrialsRegistry that verifies looked up field trials 2022-10-24 09:12:30 +00:00
field_trials_registry.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
field_trials_registry.h Add FieldTrialsRegistry that verifies looked up field trials 2022-10-24 09:12:30 +00:00
field_trials_unittest.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
field_trials_view.h Cleanup FieldTrialView 2023-03-27 17:06:33 +00:00
frame_transformer_factory.cc Pass receive_time through frame transformer 2024-08-02 07:01:33 +00:00
frame_transformer_factory.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
frame_transformer_interface.cc Add passkey to TransformableFrameInterface to prevent external impls 2024-05-16 13:12:51 +00:00
frame_transformer_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
function_view.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
function_view_unittest.cc
ice_transport_factory.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
ice_transport_factory.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
ice_transport_interface.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
jsep.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
jsep.h Deprecate bad signature for CreateSessionDescription. 2024-09-03 12:14:54 +00:00
jsep_ice_candidate.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
jsep_ice_candidate.h Remove RTC_DISALLOW_COPY_AND_ASSIGN more. 2022-01-20 11:00:18 +00:00
jsep_session_description.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
legacy_stats_types.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
legacy_stats_types.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
location.h Implement support for Chrome task origin tracing. #2/4 2023-02-27 13:17:38 +00:00
make_ref_counted.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
media_stream_interface.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
media_stream_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
media_stream_track.h Use string_view to pass track ids to constructors 2022-05-30 10:28:57 +00:00
media_types.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
media_types.h Revert "Define cricket::MediaType in terms of webrtc::MediaType" 2021-05-12 17:06:58 +00:00
network_state_predictor.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
notifier.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
OWNERS Rearrange api/OWNERS to show who's backup OWNERS 2022-10-07 05:56:08 +00:00
packet_socket_factory.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
peer_connection_interface.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
peer_connection_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
priority.h Make PriorityValue constructor explicit 2024-08-01 18:18:04 +00:00
README.md Discourage structs in api 2023-09-07 10:41:49 +00:00
ref_count.h Move RefCountInterface to api/ and webrtc: namespace 2023-10-31 14:02:50 +00:00
ref_counted_base.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtc_error.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtc_error.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtc_error_unittest.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtc_event_log_output.h Include-what-you-use api/rtc_event_log_output* 2024-06-16 15:13:29 +00:00
rtc_event_log_output_file.cc Include-what-you-use api/rtc_event_log_output* 2024-06-16 15:13:29 +00:00
rtc_event_log_output_file.h Include-what-you-use api/rtc_event_log_output* 2024-06-16 15:13:29 +00:00
rtc_event_log_output_file_unittest.cc Include-what-you-use api/rtc_event_log_output* 2024-06-16 15:13:29 +00:00
rtp_headers.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtp_headers.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtp_packet_info.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
rtp_packet_info.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtp_packet_info_unittest.cc Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtp_packet_infos.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
rtp_packet_infos_unittest.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
rtp_packet_sender.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtp_parameters.cc Declare corruption detection URI in RtpExtension 2024-08-29 19:41:16 +00:00
rtp_parameters.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtp_parameters_unittest.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtp_receiver_interface.cc Reland "Run IWYU on some files I intend to work on" 2024-06-05 08:59:49 +00:00
rtp_receiver_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtp_sender_interface.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtp_sender_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
rtp_transceiver_direction.h RtpTransceiverInterface: add header_extensions_to_offer() 2020-03-16 13:16:42 +00:00
rtp_transceiver_interface.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
rtp_transceiver_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
scoped_refptr.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
scoped_refptr_unittest.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
sctp_transport_interface.cc Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
sctp_transport_interface.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
sequence_checker.h [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
sequence_checker_unittest.cc [iwyu][1\n] Applying to api/[a-s]* 2024-06-19 06:19:20 +00:00
set_local_description_observer_interface.h Move all api/ files to use webrtc::RefCountInterface 2023-10-31 15:45:12 +00:00
set_remote_description_observer_interface.h Move all api/ files to use webrtc::RefCountInterface 2023-10-31 15:45:12 +00:00
turn_customizer.h Make header files self contained. 2022-10-08 08:38:36 +00:00
uma_metrics.h Removing enum used for removed UMA metrics WebRTC.PeerConnection.Simulcast.ApplyLocalDescription and WebRTC.PeerConnection.Simulcast.ApplyRemoteDescription 2023-07-13 09:00:52 +00:00
video_track_source_constraints.h Migrate absl::optional to std::optional 2024-09-02 12:16:47 +00:00
video_track_source_proxy_factory.h Apply include-cleaner to api direct files 2024-09-10 08:29:26 +00:00
webrtc_key_value_config.h WebRTC-DeprecateGlobalFieldTrialString/Enabled/ - part 12/inf 2022-03-29 10:14:00 +00:00

How to write code in the api/ directory

Mostly, just follow the regular style guide, but:

  • Note that api/ code is not exempt from the “.h and .cc files come in pairs” rule, so if you declare something in api/path/to/foo.h, it should be defined in api/path/to/foo.cc.
  • Headers in api/ should, if possible, not #include headers outside api/. Its not always possible to avoid this, but be aware that it adds to a small mountain of technical debt that were trying to shrink.
  • .cc files in api/, on the other hand, are free to #include headers outside api/.
  • Avoid structs in api, prefer classes.

The preferred way for api/ code to access non-api/ code is to call it from a .cc file, so that users of our API headers wont transitively #include non-public headers.

For headers in api/ that need to refer to non-public types, forward declarations are often a lesser evil than including non-public header files. The usual rules still apply, though.

.cc files in api/ should preferably be kept reasonably small. If a substantial implementation is needed, consider putting it with our non-public code, and just call it from the api/ .cc file.

Avoid defining api with structs as it makes harder for the api to evolve. Your struct may gain invariant, or change how it represents data. Evolving struct from the api is particular challenging as it is designed to be used in other code bases and thus needs to be updated independetly from its usage. Class with accessors and setters makes such migration safer. See Google C++ style guide for more.

If you need to evolve existent struct in api, prefer first to convert it into a class.