亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? multplex.c

?? mp3解碼程序vc++環境下運行
?? C
?? 第 1 頁 / 共 2 頁
字號:

#include "mplex.h"
#ifdef TIMER
    extern long total_sec;
    extern long total_usec;
    extern long global_sec;
    extern long global_usec;
    extern struct timeval  tp_start;
    extern struct timeval  tp_end;
    extern struct timeval  tp_global_start;
    extern struct timeval  tp_global_end;
#endif
extern unsigned int vcd_parm;
/******************************************************************
   復用迭代程序
   
    將視頻和音頻碼流復用在一起	 

******************************************************************/

void outputstream (video_file, video_units, video_info,
		   audio_file, audio_units, audio_info,
		   multi_file, which_streams )

char 		*video_file;
char 		*video_units;
Video_struc 	*video_info;
char 		*audio_file;
char 		*audio_units;
Audio_struc 	*audio_info;
char 		*multi_file;
unsigned int    which_streams;

{

    FILE *istream_v;			
    FILE *istream_a;			
    FILE *ostream;			
    FILE *vunits_info;			
    FILE *aunits_info;			

    Vaunit_struc video_au;		
    Aaunit_struc audio_au;		

    unsigned int data_rate=0;		
    unsigned int video_rate=0;
    unsigned int audio_rate=0;
    double delay,audio_delay,video_delay;
    double clock_cycles;
    double audio_next_clock_cycles;
    double video_next_clock_cycles;
    unsigned int bytes_output;
    double dmux_rate;
    unsigned long sectors_delay,video_delay_ms,audio_delay_ms;
    unsigned int mux_rate;
    unsigned char picture_start;
    unsigned char audio_frame_start;
    unsigned int audio_bytes;
    unsigned int video_bytes;

    unsigned int nsec_a=0;
    unsigned int nsec_v=0;
    unsigned int nsec_p=0;

    unsigned char* index;
	
    Timecode_struc SCR_audio_delay;
    Timecode_struc SCR_video_delay;
    Timecode_struc current_SCR;
    Timecode_struc audio_next_SCR;
    Timecode_struc video_next_SCR;

    Buffer_struc video_buffer;
    Buffer_struc audio_buffer;

    Pack_struc 		pack;
    Sys_header_struc 	sys_header;
    Sector_struc 	sector;

    unsigned long sector_size;
    unsigned long min_packet_data;
    unsigned long max_packet_data;
    unsigned long packets_per_pack;
    unsigned long audio_buffer_size;
    unsigned long video_buffer_size;

    unsigned long write_pack;
    unsigned char marker_pack;
    unsigned long packet_data_size;
    unsigned char verbose;

  

    if (which_streams & STREAMS_VIDEO) istream_v = fopen (video_file, "rb");
    if (which_streams & STREAMS_AUDIO) istream_a = fopen (audio_file, "rb");
    if (which_streams & STREAMS_VIDEO) vunits_info = fopen (video_units, "rb");
    if (which_streams & STREAMS_AUDIO) aunits_info = fopen (audio_units, "rb");
    ostream	= fopen (multi_file, "wb");

  
    picture_start     = FALSE;
    audio_frame_start = FALSE;
    empty_vaunit_struc (&video_au);
    empty_aaunit_struc (&audio_au);

    if (which_streams & STREAMS_AUDIO) {
	fread (&audio_au, sizeof(Aaunit_struc), 1, aunits_info);
	audio_frame_start = TRUE;
    }
    if (which_streams & STREAMS_VIDEO) {
	fread (&video_au, sizeof(Vaunit_struc), 1, vunits_info);
	picture_start = TRUE;
    }


		if(vcd_parm)
			sector_size = 2324;
		else
			sector_size = 2048;
   
	packets_per_pack = 1;
	if(vcd_parm)
		video_buffer_size = 46;
	else
		video_buffer_size = 40;
	audio_buffer_size = 4;

    write_pack = packets_per_pack;
    video_buffer_size *= 1024;
    audio_buffer_size *= 1024;
    min_packet_data = sector_size - PACK_HEADER_SIZE - SYS_HEADER_SIZE -
	PACKET_HEADER_SIZE - AFTER_PACKET_LENGTH;
    max_packet_data = sector_size - PACKET_HEADER_SIZE - AFTER_PACKET_LENGTH;


     if (which_streams != STREAMS_BOTH) { 
 	min_packet_data += 3; 
     } 	


    init_buffer_struc (&video_buffer,video_buffer_size);
    init_buffer_struc (&audio_buffer,audio_buffer_size);


    if (which_streams & STREAMS_VIDEO) {
	if (video_info->bit_rate > video_info->comp_bit_rate)
	    video_rate = video_info->bit_rate * 50;
	else
	    video_rate = video_info->comp_bit_rate * 50;
    }
    if (which_streams & STREAMS_AUDIO)
	audio_rate = bitrate_index[3-audio_info->layer][audio_info->bit_rate]*128;

    data_rate = video_rate + audio_rate;

    dmux_rate =  ceil((double)(data_rate) *
		 ((double)(sector_size)/(double)(min_packet_data) +
		 ((double)(sector_size)/(double)(max_packet_data) *
		 (double)(packets_per_pack-1.))) / (double)(packets_per_pack) );
    data_rate = (unsigned int)ceil(dmux_rate/50.)*50;

	if(vcd_parm)
		dmux_rate = 176400;
	sectors_delay = 8;
	video_delay_ms = 0;
	audio_delay_ms = 0;

    video_delay = (double)video_delay_ms*(double)(CLOCKS/1000);
    audio_delay = (double)audio_delay_ms*(double)(CLOCKS/1000);

	verbose=FALSE;

#ifdef TIMER
    gettimeofday (&tp_global_start,NULL);
#endif

	if (vcd_parm)
		mux_rate = 3528;
	else
		mux_rate = (unsigned int)ceil(dmux_rate/50.);

    dmux_rate= mux_rate * 50.;

	if (vcd_parm)
		delay = 400.0 * (CLOCKS/1000.0);
	else
		delay = ((double)sectors_delay +
			ceil((double)video_au.length/(double)min_packet_data)  +
			ceil((double)audio_au.length/(double)min_packet_data )) *
			(double)sector_size/dmux_rate*(double)CLOCKS;

    audio_delay += delay;
    video_delay += delay;

    make_timecode (audio_delay, &SCR_audio_delay);
    make_timecode (video_delay, &SCR_video_delay);

    add_to_timecode	(&SCR_video_delay, &video_au.DTS);
    add_to_timecode	(&SCR_video_delay, &video_au.PTS);
    add_to_timecode	(&SCR_audio_delay, &audio_au.PTS);

	if (vcd_parm)
	{
		bytes_output = 70560; /* 400 ms worth */
		clock_cycles = 10440000.0; /* 400 - 13.3333333 ms */
	}
	else
		bytes_output = 0;


    while ((video_au.length + audio_au.length) > 0)
    {

	if (write_pack-- == packets_per_pack) 
	{
	    marker_pack = TRUE;
	    packet_data_size = min_packet_data;
	} else 
	{
	    marker_pack = FALSE;
	    packet_data_size = max_packet_data;
	}

	if (write_pack == 0) write_pack = packets_per_pack;

	audio_bytes = (audio_au.length/min_packet_data)*sector_size +
		(audio_au.length%min_packet_data)+(sector_size-min_packet_data);
	video_bytes = (video_au.length/min_packet_data)*sector_size +
		(video_au.length%min_packet_data)+(sector_size-min_packet_data);


	if (vcd_parm)
		clock_cycles += 360000.0;
    else
		clock_cycles = (double)(bytes_output+LAST_SCR_BYTE_IN_PACK)*
			CLOCKS/dmux_rate;

	  audio_next_clock_cycles = (double)(bytes_output+sector_size+
		audio_bytes)/dmux_rate*CLOCKS;
	video_next_clock_cycles = (double)(bytes_output+sector_size+
		video_bytes)/dmux_rate*CLOCKS;

	make_timecode (clock_cycles, &current_SCR);
	make_timecode (audio_next_clock_cycles, &audio_next_SCR);
	make_timecode (video_next_clock_cycles, &video_next_SCR);

	if (which_streams & STREAMS_AUDIO) buffer_clean (&audio_buffer, &current_SCR);
	if (which_streams & STREAMS_VIDEO) buffer_clean (&video_buffer, &current_SCR);


	if ( (buffer_space (&video_buffer) >= packet_data_size)
	     && (video_au.length>0)
	     && ((comp_timecode (&audio_next_SCR, &audio_au.PTS)) ||
		 (audio_au.length==0) ))
	{
	    output_video (&current_SCR, &SCR_video_delay, vunits_info,
		istream_v, ostream, &pack, &sys_header, &sector,
		&video_buffer, &video_au, &picture_start,
		&bytes_output, mux_rate, audio_buffer_size, video_buffer_size,
		packet_data_size, marker_pack, which_streams);

#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
	}


	else if ( (buffer_space (&audio_buffer) >= packet_data_size)
		  && (audio_au.length>0)
		  && ((comp_timecode (&video_next_SCR, &video_au.DTS)) ||
		      (video_au.length==0) ))
	{

	    output_audio (&current_SCR, &SCR_audio_delay, aunits_info,
		istream_a, ostream, &pack, &sys_header, &sector,
		&audio_buffer, &audio_au, &audio_frame_start,
		&bytes_output, mux_rate, audio_buffer_size, video_buffer_size,
		packet_data_size, marker_pack, which_streams);

#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
	}


	else if ( (buffer_space (&audio_buffer) >= packet_data_size)
		  && (audio_au.length>0)
		  &! comp_timecode (&audio_next_SCR, &audio_au.PTS))
	{
	    output_audio (&current_SCR, &SCR_audio_delay, aunits_info,
		istream_a, ostream, &pack, &sys_header, &sector,
		&audio_buffer, &audio_au, &audio_frame_start,
		&bytes_output, mux_rate, audio_buffer_size, video_buffer_size,
		packet_data_size, marker_pack, which_streams);
#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
	    status_message (STATUS_AUDIO_TIME_OUT);
#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
	}

	else if ( (buffer_space (&video_buffer) >= packet_data_size)
		   && (video_au.length>0)
		   &! comp_timecode (&video_next_SCR, &video_au.DTS))
	{
	    output_video (&current_SCR, &SCR_video_delay, vunits_info,
		istream_v, ostream, &pack, &sys_header, &sector,
		&video_buffer, &video_au, &picture_start,
		&bytes_output, mux_rate, audio_buffer_size, video_buffer_size,
		packet_data_size, marker_pack, which_streams);

#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
	    status_message (STATUS_VIDEO_TIME_OUT);

#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
	}


	else
	{
	    output_padding (&current_SCR, ostream, &pack, &sys_header,
		&sector, &bytes_output, mux_rate, audio_buffer_size, 
		video_buffer_size,packet_data_size, marker_pack, which_streams);

#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
	}
    }


    index = sector.buf;

    *(index++) = (unsigned char)((ISO11172_END)>>24);
    *(index++) = (unsigned char)((ISO11172_END & 0x00ff0000)>>16);
    *(index++) = (unsigned char)((ISO11172_END & 0x0000ff00)>>8);
    *(index++) = (unsigned char)(ISO11172_END & 0x000000ff);

    fwrite (sector.buf, sizeof (unsigned char), 4, ostream);
    bytes_output += 4;

#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
    if (!verbose) printf ("\n");
#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
    /* close all In- and Outputfiles				*/

    fclose (ostream);

    if (which_streams & STREAMS_AUDIO) fclose (aunits_info);
    if (which_streams & STREAMS_VIDEO) fclose (vunits_info);
    if (which_streams & STREAMS_AUDIO) fclose (istream_a);
    if (which_streams & STREAMS_VIDEO) fclose (istream_v);

    /* delete tmp files	*/

    if (which_streams & STREAMS_VIDEO) unlink (video_units);
    if (which_streams & STREAMS_AUDIO) unlink (audio_units); 


#ifdef TIMER
    gettimeofday (&tp_global_end, NULL);
    global_sec = 10*(tp_global_end.tv_sec - tp_global_start.tv_sec);
    global_usec= 10*(tp_global_end.tv_usec - tp_global_start.tv_usec);
    global_sec += (global_usec / 100000);
    total_sec *= 10;
    total_sec  += (total_usec  / 100000);

    printf ("Timing global: %10.1f secs\n",(float)global_sec/10.);
    printf ("Timing IO    : %10.1f secs\n",(float)total_sec/10.);
#endif
    
}


