Don't kown how to make avdec_h264 working under multi-threads modes, seems not working with max-threads
wanted002
wanted002 at 163.com
Mon Mar 22 12:46:10 UTC 2021
Many thanks! I really appereciate your time and advices.
I still have some beginner questions to figure out, so beg for your guidance
more :)
Q1 : About "thread_type" and "thread_count" in source code:
I read the function
"gst_ffmpegviddec_set_format at gst-libav-1.16.2/ext/libav/gstavviddec.c" and
found these code:
'''
if (is_live)
ffmpegdec->context->thread_type = FF_THREAD_SLICE;
else
ffmpegdec->context->thread_type = FF_THREAD_SLICE | FF_THREAD_FRAME;
'''
So the default "thread_type" parameter is FF_THREAD_SLICE , means
multithreading base on slice for version 1.16.2?
And is the parameter "ffmpegdec->context->thread_count" indicate how many
thread for decoding will be spawned ?
Q2 : Why the decoding job still runs only on one cpu core ?
I use the "top -H -p xxxx" command, xxxx is the pid of my
gst-launch-1.0 programm running the pipeline . But I saw decoding job is
loaded on the 1st decoding thread, the other three are idle.(My cpu got 4
cores, so I set avdec_h264 with "max-threads=4"). But I tested this on
ubuntu20.10 with gst-1.18.0, all decoding jobs were loaded on each cpu core
with parameter "thread-type=Frame".
By the way, the encoding side is a windows10 laptop, and I guess maybe
windows-os encoded h.264 stream with slice=1. But I'm ashamed that I 'don't
known how to prove it.... Any advices,please?
Q3 : Why 1 frame latency is introduced if the multithreading base on Frame/1
?
I read the function
"gst_ffmpegviddec_set_format at gst-libav-1.18.0/ext/libav/gstavviddec.c" , and
see the comment:
/* When thread type is FF_THREAD_FRAME, extra latency is introduced
equal
* to one frame per thread. We thus need to calculate the thread count
ourselves */
Thank you very much for your guidance. Best wishes.
--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
More information about the gstreamer-devel
mailing list