)]}'
{
  "commit": "bc384518c76b41b0bc2662e11a17e6bf01ecea08",
  "tree": "f82928564dab070e88fff2713d1fdde7ce90d11d",
  "parents": [
    "822f287f60cc99775d0293baa8f20dd8af88f2c4"
  ],
  "author": {
    "name": "Erik Språng",
    "email": "sprang@google.com",
    "time": "Tue Sep 01 18:43:23 2026 +0200"
  },
  "committer": {
    "name": "Erik Språng",
    "email": "sprang@google.com",
    "time": "Wed Sep 16 00:28:14 2026 -0700"
  },
  "message": "Allow dynamic upscaling across frames without forcing keyframes\n\nAV1 reference frame scaling supports up to 16x upscaling and 2x\ndownscaling from reference frames. However, when dynamic resolution\nchanges were configured with g_forced_max_frame_width/height in single-\nlayer realtime mode, encoder_set_config was forcing a keyframe\nwhenever new dimensions exceeded the last coded width/height.\n\nThis CL enables dynamic upscaling without forcing keyframes:\n1. In single-pass realtime mode without lookahead (g_lag_in_frames \u003d\u003d 0\n   and g_pass \u003d\u003d AOM_RC_ONE_PASS), and with the maximum frame size\n   declared up front via g_forced_max_frame_width/height, removes\n   keyframe forcing for upscaled dimensions in encoder_set_config as\n   long as reference frame scaling constraints are met. The forced\n   maximum frame size is required since it is what makes the internal\n   buffers large enough for the upscaled frame; without it they are\n   only sized for the current frame size.\n2. Sizes internal buffers (compressor data allocation, segmentation\n   maps, cyclic refresh, active maps, and transform coefficient buffers)\n   using forced_max_frame_width/height when specified, preventing\n   out-of-bounds access upon upscaling.\n3. Updates set_bitstream_level_tier to compute the Sequence Header\n   operating point level index using seq-\u003emax_frame_width/height,\n   ensuring the level\u0027s MaxPicSize accommodates the maximum sequence\n   resolution.\n4. Adds unit tests in test/forced_max_frame_width_height_test.cc to\n   verify dynamic upscaling up to 16x without keyframes and level\n   index calculation.\n5. Updates AV1ResolutionChange.RandomInput, which asserted that every\n   resolution change produces a keyframe. All the resolution changes it\n   performs are in fact within the reference frame scaling limits, so in\n   realtime mode they are now coded as inter frames that scale their\n   references. The test now verifies that behaviour, and that the other\n   modes still force a keyframe.\n\nThis fix will allow us to re-enable the `ReferenceFrameScaling` test\ncase in\nhttps://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/video_codecs/test/video_encoder_functional_unittest.cc\n\nBug: webrtc:496266459\nChange-Id: Iee39e485db367e29b7d918ebd0708be72cb69bfe\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "18922ad304ace33df513bbcc32da18eed89ff5c3",
      "old_mode": 33188,
      "old_path": "av1/av1_cx_iface.c",
      "new_id": "cced80c024ac777ed755708200a2d184bf1d1c41",
      "new_mode": 33188,
      "new_path": "av1/av1_cx_iface.c"
    },
    {
      "type": "modify",
      "old_id": "daf31fba80bdf336174aaf61d97b941e24ab8077",
      "old_mode": 33188,
      "old_path": "av1/encoder/encoder.c",
      "new_id": "6ee258a76224e7e2f4c7e83b5d1e18bb4c90b6c2",
      "new_mode": 33188,
      "new_path": "av1/encoder/encoder.c"
    },
    {
      "type": "modify",
      "old_id": "04a6e89742b85bddf58f35a0d9537ff0afb20ad0",
      "old_mode": 33188,
      "old_path": "av1/encoder/encoder_alloc.h",
      "new_id": "ac4a873cc323e47710f17c1bd9ec1f9e1499d632",
      "new_mode": 33188,
      "new_path": "av1/encoder/encoder_alloc.h"
    },
    {
      "type": "modify",
      "old_id": "f0607b68e0dd5c9f11a2a7ace40ea96515c39ba8",
      "old_mode": 33188,
      "old_path": "av1/encoder/encodetxb.c",
      "new_id": "6066f9e010adfbb894f955197725314c4bce350e",
      "new_mode": 33188,
      "new_path": "av1/encoder/encodetxb.c"
    },
    {
      "type": "modify",
      "old_id": "d5bbdf25ae7136a8a3713fa64b7d823419777278",
      "old_mode": 33188,
      "old_path": "test/forced_max_frame_width_height_test.cc",
      "new_id": "762de801149bd25f7ad3a9bdd702b1ee8a0499dd",
      "new_mode": 33188,
      "new_path": "test/forced_max_frame_width_height_test.cc"
    },
    {
      "type": "modify",
      "old_id": "4ed8354ad26e63a3a9241082ea8d60b6f0ce7336",
      "old_mode": 33188,
      "old_path": "test/frame_size_tests.cc",
      "new_id": "96d544880efa4a5515ab8df19ec3d3501538dd2f",
      "new_mode": 33188,
      "new_path": "test/frame_size_tests.cc"
    }
  ]
}