/******************************************************************
	Next_Video_Access_Unit
	從臨時文件中獲取下一個存儲單元的信息

******************************************************************/

void next_video_access_unit (buffer, video_au, bytes_left, vunits_info,
			picture_start, SCR_delay)
Buffer_struc *buffer;
Vaunit_struc *video_au;
unsigned int *bytes_left;
FILE *vunits_info;
unsigned char *picture_start;
Timecode_struc *SCR_delay;

{

	int i;

	if (*bytes_left == 0)
	    return;

	while (video_au->length < *bytes_left)
	{
	    queue_buffer (buffer, video_au->length, &video_au->DTS);
	    *bytes_left -= video_au->length;
#ifdef TIMER
            gettimeofday (&tp_start,NULL);
#endif 
	    i=fread (video_au, sizeof(Vaunit_struc), 1, vunits_info);
#ifdef TIMER
            gettimeofday (&tp_end,NULL);
            total_sec  += (tp_end.tv_sec - tp_start.tv_sec);
            total_usec += (tp_end.tv_usec - tp_start.tv_usec);
#endif
	    if (i != 1)
	    {
		empty_vaunit_struc (video_au);
		//status_message(STATUS_VIDEO_END);
		return;
	    }
	    *picture_start = TRUE;
	    add_to_timecode (SCR_delay, &video_au->DTS);
	    add_to_timecode (SCR_delay, &video_au->PTS);
	};

	if (video_au->length > *bytes_left)
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一会所有码转帖| 国产69精品久久777的优势| 亚洲综合男人的天堂| 亚洲欧美国产77777| 国产精品动漫网站| 日韩美女视频一区二区| 中文字幕制服丝袜成人av| 国产精品麻豆99久久久久久| 国产精品日日摸夜夜摸av| 亚洲国产精品av| 国产精品久久久久久久久免费相片 | 成人国产免费视频| 成人黄色大片在线观看| 99久久777色| 日本道精品一区二区三区| 欧美四级电影网| 欧美一区二区三区影视| 精品国精品自拍自在线| 国产午夜精品美女毛片视频| 欧美激情在线观看视频免费| 日韩美女视频一区二区 | 七七婷婷婷婷精品国产| 久久精品免费看| 国产美女娇喘av呻吟久久| 高清不卡一二三区| 日本高清成人免费播放| 欧美一区二区三区性视频| 久久亚洲影视婷婷| 亚洲欧洲日产国码二区| 一区二区三区欧美激情| 日本不卡不码高清免费观看| 国产一区不卡精品| 色视频欧美一区二区三区| 欧美日韩1234| 国产日产欧美一区| 一区二区三区鲁丝不卡| 久久成人免费日本黄色| 99热国产精品| 欧美一区二区三区啪啪| 国产精品天天摸av网| 亚洲成a天堂v人片| 国产在线精品一区在线观看麻豆| 盗摄精品av一区二区三区| 欧美日韩一区在线| 久久久综合激的五月天| 亚洲一区二区三区四区的| 久久99国产精品久久99| 91毛片在线观看| 日韩午夜激情免费电影| 日韩伦理免费电影| 久久草av在线| 欧亚一区二区三区| 久久久精品综合| 亚洲国产日韩a在线播放性色| 国产综合色在线视频区| 在线观看视频一区| 欧美激情综合在线| 日本特黄久久久高潮 | 亚洲国产成人午夜在线一区| 亚洲动漫第一页| 成人免费电影视频| 欧美一区二区三区在线| 亚洲日本中文字幕区| 国产精品综合在线视频| 欧美猛男男办公室激情| 亚洲欧美在线观看| 久久精品国产99国产| 欧美最猛性xxxxx直播| 欧美激情一区二区在线| 日本在线播放一区二区三区| 91视频.com| 国产无一区二区| 麻豆91精品91久久久的内涵| 色综合天天视频在线观看| 国产日韩精品一区二区浪潮av| 五月天中文字幕一区二区| 91麻豆视频网站| 国产精品女人毛片| 国产精品99精品久久免费| 日韩一级视频免费观看在线| 亚洲国产成人porn| 91成人看片片| 亚洲精品国产品国语在线app| 国产成人免费在线观看不卡| 日韩色在线观看| 亚洲一区二区成人在线观看| 一本一道波多野结衣一区二区| 欧美激情在线一区二区三区| 国产自产2019最新不卡| 欧美电影免费观看完整版| 天堂影院一区二区| 欧美网站一区二区| 一区二区三区国产精品| www.日韩大片| 国产精品福利一区二区三区| 国v精品久久久网| 欧美激情中文字幕一区二区| 国产美女精品人人做人人爽 | 一区二区三区日本| 99re在线视频这里只有精品| 国产精品三级久久久久三级| 成人永久免费视频| 国产精品嫩草99a| www.欧美亚洲| 亚洲天天做日日做天天谢日日欢 | 国产精一区二区三区| 精品久久免费看| 国产一区福利在线| 久久久久久9999| 国产高清不卡二三区| 中文字幕乱码亚洲精品一区| 成人午夜电影久久影院| 中文字幕国产一区| 成a人片国产精品| 自拍偷在线精品自拍偷无码专区| jvid福利写真一区二区三区| **欧美大码日韩| 欧美三级电影网站| 日本aⅴ免费视频一区二区三区 | 久久久久久久av麻豆果冻| 成人综合在线网站| 中文字幕一区二区三区不卡| 91久久精品网| 日韩高清不卡在线| 日韩美女天天操| 国产乱码精品1区2区3区| 国产精品久久久久久妇女6080| 91香蕉视频污| 午夜精品福利一区二区三区av| 日韩一级免费一区| 丁香激情综合国产| 亚洲图片自拍偷拍| 日韩三级免费观看| 国产成人av一区| 夜夜精品浪潮av一区二区三区| 91精品国产综合久久久蜜臀图片| 极品瑜伽女神91| 亚洲欧洲美洲综合色网| 欧洲精品一区二区三区在线观看| 欧美aaaaaa午夜精品| 国产精品视频一二三区| 欧美艳星brazzers| 免费看日韩精品| 国产精品视频一二三区| 欧美日韩一区二区欧美激情| 国产在线视频一区二区| 亚洲精品免费在线观看| 日韩一区二区在线观看视频播放| 高清不卡一二三区| 日韩一区精品字幕| 国产精品青草综合久久久久99| 欧美色成人综合| 国产二区国产一区在线观看| 亚洲一区在线观看网站| 久久婷婷久久一区二区三区| 91久久香蕉国产日韩欧美9色| 久久成人久久爱| 樱花草国产18久久久久| 欧美精品一区二区三区在线 | 欧美日韩三级视频| 成人精品亚洲人成在线| 日韩av一二三| 亚洲欧美在线观看| 欧美精品一区二区三区蜜桃| 色噜噜狠狠色综合中国| 国产一区二区三区黄视频 | 国产精品亚洲专一区二区三区 | 亚洲乱码国产乱码精品精98午夜| 欧美xxxx老人做受| 欧美视频自拍偷拍| 成人黄色a**站在线观看| 麻豆精品一区二区三区| 亚洲午夜电影在线观看| 中文字幕av一区二区三区| 欧美一级精品在线| 欧美视频中文字幕| 91免费版在线| 国产999精品久久久久久绿帽| 麻豆精品国产91久久久久久| 一区二区三区日韩欧美精品 | 韩国av一区二区三区四区| 五月天亚洲婷婷| 一区二区免费视频| 亚洲视频香蕉人妖| 国产丝袜欧美中文另类| 欧美成人一级视频| 6080日韩午夜伦伦午夜伦| 欧美图区在线视频| 91麻豆蜜桃一区二区三区| 菠萝蜜视频在线观看一区| 国产高清精品网站| 国产综合久久久久久鬼色| 久久成人羞羞网站| 美美哒免费高清在线观看视频一区二区 | 国产成人精品亚洲午夜麻豆| 韩日精品视频一区| 精品一区二区在线免费观看| 美国毛片一区二区| 久久精品国产澳门| 激情综合色综合久久|