Switch encoder on any critical frame encode error (returncode < 0)

Before this change encoder switch was triggered only if encode() returns WEBRTC_VIDEO_CODEC_ENCODER_FAILURE. Android HW encoder wrapper never return this error code. It returns WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE [1, 2] or WEBRTC_VIDEO_CODEC_ERROR [3].

Change value of WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT from -14 to 5 to avoid it to be interpreted as a critical error.

[1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/sdk/android/src/jni/video_encoder_wrapper.cc;drc=c05a1be5b49f5c03b6955b05bcbf47609e1b0381;l=324

[2] https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/sdk/android/src/jni/video_encoder_wrapper.cc;drc=c05a1be5b49f5c03b6955b05bcbf47609e1b0381;l=335

[3] https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/sdk/android/src/jni/video_encoder_wrapper.cc;drc=c05a1be5b49f5c03b6955b05bcbf47609e1b0381;l=331

Bug: b/243402636
Change-Id: Iaf0129f3f9d71c07bb06804fe1f92a1f84f6da26
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/274402
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38060}
diff --git a/modules/video_coding/include/video_error_codes.h b/modules/video_coding/include/video_error_codes.h
index 4ae0ca1..c4f1a00 100644
--- a/modules/video_coding/include/video_error_codes.h
+++ b/modules/video_coding/include/video_error_codes.h
@@ -15,6 +15,7 @@
 
 // Define return values
 
+#define WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT 5
 #define WEBRTC_VIDEO_CODEC_OK_REQUEST_KEYFRAME 4
 #define WEBRTC_VIDEO_CODEC_NO_OUTPUT 1
 #define WEBRTC_VIDEO_CODEC_OK 0
@@ -23,7 +24,6 @@
 #define WEBRTC_VIDEO_CODEC_ERR_PARAMETER -4
 #define WEBRTC_VIDEO_CODEC_UNINITIALIZED -7
 #define WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE -13
-#define WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT -14
 #define WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED -15
 #define WEBRTC_VIDEO_CODEC_ENCODER_FAILURE -16
 
diff --git a/sdk/android/api/org/webrtc/VideoCodecStatus.java b/sdk/android/api/org/webrtc/VideoCodecStatus.java
index a86d6fb..670d255 100644
--- a/sdk/android/api/org/webrtc/VideoCodecStatus.java
+++ b/sdk/android/api/org/webrtc/VideoCodecStatus.java
@@ -15,6 +15,7 @@
  * video_error_codes.h.
  */
 public enum VideoCodecStatus {
+  TARGET_BITRATE_OVERSHOOT(5),
   REQUEST_SLI(2),
   NO_OUTPUT(1),
   OK(0),
@@ -26,8 +27,7 @@
   TIMEOUT(-6),
   UNINITIALIZED(-7),
   ERR_REQUEST_SLI(-12),
-  FALLBACK_SOFTWARE(-13),
-  TARGET_BITRATE_OVERSHOOT(-14);
+  FALLBACK_SOFTWARE(-13);
 
   private final int number;
 
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 8bf8ce2..249514e 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -1894,15 +1894,9 @@
   was_encode_called_since_last_initialization_ = true;
 
   if (encode_status < 0) {
-    if (encode_status == WEBRTC_VIDEO_CODEC_ENCODER_FAILURE) {
-      RTC_LOG(LS_ERROR) << "Encoder failed, failing encoder format: "
-                        << encoder_config_.video_format.ToString();
-      RequestEncoderSwitch();
-    } else {
-      RTC_LOG(LS_ERROR) << "Failed to encode frame. Error code: "
-                        << encode_status;
-    }
-
+    RTC_LOG(LS_ERROR) << "Encoder failed, failing encoder format: "
+                      << encoder_config_.video_format.ToString();
+    RequestEncoderSwitch();
     return;
   }