uavs3 / uavs3e

AVS3 encoder which supports AVS3-P2 baseline profile.
Other
135 stars 62 forks source link

uAVS3_gop编码视频偶现程序无法正常退出 #44

Closed jijiwawa closed 1 year ago

jijiwawa commented 1 year ago

现象描述: 使用RealTime分支Demo进行8k片源编码时,所有帧编码结束后,程序无法正常退出。 该问题为偶现问题。 无法退出时堆栈如下: avs3_threadpool_wait avs3_lib_free avs3gop_lib_free main

命令: ./uAVS3_gop -f ../encoder_ra.cfg -p InputFile=7680x4320_10bit.yuv -p OutputFile=./xx.avs3

环境: CPU:ARM64 OS:openEuler release 22.03 LTS GCC:10.3.1

jijiwawa commented 1 year ago

初步定位该问题的原因为:主线程和lookahead/encoding线程对ctrl->exit_flag存在着数据竞争。 存在主线程对ctrl->exit_flag置1先于lookahead线程读取ctrl->exit_flag的场景(在avs3_lib_reset时), 导致encoding线程进入了while循环,而lookahead未进入while循环,导致encoding线程死等而lookahead线程处理后的数据,导致程序无法退出。

解决方案:仅用flush帧作为线程退出的条件。 基于该解决方案提了个pr:https://github.com/uavs3/uavs3e/pull/46 请帮忙看下是否合理。

jijiwawa commented 1 year ago

pr已合入