diff options
author | Neelkamal Semwal <neelkamal.semwal@ittiam.com> | 2021-05-07 04:25:00 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-07 04:25:00 +0000 |
commit | 353eceeda0950a8425f41b70bebeadd693bdafcf (patch) | |
tree | 5c5a070661b24a9c5c85da67ad81b50a834839ba | |
parent | 2c9758d16ada5aa04ee18b1c06be645e455cf64c (diff) | |
parent | a45e73ed02e6a71558a356c0c556f8d57dcee29a (diff) | |
download | libavc-353eceeda0950a8425f41b70bebeadd693bdafcf.tar.gz |
encoder: fix invalid free of raw buffers am: 3e73f0d562 am: 39fd5ebf08 am: af5bd177be am: a45e73ed02
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/libavc/+/14392080
Change-Id: I0de10d4ce0ac4b79c8a9db0b07fd6082fca8a08d
-rw-r--r-- | encoder/ih264e_encode.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/encoder/ih264e_encode.c b/encoder/ih264e_encode.c index fb37765..fe23841 100644 --- a/encoder/ih264e_encode.c +++ b/encoder/ih264e_encode.c @@ -228,6 +228,9 @@ WORD32 ih264e_encode(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op) ps_video_encode_op->s_ive_op.output_present = 0; ps_video_encode_op->s_ive_op.dump_recon = 0; ps_video_encode_op->s_ive_op.u4_encoded_frame_type = IV_NA_FRAME; + /* By default set the current input buffer as the buffer to be freed */ + /* This will later be updated to the actual input that gets encoded */ + ps_video_encode_op->s_ive_op.s_inp_buf = ps_video_encode_ip->s_ive_ip.s_inp_buf; /* Check for output memory allocation size */ if (ps_video_encode_ip->s_ive_ip.s_out_buf.u4_bufsize < MIN_STREAM_SIZE) @@ -474,6 +477,9 @@ WORD32 ih264e_encode(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op) s_out_buf.u4_is_last = s_inp_buf.u4_is_last; ps_video_encode_op->s_ive_op.u4_is_last = s_inp_buf.u4_is_last; + /* Send the input to application so that it can free it */ + ps_video_encode_op->s_ive_op.s_inp_buf = s_inp_buf.s_raw_buf; + /* Only encode if the current frame is not pre-encode skip */ if (!i4_rc_pre_enc_skip && s_inp_buf.s_raw_buf.apv_bufs[0]) { @@ -774,12 +780,6 @@ WORD32 ih264e_encode(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op) } else { - /* proc ctxt base idx */ - WORD32 proc_ctxt_select = ctxt_sel * MAX_PROCESS_THREADS; - - /* proc ctxt */ - process_ctxt_t *ps_proc = &ps_codec->as_process[proc_ctxt_select]; - /* receive output back from codec */ s_out_buf = ps_codec->as_out_buf[ctxt_sel]; @@ -790,18 +790,11 @@ WORD32 ih264e_encode(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op) ps_video_encode_op->s_ive_op.u4_timestamp_low = 0; ps_video_encode_op->s_ive_op.u4_timestamp_high = 0; - /* receive input back from codec and send it to app */ - s_inp_buf = ps_proc->s_inp_buf; - ps_video_encode_op->s_ive_op.s_inp_buf = s_inp_buf.s_raw_buf; - ps_video_encode_op->s_ive_op.u4_encoded_frame_type = IV_NA_FRAME; } - /* Send the input to encoder so that it can free it if possible */ ps_video_encode_op->s_ive_op.s_out_buf = s_out_buf.s_bits_buf; - ps_video_encode_op->s_ive_op.s_inp_buf = s_inp_buf.s_raw_buf; - if (1 == s_inp_buf.u4_is_last) { |