網路資料流接收處理分析
1、在input.c(src\input)檔案中的主線程迴圈
thread in charge of processing the network packets and demultiplexing
runthread( input_thread_t *p_input )
initthread( p_input ) ;
input_selectes( p_input, p_input->stream.p_newly_selected_es );
/* read and demultiplex some data. */
i_count = p_input->pf_demux( p_input );
2、在下列函式中:
分離出access , demux , name字串 ;
根據分離出的access 字串通過module_need函式找到acess 指標模組;
根據分離出的demux 字串通過module_need函式找到demux 指標模組;
static int initthread( input_thread_t * p_input )
msg_dbg( p_input, "access `%s', demux `%s', name `%s'",
p_input->psz_access, p_input->psz_demux, p_input->psz_name );
p_input->p_access = module_need( p_input, "access",
p_input->psz_access, vlc_true );
while( !input_fillbuffer( p_input ) )
p_input->p_demux =
module_need( p_input, "demux",
(p_input->psz_demux && *p_input->psz_demux) ?
p_input->psz_demux : "$demux",
(p_input->psz_demux && *p_input->psz_demux) ?
vlc_true : vlc_false );
3、在ps.c (module\demux\mpeg)檔案中
a.通過訊息對映巨集賦值啟動函式activate;
b.通過函式activate賦值p_input->pf_demux = demux;
c. 通過函式module_need( p_input, "mpeg-system", null, 0 ) 啟用p_input->p_demux_data->mpeg.pf_read_ps( p_input, &p_data )函式(pf_read_ps);
d.在initthread函式中啟用;
static int activate( vlc_object_t * p_this )
/* set the demux function */
p_input->pf_demux = demux;
p_input->p_private = (void*)&p_demux->mpeg;
p_demux->p_module = module_need( p_input, "mpeg-system", null, 0 );
4、在system.c (module\demux\mpeg)檔案中
賦值解碼模組mpeg_demux_t的成員函式;
static int activate ( vlc_object_t *p_this )
;mpeg_demux.cur_scr_time = -1;
memcpy( p_this->p_private, &mpeg_demux, sizeof( mpeg_demux ) );
return vlc_success;
並且申明函式static ssize_t readps( input_thread_t * p_input, data_packet_t ** pp_data );
5、在ps.c (module\demux\mpeg)檔案中
demux( input_thread_t * p_input )
i_result = p_input->p_demux_data->mpeg.pf_read_ps( p_input, &p_data );
p_input->p_demux_data->mpeg.pf_demux_ps( p_input, p_data );
進行讀取資料和分離工作;
6、在system.c (module\demux\mpeg)檔案中
資料走向圖如下
readps-> peek-> input_peek(src\input\input_ext-plugins.c)-> input_fillbuffert 通過
i_ret = p_input->pf_read( p_input,
(byte_t *)p_buf + sizeof(data_buffer_t) + i_remains,
p_input->i_bufsize );
input_thread_t結構的pf_read函式成員如果是為udp.c(modules\access)的rtpchoose函式
則在開啟access(udp 模組)時通過module_need 啟用;
啟用網路讀資料模組 rtpchoose(modules\access\ udp.c)->read->net_read(src\misc\net.c);
7、在input_programs.c(src\input)檔案中
執行解碼器對es流解碼
int input_selectes( input_thread_t * p_input, es_descriptor_t * p_es )
p_es->p_dec = input_rundecoder( p_input, p_es );
input_selectes(src\input\input_programs.c)->input_rundecoder(src\input\input_dec.c)->decoderthread->decoderdecode ->vout_displaypicture
vlc學習計畫(6) 網路資料流接收處理過程分析
網路資料流接收處理分析 1 在input.c src input 檔案中的主線程迴圈 thread in charge of processing the work packets and demultiplexing runthread input thread t p input 2 在下列函式...
bzoj2132 網路流 最小割 圈地計畫
description 最近房地產商gdoi group of dumbbells or idiots 從noi nuts old idiots 手中得到了一塊開發土地。據了解,這塊土地是一塊矩形的區域,可以縱橫劃分為n m塊小區域。gdoi要求將這些區域分為商業區和工業區來開發。根 據不同的地形環...
docker學習筆記5 網路設定
在工作和學習中我們往往會涉及到多個docker之間內部通訊或docker與宿主主機外部通訊的情況,這些都是通過docker的網路設定來實現的。下面我們就來了解下docker的網路配置,以及相關設定。docker在預設情況下有以下三種網路配置方式,在docker安裝完成後也會預設進行建立 bridge...