该函数的主要功能是一步完整的转换工作,下面看看源代码:
static int transcode_step(void)
{
OutputStream *ost;
InputStream *ist;
int ret;
//选择一个有效的输出流进行处理
ost = choose_output();
if (!ost) {
if (got_eagain()) {
reset_eagain();
av_usleep(10000);
return 0;
}
av_log(NULL, AV_LOG_VERBOSE, "No more inputs to read from, finishing.\n");
return AVERROR_EOF;
}
//选择一个输入流
if (ost->filter) {
if ((ret = transcode_from_filter(ost->filter->graph, &ist)) < 0)
return ret;
if (!ist)
return 0;
} else {
av_assert0(ost->source_index >= 0);
ist = input_streams[ost->source_index];
}
//读取并处理每一个包
ret = process_input(ist->file_index);
if (ret == AVERROR(EAGAIN)) {