xref: /aosp_15_r20/external/webrtc/modules/video_coding/BUILD.gn (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
2#
3# Use of this source code is governed by a BSD-style license
4# that can be found in the LICENSE file in the root of the source
5# tree. An additional intellectual property rights grant can be found
6# in the file PATENTS.  All contributing project authors may
7# be found in the AUTHORS file in the root of the source tree.
8
9import("//third_party/libaom/options.gni")
10import("../../webrtc.gni")
11
12rtc_library("encoded_frame") {
13  visibility = [ "*" ]
14  sources = [
15    "encoded_frame.cc",
16    "encoded_frame.h",
17  ]
18  deps = [
19    ":codec_globals_headers",
20    ":video_codec_interface",
21    "../../api/video:encoded_image",
22    "../../api/video:video_frame",
23    "../../api/video:video_rtp_headers",
24    "../../modules:module_api_public",
25    "../../modules/rtp_rtcp:rtp_video_header",
26    "../../rtc_base:checks",
27    "../../rtc_base/experiments:alr_experiment",
28    "../../rtc_base/experiments:rtt_mult_experiment",
29    "../../rtc_base/system:rtc_export",
30    "../../system_wrappers",
31  ]
32  absl_deps = [
33    "//third_party/abseil-cpp/absl/types:optional",
34    "//third_party/abseil-cpp/absl/types:variant",
35  ]
36}
37
38rtc_library("chain_diff_calculator") {
39  sources = [
40    "chain_diff_calculator.cc",
41    "chain_diff_calculator.h",
42  ]
43
44  deps = [
45    "../../rtc_base:checks",
46    "../../rtc_base:logging",
47  ]
48  absl_deps = [
49    "//third_party/abseil-cpp/absl/container:inlined_vector",
50    "//third_party/abseil-cpp/absl/types:optional",
51  ]
52}
53
54rtc_library("frame_dependencies_calculator") {
55  sources = [
56    "frame_dependencies_calculator.cc",
57    "frame_dependencies_calculator.h",
58  ]
59
60  deps = [
61    "../../api:array_view",
62    "../../common_video/generic_frame_descriptor",
63    "../../rtc_base:checks",
64    "../../rtc_base:logging",
65  ]
66  absl_deps = [
67    "//third_party/abseil-cpp/absl/algorithm:container",
68    "//third_party/abseil-cpp/absl/container:inlined_vector",
69    "//third_party/abseil-cpp/absl/types:optional",
70  ]
71}
72
73rtc_library("nack_requester") {
74  sources = [
75    "histogram.cc",
76    "histogram.h",
77    "nack_requester.cc",
78    "nack_requester.h",
79  ]
80
81  deps = [
82    "..:module_api",
83    "../../api:field_trials_view",
84    "../../api:sequence_checker",
85    "../../api/task_queue",
86    "../../api/task_queue:pending_task_safety_flag",
87    "../../api/units:time_delta",
88    "../../api/units:timestamp",
89    "../../rtc_base:checks",
90    "../../rtc_base:logging",
91    "../../rtc_base:macromagic",
92    "../../rtc_base:rtc_numerics",
93    "../../rtc_base/experiments:field_trial_parser",
94    "../../rtc_base/task_utils:repeating_task",
95    "../../system_wrappers",
96  ]
97}
98
99rtc_library("packet_buffer") {
100  sources = [
101    "packet_buffer.cc",
102    "packet_buffer.h",
103  ]
104  deps = [
105    ":codec_globals_headers",
106    "../../api:array_view",
107    "../../api:rtp_packet_info",
108    "../../api/units:timestamp",
109    "../../api/video:encoded_image",
110    "../../api/video:video_frame_type",
111    "../../common_video",
112    "../../rtc_base:checks",
113    "../../rtc_base:copy_on_write_buffer",
114    "../../rtc_base:logging",
115    "../../rtc_base:macromagic",
116    "../../rtc_base:mod_ops",
117    "../../rtc_base:rtc_numerics",
118    "../rtp_rtcp:rtp_rtcp_format",
119    "../rtp_rtcp:rtp_video_header",
120  ]
121  absl_deps = [
122    "//third_party/abseil-cpp/absl/base:core_headers",
123    "//third_party/abseil-cpp/absl/types:variant",
124  ]
125}
126
127rtc_library("h264_packet_buffer") {
128  sources = [
129    "h264_packet_buffer.cc",
130    "h264_packet_buffer.h",
131  ]
132  deps = [
133    ":codec_globals_headers",
134    ":packet_buffer",
135    "../../api:array_view",
136    "../../api:rtp_packet_info",
137    "../../api/units:timestamp",
138    "../../api/video:encoded_image",
139    "../../api/video:video_frame_type",
140    "../../common_video",
141    "../../rtc_base:checks",
142    "../../rtc_base:copy_on_write_buffer",
143    "../../rtc_base:logging",
144    "../../rtc_base:rtc_numerics",
145    "../rtp_rtcp:rtp_rtcp_format",
146    "../rtp_rtcp:rtp_video_header",
147  ]
148  absl_deps = [
149    "//third_party/abseil-cpp/absl/base:core_headers",
150    "//third_party/abseil-cpp/absl/types:optional",
151  ]
152}
153
154rtc_library("frame_helpers") {
155  sources = [
156    "frame_helpers.cc",
157    "frame_helpers.h",
158  ]
159  deps = [
160    "../../api/video:encoded_frame",
161    "../../rtc_base:logging",
162  ]
163  absl_deps = [ "//third_party/abseil-cpp/absl/container:inlined_vector" ]
164}
165
166rtc_library("frame_buffer2") {
167  sources = [
168    "frame_buffer2.cc",
169    "frame_buffer2.h",
170  ]
171  deps = [
172    ":frame_helpers",
173    ":video_codec_interface",
174    ":video_coding_utility",
175    "../../api:field_trials_view",
176    "../../api:sequence_checker",
177    "../../api/task_queue",
178    "../../api/units:data_size",
179    "../../api/units:time_delta",
180    "../../api/video:encoded_frame",
181    "../../api/video:encoded_image",
182    "../../api/video:video_rtp_headers",
183    "../../rtc_base:checks",
184    "../../rtc_base:event_tracer",
185    "../../rtc_base:logging",
186    "../../rtc_base:macromagic",
187    "../../rtc_base:rtc_event",
188    "../../rtc_base:rtc_numerics",
189    "../../rtc_base/experiments:field_trial_parser",
190    "../../rtc_base/experiments:rtt_mult_experiment",
191    "../../rtc_base/synchronization:mutex",
192    "../../rtc_base/system:no_unique_address",
193    "../../rtc_base/task_utils:repeating_task",
194    "../../system_wrappers",
195    "timing:inter_frame_delay",
196    "timing:jitter_estimator",
197    "timing:timing_module",
198  ]
199  absl_deps = [ "//third_party/abseil-cpp/absl/container:inlined_vector" ]
200}
201
202rtc_library("video_coding") {
203  visibility = [ "*" ]
204  sources = [
205    "decoder_database.cc",
206    "decoder_database.h",
207    "fec_controller_default.cc",
208    "fec_controller_default.h",
209    "fec_rate_table.h",
210    "frame_object.cc",
211    "frame_object.h",
212    "generic_decoder.cc",
213    "generic_decoder.h",
214    "h264_sprop_parameter_sets.cc",
215    "h264_sprop_parameter_sets.h",
216    "h264_sps_pps_tracker.cc",
217    "h264_sps_pps_tracker.h",
218    "include/video_codec_initializer.h",
219    "internal_defines.h",
220    "loss_notification_controller.cc",
221    "loss_notification_controller.h",
222    "media_opt_util.cc",
223    "media_opt_util.h",
224    "rtp_frame_id_only_ref_finder.cc",
225    "rtp_frame_id_only_ref_finder.h",
226    "rtp_frame_reference_finder.cc",
227    "rtp_frame_reference_finder.h",
228    "rtp_generic_ref_finder.cc",
229    "rtp_generic_ref_finder.h",
230    "rtp_seq_num_only_ref_finder.cc",
231    "rtp_seq_num_only_ref_finder.h",
232    "rtp_vp8_ref_finder.cc",
233    "rtp_vp8_ref_finder.h",
234    "rtp_vp9_ref_finder.cc",
235    "rtp_vp9_ref_finder.h",
236    "video_codec_initializer.cc",
237    "video_receiver2.cc",
238    "video_receiver2.h",
239  ]
240
241  deps = [
242    ":codec_globals_headers",
243    ":encoded_frame",
244    ":frame_helpers",
245    ":video_codec_interface",
246    ":video_coding_utility",
247    ":webrtc_vp8_scalability",
248    ":webrtc_vp9_helpers",
249    "..:module_api",
250    "..:module_api_public",
251    "..:module_fec_api",
252    "../../api:array_view",
253    "../../api:fec_controller_api",
254    "../../api:field_trials_view",
255    "../../api:rtp_headers",
256    "../../api:rtp_packet_info",
257    "../../api:scoped_refptr",
258    "../../api:sequence_checker",
259    "../../api/task_queue",
260    "../../api/units:data_rate",
261    "../../api/units:data_size",
262    "../../api/units:frequency",
263    "../../api/units:time_delta",
264    "../../api/units:timestamp",
265    "../../api/video:builtin_video_bitrate_allocator_factory",
266    "../../api/video:encoded_frame",
267    "../../api/video:encoded_image",
268    "../../api/video:video_adaptation",
269    "../../api/video:video_adaptation",
270    "../../api/video:video_bitrate_allocation",
271    "../../api/video:video_bitrate_allocator",
272    "../../api/video:video_bitrate_allocator_factory",
273    "../../api/video:video_frame",
274    "../../api/video:video_frame_type",
275    "../../api/video:video_rtp_headers",
276    "../../api/video_codecs:video_codecs_api",
277    "../../common_video",
278    "../../rtc_base",
279    "../../rtc_base:checks",
280    "../../rtc_base:copy_on_write_buffer",
281    "../../rtc_base:event_tracer",
282    "../../rtc_base:logging",
283    "../../rtc_base:macromagic",
284    "../../rtc_base:rtc_event",
285    "../../rtc_base:rtc_numerics",
286    "../../rtc_base:safe_conversions",
287    "../../rtc_base:threading",
288    "../../rtc_base:timeutils",
289    "../../rtc_base/experiments:alr_experiment",
290    "../../rtc_base/experiments:field_trial_parser",
291    "../../rtc_base/experiments:min_video_bitrate_experiment",
292    "../../rtc_base/experiments:rate_control_settings",
293    "../../rtc_base/experiments:rtt_mult_experiment",
294    "../../rtc_base/synchronization:mutex",
295    "../../rtc_base/system:no_unique_address",
296    "../../rtc_base/task_utils:repeating_task",
297    "../../rtc_base/third_party/base64",
298    "../../system_wrappers",
299    "../../system_wrappers:field_trial",
300    "../../system_wrappers:metrics",
301    "../../video/config:encoder_config",
302    "../rtp_rtcp",
303    "../rtp_rtcp:rtp_rtcp_format",
304    "../rtp_rtcp:rtp_video_header",
305    "codecs/av1:av1_svc_config",
306    "svc:scalability_mode_util",
307    "timing:inter_frame_delay",
308    "timing:jitter_estimator",
309    "timing:rtt_filter",
310    "timing:timing_module",
311  ]
312  absl_deps = [
313    "//third_party/abseil-cpp/absl/algorithm:container",
314    "//third_party/abseil-cpp/absl/base:core_headers",
315    "//third_party/abseil-cpp/absl/container:inlined_vector",
316    "//third_party/abseil-cpp/absl/types:optional",
317    "//third_party/abseil-cpp/absl/types:variant",
318  ]
319}
320
321rtc_library("video_codec_interface") {
322  visibility = [ "*" ]
323  sources = [
324    "include/video_codec_interface.cc",
325    "include/video_codec_interface.h",
326    "include/video_coding_defines.h",
327    "include/video_error_codes.h",
328    "video_coding_defines.cc",
329  ]
330  deps = [
331    ":codec_globals_headers",
332    "../../api/video:video_frame",
333    "../../api/video:video_rtp_headers",
334    "../../api/video_codecs:video_codecs_api",
335    "../../common_video",
336    "../../common_video/generic_frame_descriptor",
337    "../../rtc_base/system:rtc_export",
338  ]
339  absl_deps = [
340    "//third_party/abseil-cpp/absl/base:core_headers",
341    "//third_party/abseil-cpp/absl/types:optional",
342  ]
343}
344
345rtc_library("video_coding_legacy") {
346  visibility = [ ":video_coding_unittests" ]
347  sources = [
348    "decoding_state.cc",
349    "decoding_state.h",
350    "event_wrapper.cc",
351    "event_wrapper.h",
352    "frame_buffer.cc",
353    "frame_buffer.h",
354    "include/video_coding.h",
355    "jitter_buffer.cc",
356    "jitter_buffer.h",
357    "jitter_buffer_common.h",
358    "packet.cc",
359    "packet.h",
360    "receiver.cc",
361    "receiver.h",
362    "session_info.cc",
363    "session_info.h",
364    "video_coding_impl.cc",
365    "video_coding_impl.h",
366    "video_receiver.cc",
367  ]
368  deps = [
369    ":codec_globals_headers",
370    ":encoded_frame",
371    ":video_codec_interface",
372    ":video_coding",
373    "..:module_api",
374    "..:module_api_public",
375    "../../api:field_trials_view",
376    "../../api:rtp_headers",
377    "../../api:rtp_packet_info",
378    "../../api:sequence_checker",
379    "../../api/transport:field_trial_based_config",
380    "../../api/units:timestamp",
381    "../../api/video:encoded_image",
382    "../../api/video:video_frame",
383    "../../api/video:video_frame_type",
384    "../../api/video:video_rtp_headers",
385    "../../api/video_codecs:video_codecs_api",
386    "../../common_video",
387    "../../modules/rtp_rtcp:rtp_video_header",
388    "../../rtc_base:checks",
389    "../../rtc_base:event_tracer",
390    "../../rtc_base:logging",
391    "../../rtc_base:macromagic",
392    "../../rtc_base:one_time_event",
393    "../../rtc_base:rtc_event",
394    "../../rtc_base:safe_conversions",
395    "../../rtc_base/memory:always_valid_pointer",
396    "../../rtc_base/synchronization:mutex",
397    "../../system_wrappers",
398    "../rtp_rtcp:rtp_rtcp_format",
399    "../rtp_rtcp:rtp_video_header",
400    "timing:inter_frame_delay",
401    "timing:jitter_estimator",
402    "timing:timing_module",
403  ]
404  absl_deps = [
405    "//third_party/abseil-cpp/absl/memory",
406    "//third_party/abseil-cpp/absl/types:optional",
407    "//third_party/abseil-cpp/absl/types:variant",
408  ]
409}
410
411rtc_source_set("codec_globals_headers") {
412  visibility = [ "*" ]
413  sources = [
414    "codecs/h264/include/h264_globals.h",
415    "codecs/interface/common_constants.h",
416    "codecs/vp8/include/vp8_globals.h",
417    "codecs/vp9/include/vp9_globals.h",
418  ]
419
420  deps = [ "../../rtc_base:checks" ]
421}
422
423rtc_library("video_coding_utility") {
424  visibility = [ "*" ]
425  sources = [
426    "utility/bandwidth_quality_scaler.cc",
427    "utility/bandwidth_quality_scaler.h",
428    "utility/decoded_frames_history.cc",
429    "utility/decoded_frames_history.h",
430    "utility/frame_dropper.cc",
431    "utility/frame_dropper.h",
432    "utility/framerate_controller_deprecated.cc",
433    "utility/framerate_controller_deprecated.h",
434    "utility/ivf_defines.h",
435    "utility/ivf_file_reader.cc",
436    "utility/ivf_file_reader.h",
437    "utility/ivf_file_writer.cc",
438    "utility/ivf_file_writer.h",
439    "utility/qp_parser.cc",
440    "utility/qp_parser.h",
441    "utility/quality_scaler.cc",
442    "utility/quality_scaler.h",
443    "utility/simulcast_rate_allocator.cc",
444    "utility/simulcast_rate_allocator.h",
445    "utility/simulcast_utility.cc",
446    "utility/simulcast_utility.h",
447    "utility/vp8_constants.h",
448    "utility/vp8_header_parser.cc",
449    "utility/vp8_header_parser.h",
450    "utility/vp9_constants.h",
451    "utility/vp9_uncompressed_header_parser.cc",
452    "utility/vp9_uncompressed_header_parser.h",
453  ]
454
455  deps = [
456    ":video_codec_interface",
457    "../../api:array_view",
458    "../../api:field_trials_view",
459    "../../api:scoped_refptr",
460    "../../api:sequence_checker",
461    "../../api/units:time_delta",
462    "../../api/video:encoded_frame",
463    "../../api/video:encoded_image",
464    "../../api/video:video_adaptation",
465    "../../api/video:video_bitrate_allocation",
466    "../../api/video:video_bitrate_allocator",
467    "../../api/video:video_codec_constants",
468    "../../api/video:video_frame",
469    "../../api/video_codecs:video_codecs_api",
470    "../../common_video",
471    "../../modules/rtp_rtcp",
472    "../../rtc_base:bitstream_reader",
473    "../../rtc_base:checks",
474    "../../rtc_base:logging",
475    "../../rtc_base:rate_statistics",
476    "../../rtc_base:refcount",
477    "../../rtc_base:rtc_numerics",
478    "../../rtc_base:stringutils",
479    "../../rtc_base:timeutils",
480    "../../rtc_base:weak_ptr",
481    "../../rtc_base/experiments:bandwidth_quality_scaler_settings",
482    "../../rtc_base/experiments:encoder_info_settings",
483    "../../rtc_base/experiments:quality_scaler_settings",
484    "../../rtc_base/experiments:quality_scaling_experiment",
485    "../../rtc_base/experiments:rate_control_settings",
486    "../../rtc_base/experiments:stable_target_rate_experiment",
487    "../../rtc_base/synchronization:mutex",
488    "../../rtc_base/system:arch",
489    "../../rtc_base/system:file_wrapper",
490    "../../rtc_base/system:no_unique_address",
491    "../../rtc_base/task_utils:repeating_task",
492    "../../system_wrappers:field_trial",
493    "../rtp_rtcp:rtp_rtcp_format",
494  ]
495  absl_deps = [
496    "//third_party/abseil-cpp/absl/numeric:bits",
497    "//third_party/abseil-cpp/absl/strings:strings",
498    "//third_party/abseil-cpp/absl/types:optional",
499  ]
500}
501
502rtc_library("webrtc_h264") {
503  visibility = [ "*" ]
504  sources = [
505    "codecs/h264/h264.cc",
506    "codecs/h264/h264_color_space.cc",
507    "codecs/h264/h264_color_space.h",
508    "codecs/h264/h264_decoder_impl.cc",
509    "codecs/h264/h264_decoder_impl.h",
510    "codecs/h264/h264_encoder_impl.cc",
511    "codecs/h264/h264_encoder_impl.h",
512    "codecs/h264/include/h264.h",
513  ]
514
515  defines = []
516  deps = [
517    ":video_codec_interface",
518    ":video_coding_utility",
519    "../../api/video:video_frame",
520    "../../api/video:video_frame_i010",
521    "../../api/video:video_rtp_headers",
522    "../../api/video_codecs:scalability_mode",
523    "../../api/video_codecs:video_codecs_api",
524    "../../common_video",
525    "../../media:rtc_media_base",
526    "../../rtc_base",
527    "../../rtc_base:checks",
528    "../../rtc_base:event_tracer",
529    "../../rtc_base:logging",
530    "../../rtc_base:timeutils",
531    "../../rtc_base/system:rtc_export",
532    "../../system_wrappers:field_trial",
533    "../../system_wrappers:metrics",
534    "svc:scalability_structures",
535    "svc:scalable_video_controller",
536    "//third_party/libyuv",
537  ]
538  absl_deps = [
539    "//third_party/abseil-cpp/absl/container:inlined_vector",
540    "//third_party/abseil-cpp/absl/strings",
541    "//third_party/abseil-cpp/absl/types:optional",
542  ]
543
544  if (rtc_use_h264) {
545    deps += [
546      "//third_party/ffmpeg",
547      "//third_party/openh264:encoder",
548    ]
549    if (!build_with_mozilla) {
550      deps += [ "../../media:rtc_media_base" ]
551    }
552  }
553}
554
555rtc_library("webrtc_multiplex") {
556  sources = [
557    "codecs/multiplex/augmented_video_frame_buffer.cc",
558    "codecs/multiplex/include/augmented_video_frame_buffer.h",
559    "codecs/multiplex/include/multiplex_decoder_adapter.h",
560    "codecs/multiplex/include/multiplex_encoder_adapter.h",
561    "codecs/multiplex/multiplex_decoder_adapter.cc",
562    "codecs/multiplex/multiplex_encoded_image_packer.cc",
563    "codecs/multiplex/multiplex_encoded_image_packer.h",
564    "codecs/multiplex/multiplex_encoder_adapter.cc",
565  ]
566
567  deps = [
568    ":video_codec_interface",
569    ":video_coding_utility",
570    "../../api:fec_controller_api",
571    "../../api:scoped_refptr",
572    "../../api/video:encoded_image",
573    "../../api/video:video_frame",
574    "../../api/video:video_rtp_headers",
575    "../../api/video_codecs:video_codecs_api",
576    "../../common_video",
577    "../../media:rtc_media_base",
578    "../../rtc_base",
579    "../../rtc_base:checks",
580    "../../rtc_base:logging",
581    "../../rtc_base/synchronization:mutex",
582    "../rtp_rtcp:rtp_rtcp_format",
583  ]
584}
585
586# This target defines a bare-bones interface towards libvpx, used by the
587# VP8 and VP9 wrappers below.
588rtc_library("webrtc_libvpx_interface") {
589  visibility = [ "*" ]
590  sources = [
591    "codecs/interface/libvpx_interface.cc",
592    "codecs/interface/libvpx_interface.h",
593  ]
594  deps = [ "../../rtc_base:checks" ]
595  if (rtc_build_libvpx) {
596    deps += [ rtc_libvpx_dir ]
597  }
598}
599
600rtc_library("mock_libvpx_interface") {
601  testonly = true
602  sources = [ "codecs/interface/mock_libvpx_interface.h" ]
603  deps = [
604    ":webrtc_libvpx_interface",
605    "../../test:test_support",
606  ]
607}
608
609# This target includes the internal SW codec.
610rtc_library("webrtc_vp8") {
611  visibility = [ "*" ]
612  poisonous = [ "software_video_codecs" ]
613  sources = [
614    "codecs/vp8/include/vp8.h",
615    "codecs/vp8/libvpx_vp8_decoder.cc",
616    "codecs/vp8/libvpx_vp8_decoder.h",
617    "codecs/vp8/libvpx_vp8_encoder.cc",
618    "codecs/vp8/libvpx_vp8_encoder.h",
619  ]
620
621  deps = [
622    ":codec_globals_headers",
623    ":video_codec_interface",
624    ":video_coding_utility",
625    ":webrtc_libvpx_interface",
626    ":webrtc_vp8_scalability",
627    ":webrtc_vp8_temporal_layers",
628    "../../api:fec_controller_api",
629    "../../api:scoped_refptr",
630    "../../api/video:encoded_image",
631    "../../api/video:video_frame",
632    "../../api/video:video_rtp_headers",
633    "../../api/video_codecs:video_codecs_api",
634    "../../api/video_codecs:vp8_temporal_layers_factory",
635    "../../common_video",
636    "../../rtc_base:checks",
637    "../../rtc_base:event_tracer",
638    "../../rtc_base:logging",
639    "../../rtc_base:rtc_numerics",
640    "../../rtc_base:timeutils",
641    "../../rtc_base/experiments:cpu_speed_experiment",
642    "../../rtc_base/experiments:encoder_info_settings",
643    "../../rtc_base/experiments:field_trial_parser",
644    "../../rtc_base/experiments:rate_control_settings",
645    "../../system_wrappers:field_trial",
646    "../../system_wrappers:metrics",
647    "svc:scalability_mode_util",
648    "//third_party/libyuv",
649  ]
650  absl_deps = [
651    "//third_party/abseil-cpp/absl/algorithm:container",
652    "//third_party/abseil-cpp/absl/strings:strings",
653    "//third_party/abseil-cpp/absl/types:optional",
654  ]
655  if (rtc_build_libvpx) {
656    deps += [ rtc_libvpx_dir ]
657  }
658}
659
660rtc_source_set("webrtc_vp8_scalability") {
661  sources = [
662    "codecs/vp8/vp8_scalability.cc",
663    "codecs/vp8/vp8_scalability.h",
664  ]
665  deps = [ "../../api/video_codecs:scalability_mode" ]
666}
667
668rtc_library("webrtc_vp8_temporal_layers") {
669  visibility = [ "*" ]
670  sources = [
671    "codecs/vp8/default_temporal_layers.cc",
672    "codecs/vp8/default_temporal_layers.h",
673    "codecs/vp8/include/temporal_layers_checker.h",
674    "codecs/vp8/screenshare_layers.cc",
675    "codecs/vp8/screenshare_layers.h",
676    "codecs/vp8/temporal_layers.h",
677    "codecs/vp8/temporal_layers_checker.cc",
678  ]
679
680  deps = [
681    ":codec_globals_headers",
682    ":video_codec_interface",
683    ":video_coding_utility",
684    "../../api:fec_controller_api",
685    "../../api/video_codecs:video_codecs_api",
686    "../../rtc_base:checks",
687    "../../rtc_base:logging",
688    "../../rtc_base:macromagic",
689    "../../rtc_base:rate_statistics",
690    "../../rtc_base:rtc_numerics",
691    "../../rtc_base:timeutils",
692    "../../system_wrappers:field_trial",
693    "../../system_wrappers:metrics",
694  ]
695  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
696}
697
698# This target includes VP9 files that may be used for any VP9 codec, internal SW or external HW.
699rtc_library("webrtc_vp9_helpers") {
700  sources = [
701    "codecs/vp9/svc_config.cc",
702    "codecs/vp9/svc_config.h",
703  ]
704
705  deps = [
706    ":codec_globals_headers",
707    ":video_codec_interface",
708    "../../api/video:video_bitrate_allocation",
709    "../../api/video:video_bitrate_allocator",
710    "../../api/video:video_codec_constants",
711    "../../api/video_codecs:video_codecs_api",
712    "../../common_video",
713    "../../media:rtc_media_base",
714    "../../rtc_base:checks",
715    "../../rtc_base:logging",
716    "../../rtc_base/experiments:stable_target_rate_experiment",
717    "svc:scalability_mode_util",
718    "svc:scalability_structures",
719    "svc:scalable_video_controller",
720  ]
721  absl_deps = [ "//third_party/abseil-cpp/absl/container:inlined_vector" ]
722}
723
724rtc_library("webrtc_vp9") {
725  visibility = [ "*" ]
726  poisonous = [ "software_video_codecs" ]
727  sources = [
728    "codecs/vp9/include/vp9.h",
729    "codecs/vp9/libvpx_vp9_decoder.cc",
730    "codecs/vp9/libvpx_vp9_decoder.h",
731    "codecs/vp9/libvpx_vp9_encoder.cc",
732    "codecs/vp9/libvpx_vp9_encoder.h",
733    "codecs/vp9/vp9.cc",
734    "codecs/vp9/vp9_frame_buffer_pool.cc",
735    "codecs/vp9/vp9_frame_buffer_pool.h",
736  ]
737
738  deps = [
739    ":video_codec_interface",
740    ":video_coding_utility",
741    ":webrtc_libvpx_interface",
742    ":webrtc_vp9_helpers",
743    "../../api:fec_controller_api",
744    "../../api:field_trials_view",
745    "../../api:refcountedbase",
746    "../../api:scoped_refptr",
747    "../../api/transport:field_trial_based_config",
748    "../../api/video:video_frame",
749    "../../api/video:video_frame_i010",
750    "../../api/video:video_rtp_headers",
751    "../../api/video_codecs:scalability_mode",
752    "../../api/video_codecs:video_codecs_api",
753    "../../common_video",
754    "../../media:rtc_media_base",
755    "../../rtc_base",
756    "../../rtc_base:buffer",
757    "../../rtc_base:checks",
758    "../../rtc_base:event_tracer",
759    "../../rtc_base:logging",
760    "../../rtc_base:stringutils",
761    "../../rtc_base:timeutils",
762    "../../rtc_base/containers:flat_map",
763    "../../rtc_base/experiments:encoder_info_settings",
764    "../../rtc_base/experiments:field_trial_parser",
765    "../../rtc_base/experiments:rate_control_settings",
766    "../../rtc_base/synchronization:mutex",
767    "../../system_wrappers:field_trial",
768    "../rtp_rtcp:rtp_rtcp_format",
769    "svc:scalability_mode_util",
770    "svc:scalability_structures",
771    "svc:scalable_video_controller",
772    "svc:svc_rate_allocator",
773    "//third_party/libyuv",
774  ]
775  absl_deps = [
776    "//third_party/abseil-cpp/absl/algorithm:container",
777    "//third_party/abseil-cpp/absl/container:inlined_vector",
778    "//third_party/abseil-cpp/absl/memory",
779    "//third_party/abseil-cpp/absl/strings:strings",
780  ]
781  if (rtc_build_libvpx) {
782    deps += [ rtc_libvpx_dir ]
783  }
784}
785
786if (rtc_include_tests) {
787  if (is_android) {
788    rtc_library("android_codec_factory_helper") {
789      sources = [
790        "codecs/test/android_codec_factory_helper.cc",
791        "codecs/test/android_codec_factory_helper.h",
792      ]
793
794      deps = [
795        "../../api/video_codecs:video_codecs_api",
796        "../../modules/utility:utility",
797        "../../rtc_base:checks",
798        "../../rtc_base:ignore_wundef",
799        "../../sdk/android:internal_jni",
800        "../../sdk/android:native_api_base",
801        "../../sdk/android:native_api_codecs",
802        "../../sdk/android:native_api_jni",
803      ]
804    }
805  }
806
807  if (is_ios || is_mac) {
808    rtc_library("objc_codec_factory_helper") {
809      sources = [
810        "codecs/test/objc_codec_factory_helper.h",
811        "codecs/test/objc_codec_factory_helper.mm",
812      ]
813
814      deps = [
815        "../../api/video:video_frame",
816        "../../api/video:video_rtp_headers",
817        "../../api/video_codecs:video_codecs_api",
818        "../../media:rtc_audio_video",
819        "../../media:rtc_media_base",
820        "../../sdk:native_api",
821        "../../sdk:peerconnectionfactory_base_objc",
822        "../../sdk:videocodec_objc",
823        "../../sdk:videosource_objc",
824        "../../sdk:videotoolbox_objc",
825      ]
826    }
827  }
828
829  rtc_library("encoded_video_frame_producer") {
830    testonly = true
831    sources = [
832      "codecs/test/encoded_video_frame_producer.cc",
833      "codecs/test/encoded_video_frame_producer.h",
834    ]
835    deps = [
836      ":video_codec_interface",
837      "../../api:create_frame_generator",
838      "../../api:frame_generator_api",
839      "../../api/transport/rtp:dependency_descriptor",
840      "../../api/video:encoded_image",
841      "../../api/video:video_frame",
842      "../../api/video:video_frame_type",
843      "../../api/video_codecs:video_codecs_api",
844      "../../rtc_base:checks",
845    ]
846  }
847
848  rtc_library("simulcast_test_fixture_impl") {
849    testonly = true
850    sources = [
851      "utility/simulcast_test_fixture_impl.cc",
852      "utility/simulcast_test_fixture_impl.h",
853    ]
854
855    deps = [
856      ":video_codec_interface",
857      ":video_coding",
858      ":video_coding_utility",
859      "../../api:mock_video_decoder",
860      "../../api:mock_video_encoder",
861      "../../api:simulcast_test_fixture_api",
862      "../../api/video:encoded_image",
863      "../../api/video:video_frame",
864      "../../api/video:video_rtp_headers",
865      "../../api/video_codecs:video_codecs_api",
866      "../../common_video",
867      "../../rtc_base:checks",
868      "../../test:test_support",
869    ]
870  }
871
872  rtc_library("video_codecs_test_framework") {
873    testonly = true
874    sources = [
875      "codecs/test/video_codec_unittest.cc",
876      "codecs/test/video_codec_unittest.h",
877      "codecs/test/videoprocessor.cc",
878      "codecs/test/videoprocessor.h",
879    ]
880
881    deps = [
882      ":codec_globals_headers",
883      ":video_codec_interface",
884      ":video_coding",
885      ":video_coding_utility",
886      ":videocodec_test_stats_impl",
887      ":webrtc_vp9_helpers",
888      "..:module_api",
889      "../../api:create_frame_generator",
890      "../../api:frame_generator_api",
891      "../../api:scoped_refptr",
892      "../../api:sequence_checker",
893      "../../api:videocodec_test_fixture_api",
894      "../../api/task_queue",
895      "../../api/video:builtin_video_bitrate_allocator_factory",
896      "../../api/video:encoded_image",
897      "../../api/video:video_bitrate_allocation",
898      "../../api/video:video_bitrate_allocator",
899      "../../api/video:video_bitrate_allocator_factory",
900      "../../api/video:video_frame",
901      "../../api/video:video_rtp_headers",
902      "../../api/video_codecs:video_codecs_api",
903      "../../common_video",
904      "../../rtc_base:buffer",
905      "../../rtc_base:checks",
906      "../../rtc_base:macromagic",
907      "../../rtc_base:rtc_event",
908      "../../rtc_base:timeutils",
909      "../../rtc_base/synchronization:mutex",
910      "../../rtc_base/system:no_unique_address",
911      "../../test:test_support",
912      "../../test:video_test_common",
913      "../../test:video_test_support",
914      "../rtp_rtcp:rtp_rtcp_format",
915      "//third_party/libyuv",
916    ]
917    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
918  }
919
920  video_coding_modules_tests_resources = []
921  if (is_android) {
922    video_coding_modules_tests_resources += [
923      "../../resources/foreman_128x96.yuv",
924      "../../resources/foreman_160x120.yuv",
925      "../../resources/foreman_176x144.yuv",
926      "../../resources/foreman_240x136.yuv",
927      "../../resources/foreman_320x240.yuv",
928      "../../resources/foreman_480x272.yuv",
929    ]
930  }
931  if (!is_android) {
932    video_coding_modules_tests_resources += [
933      "../../resources/ConferenceMotion_1280_720_50.yuv",
934      "../../resources/FourPeople_1280x720_30.yuv",
935    ]
936  }
937
938  num_video_coding_modules_tests_resources = 0
939  foreach(i, video_coding_modules_tests_resources) {
940    num_video_coding_modules_tests_resources += 1
941  }
942
943  if (num_video_coding_modules_tests_resources > 0) {
944    if (is_ios || is_mac) {
945      bundle_data("video_coding_modules_tests_resources_bundle_data") {
946        testonly = true
947        sources = video_coding_modules_tests_resources
948        outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
949      }
950    }
951  }
952
953  rtc_library("videocodec_test_impl") {
954    testonly = true
955    sources = [
956      "codecs/test/videocodec_test_fixture_impl.cc",
957      "codecs/test/videocodec_test_fixture_impl.h",
958    ]
959    deps = [
960      ":codec_globals_headers",
961      ":video_codec_interface",
962      ":video_codecs_test_framework",
963      ":video_coding_utility",
964      ":videocodec_test_stats_impl",
965      ":webrtc_vp9_helpers",
966      "../../api:array_view",
967      "../../api:videocodec_test_fixture_api",
968      "../../api/test/metrics:global_metrics_logger_and_exporter",
969      "../../api/test/metrics:metric",
970      "../../api/test/video:function_video_factory",
971      "../../api/transport:field_trial_based_config",
972      "../../api/video:video_bitrate_allocation",
973      "../../api/video_codecs:video_codecs_api",
974      "../../api/video_codecs:video_decoder_factory_template",
975      "../../api/video_codecs:video_decoder_factory_template_dav1d_adapter",
976      "../../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter",
977      "../../api/video_codecs:video_decoder_factory_template_libvpx_vp9_adapter",
978      "../../api/video_codecs:video_decoder_factory_template_open_h264_adapter",
979      "../../api/video_codecs:video_encoder_factory_template",
980      "../../api/video_codecs:video_encoder_factory_template_libaom_av1_adapter",
981      "../../api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter",
982      "../../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
983      "../../api/video_codecs:video_encoder_factory_template_open_h264_adapter",
984      "../../call:video_stream_api",
985      "../../common_video",
986      "../../media:rtc_audio_video",
987      "../../media:rtc_media_base",
988      "../../rtc_base:checks",
989      "../../rtc_base:logging",
990      "../../rtc_base:rtc_base_tests_utils",
991      "../../rtc_base:stringutils",
992      "../../rtc_base:task_queue_for_test",
993      "../../rtc_base:timeutils",
994      "../../system_wrappers",
995      "../../test:fileutils",
996      "../../test:test_support",
997      "../../test:video_test_common",
998      "../../test:video_test_support",
999      "../../video/config:encoder_config",
1000      "../../video/config:streams_config",
1001    ]
1002    absl_deps = [
1003      "//third_party/abseil-cpp/absl/strings:strings",
1004      "//third_party/abseil-cpp/absl/types:optional",
1005    ]
1006  }
1007
1008  rtc_library("videocodec_test_stats_impl") {
1009    testonly = true
1010    sources = [
1011      "codecs/test/videocodec_test_stats_impl.cc",
1012      "codecs/test/videocodec_test_stats_impl.h",
1013    ]
1014    deps = [
1015      "../../api:videocodec_test_fixture_api",
1016      "../../api/numerics",
1017      "../../rtc_base:checks",
1018      "../../rtc_base:rtc_numerics",
1019      "../../rtc_base:stringutils",
1020      "../../test:test_common",
1021      "../rtp_rtcp:rtp_rtcp_format",
1022    ]
1023  }
1024
1025  rtc_library("video_coding_modules_tests") {
1026    testonly = true
1027    defines = []
1028
1029    sources = [
1030      "codecs/h264/test/h264_impl_unittest.cc",
1031      "codecs/multiplex/test/multiplex_adapter_unittest.cc",
1032      "codecs/test/video_encoder_decoder_instantiation_tests.cc",
1033      "codecs/test/videocodec_test_av1.cc",
1034      "codecs/test/videocodec_test_libvpx.cc",
1035      "codecs/vp8/test/vp8_impl_unittest.cc",
1036    ]
1037
1038    if (rtc_libvpx_build_vp9) {
1039      sources += [ "codecs/vp9/test/vp9_impl_unittest.cc" ]
1040    }
1041
1042    if (rtc_use_h264) {
1043      sources += [ "codecs/test/videocodec_test_openh264.cc" ]
1044    }
1045
1046    deps = [
1047      ":encoded_video_frame_producer",
1048      ":mock_libvpx_interface",
1049      ":video_codec_interface",
1050      ":video_codecs_test_framework",
1051      ":video_coding_utility",
1052      ":videocodec_test_impl",
1053      ":webrtc_h264",
1054      ":webrtc_libvpx_interface",
1055      ":webrtc_multiplex",
1056      ":webrtc_vp8",
1057      ":webrtc_vp9",
1058      ":webrtc_vp9_helpers",
1059      "../../api:create_frame_generator",
1060      "../../api:create_videocodec_test_fixture_api",
1061      "../../api:frame_generator_api",
1062      "../../api:mock_video_codec_factory",
1063      "../../api:mock_video_decoder",
1064      "../../api:mock_video_encoder",
1065      "../../api:scoped_refptr",
1066      "../../api:videocodec_test_fixture_api",
1067      "../../api/test/video:function_video_factory",
1068      "../../api/video:encoded_image",
1069      "../../api/video:video_frame",
1070      "../../api/video:video_rtp_headers",
1071      "../../api/video_codecs:rtc_software_fallback_wrappers",
1072      "../../api/video_codecs:video_codecs_api",
1073      "../../common_video",
1074      "../../common_video/test:utilities",
1075      "../../media:rtc_internal_video_codecs",
1076      "../../media:rtc_media_base",
1077      "../../media:rtc_simulcast_encoder_adapter",
1078      "../../rtc_base",
1079      "../../rtc_base:refcount",
1080      "../../rtc_base:stringutils",
1081      "../../rtc_base:timeutils",
1082      "../../test:explicit_key_value_config",
1083      "../../test:field_trial",
1084      "../../test:fileutils",
1085      "../../test:test_support",
1086      "../../test:video_test_common",
1087      "../rtp_rtcp:rtp_rtcp_format",
1088      "codecs/av1:dav1d_decoder",
1089      "//third_party/libyuv",
1090    ]
1091    absl_deps = [
1092      "//third_party/abseil-cpp/absl/memory",
1093      "//third_party/abseil-cpp/absl/types:optional",
1094    ]
1095
1096    data = video_coding_modules_tests_resources
1097
1098    if (is_android) {
1099      sources += [ "codecs/test/videocodec_test_mediacodec.cc" ]
1100
1101      deps += [
1102        ":android_codec_factory_helper",
1103        "../../rtc_base:stringutils",
1104      ]
1105    }
1106
1107    if (is_ios || is_mac) {
1108      sources += [ "codecs/test/videocodec_test_videotoolbox.cc" ]
1109
1110      deps += [ ":objc_codec_factory_helper" ]
1111
1112      if (num_video_coding_modules_tests_resources > 0) {
1113        deps += [ ":video_coding_modules_tests_resources_bundle_data" ]
1114      }
1115    }
1116
1117    if (rtc_build_libvpx) {
1118      deps += [ rtc_libvpx_dir ]
1119    }
1120  }
1121
1122  rtc_library("video_coding_unittests") {
1123    testonly = true
1124
1125    sources = [
1126      "chain_diff_calculator_unittest.cc",
1127      "codecs/test/videocodec_test_fixture_config_unittest.cc",
1128      "codecs/test/videocodec_test_stats_impl_unittest.cc",
1129      "codecs/test/videoprocessor_unittest.cc",
1130      "codecs/vp8/default_temporal_layers_unittest.cc",
1131      "codecs/vp8/libvpx_vp8_simulcast_test.cc",
1132      "codecs/vp8/screenshare_layers_unittest.cc",
1133      "codecs/vp9/svc_config_unittest.cc",
1134      "decoder_database_unittest.cc",
1135      "decoding_state_unittest.cc",
1136      "fec_controller_unittest.cc",
1137      "frame_buffer2_unittest.cc",
1138      "frame_dependencies_calculator_unittest.cc",
1139      "frame_helpers_unittest.cc",
1140      "generic_decoder_unittest.cc",
1141      "h264_packet_buffer_unittest.cc",
1142      "h264_sprop_parameter_sets_unittest.cc",
1143      "h264_sps_pps_tracker_unittest.cc",
1144      "histogram_unittest.cc",
1145      "jitter_buffer_unittest.cc",
1146      "loss_notification_controller_unittest.cc",
1147      "nack_requester_unittest.cc",
1148      "packet_buffer_unittest.cc",
1149      "receiver_unittest.cc",
1150      "rtp_frame_reference_finder_unittest.cc",
1151      "rtp_vp8_ref_finder_unittest.cc",
1152      "rtp_vp9_ref_finder_unittest.cc",
1153      "session_info_unittest.cc",
1154      "test/stream_generator.cc",
1155      "test/stream_generator.h",
1156      "utility/bandwidth_quality_scaler_unittest.cc",
1157      "utility/decoded_frames_history_unittest.cc",
1158      "utility/frame_dropper_unittest.cc",
1159      "utility/framerate_controller_deprecated_unittest.cc",
1160      "utility/ivf_file_reader_unittest.cc",
1161      "utility/ivf_file_writer_unittest.cc",
1162      "utility/qp_parser_unittest.cc",
1163      "utility/quality_scaler_unittest.cc",
1164      "utility/simulcast_rate_allocator_unittest.cc",
1165      "utility/vp9_uncompressed_header_parser_unittest.cc",
1166      "video_codec_initializer_unittest.cc",
1167      "video_receiver2_unittest.cc",
1168      "video_receiver_unittest.cc",
1169    ]
1170    if (rtc_use_h264) {
1171      sources += [
1172        "codecs/h264/h264_encoder_impl_unittest.cc",
1173        "codecs/h264/h264_simulcast_unittest.cc",
1174      ]
1175    }
1176
1177    deps = [
1178      ":chain_diff_calculator",
1179      ":codec_globals_headers",
1180      ":encoded_frame",
1181      ":frame_buffer2",
1182      ":frame_dependencies_calculator",
1183      ":frame_helpers",
1184      ":h264_packet_buffer",
1185      ":nack_requester",
1186      ":packet_buffer",
1187      ":simulcast_test_fixture_impl",
1188      ":video_codec_interface",
1189      ":video_codecs_test_framework",
1190      ":video_coding",
1191      ":video_coding_legacy",
1192      ":video_coding_utility",
1193      ":videocodec_test_impl",
1194      ":videocodec_test_stats_impl",
1195      ":webrtc_h264",
1196      ":webrtc_vp8",
1197      ":webrtc_vp8_temporal_layers",
1198      ":webrtc_vp9",
1199      ":webrtc_vp9_helpers",
1200      "..:module_fec_api",
1201      "../../api:array_view",
1202      "../../api:create_simulcast_test_fixture_api",
1203      "../../api:fec_controller_api",
1204      "../../api:mock_fec_controller_override",
1205      "../../api:mock_video_decoder",
1206      "../../api:mock_video_encoder",
1207      "../../api:rtp_packet_info",
1208      "../../api:scoped_refptr",
1209      "../../api:simulcast_test_fixture_api",
1210      "../../api:videocodec_test_fixture_api",
1211      "../../api/task_queue",
1212      "../../api/task_queue:default_task_queue_factory",
1213      "../../api/test/video:function_video_factory",
1214      "../../api/units:data_size",
1215      "../../api/units:frequency",
1216      "../../api/units:time_delta",
1217      "../../api/units:timestamp",
1218      "../../api/video:builtin_video_bitrate_allocator_factory",
1219      "../../api/video:encoded_frame",
1220      "../../api/video:render_resolution",
1221      "../../api/video:video_adaptation",
1222      "../../api/video:video_bitrate_allocation",
1223      "../../api/video:video_bitrate_allocator",
1224      "../../api/video:video_bitrate_allocator_factory",
1225      "../../api/video:video_frame",
1226      "../../api/video:video_frame_type",
1227      "../../api/video:video_rtp_headers",
1228      "../../api/video_codecs:video_codecs_api",
1229      "../../api/video_codecs:vp8_temporal_layers_factory",
1230      "../../common_video",
1231      "../../common_video/generic_frame_descriptor",
1232      "../../common_video/test:utilities",
1233      "../../media:rtc_media_base",
1234      "../../rtc_base",
1235      "../../rtc_base:checks",
1236      "../../rtc_base:histogram_percentile_counter",
1237      "../../rtc_base:platform_thread",
1238      "../../rtc_base:random",
1239      "../../rtc_base:refcount",
1240      "../../rtc_base:rtc_base_tests_utils",
1241      "../../rtc_base:rtc_event",
1242      "../../rtc_base:rtc_numerics",
1243      "../../rtc_base:stringutils",
1244      "../../rtc_base:task_queue_for_test",
1245      "../../rtc_base:timeutils",
1246      "../../rtc_base/experiments:encoder_info_settings",
1247      "../../rtc_base/synchronization:mutex",
1248      "../../rtc_base/system:unused",
1249      "../../system_wrappers",
1250      "../../system_wrappers:field_trial",
1251      "../../system_wrappers:metrics",
1252      "../../test:fake_encoded_frame",
1253      "../../test:fake_video_codecs",
1254      "../../test:field_trial",
1255      "../../test:fileutils",
1256      "../../test:run_loop",
1257      "../../test:scoped_key_value_config",
1258      "../../test:test_support",
1259      "../../test:video_test_common",
1260      "../../test:video_test_support",
1261      "../../test/time_controller:time_controller",
1262      "../rtp_rtcp:rtp_rtcp_format",
1263      "../rtp_rtcp:rtp_video_header",
1264      "codecs/av1:video_coding_codecs_av1_tests",
1265      "svc:scalability_structure_tests",
1266      "svc:svc_rate_allocator_tests",
1267      "timing:jitter_estimator",
1268      "timing:timing_module",
1269    ]
1270    absl_deps = [
1271      "//third_party/abseil-cpp/absl/memory",
1272      "//third_party/abseil-cpp/absl/types:optional",
1273      "//third_party/abseil-cpp/absl/types:variant",
1274    ]
1275    if (rtc_build_libvpx) {
1276      deps += [ rtc_libvpx_dir ]
1277    }
1278  }
1279}
1280