ffmpeg源码分析四:transcode_step函数 (转4)
生活随笔
收集整理的這篇文章主要介紹了
ffmpeg源码分析四:transcode_step函数 (转4)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原帖地址:http://blog.csdn.net/austinblog/article/details/25099979
?
該函數的主要功能是一步完整的轉換工作,下面看看源代碼:
?
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)) {if (input_files[ist->file_index]->eagain)ost->unavailable = 1;return 0;}if (ret < 0)return ret == AVERROR_EOF ? 0 : ret;return reap_filters(); //根據濾波器做濾波處理,并把處理完的音視頻輸出到輸出文件中 }?
?
解碼流程是:
process_input() ->?output_packet() ->?decode_audio()/decode_video()/transcode_subtitles()
而decode_audio() 是調用?avcodec_decode_audio4() 來完成工作的。decode_video() 則是通過調用?avcodec_decode_video2() 來完成的。
編碼流程是:
reap_filters() ->?do_video_out() 或?do_audio_out() ->?avcodec_encode_video2() 或?avcodec_encode_audio2()。
?
轉載于:https://www.cnblogs.com/wainiwann/p/4074434.html
總結
以上是生活随笔為你收集整理的ffmpeg源码分析四:transcode_step函数 (转4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络模块(客户端的连接动作)
- 下一篇: SQLite数据库的简单读写操作