Skip to content

Commit

Permalink
libavcenc: do not reset status before all threads are made aware
Browse files Browse the repository at this point in the history
At the end of encoding of a frame, the entropy thread communicates
the encoded bit stream size to rc module for update. After this
update, if rc decides to skip the frame due to vbv overflow, the
bitstream context is reset and frame is marked for skip.

Due to an oversight, if entropy encoding sees an error, then this
update is happening at the end of each row. Now rc has decided to
skip the frame and the context is reset. As the bitstream context is
reset, other threads are unaware of this problem and continue encoding.

This is causing issues.

Restrict the rc update to the thread that entropy code the last row.

Bug: oss-fuzz:59543
Bug: 285891354
Test: avc_enc_fuzzer

Change-Id: If45a5f34abb59ece812733af8f54f72ae5474d03
  • Loading branch information
ram-mohan authored and harishdm committed Sep 14, 2023
1 parent a75597f commit 30858f4
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion encoder/ih264e_process.c
Original file line number Diff line number Diff line change
Expand Up @@ -2621,7 +2621,7 @@ WORD32 ih264e_process_thread(void *pv_proc)
/* entropy code all mbs enlisted under the current job */
error_status = ih264e_entropy(ps_proc);

if ((s_job.i2_mb_y == ps_proc->i4_ht_mbs - 1) || error_status != IH264_SUCCESS)
if (s_job.i2_mb_y == ps_proc->i4_ht_mbs - 1)
{
error_status |= ih264e_update_rc_post_enc(ps_codec, ctxt_sel,
(ps_codec->i4_poc == 0));
Expand Down

0 comments on commit 30858f4

Please sign in to comment.