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

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

?? t264.c

?? T264是中國在JM系列和X264的基礎上尋找的新的H264編程途徑
?? C
?? 第 1 頁 / 共 2 頁
字號:
            p += t->edged_stride_uv;
        }
        p = frame->V;
        for(i = 0 ; i < t->height >> 1 ; i ++)
        {
            fwrite(p, t->width >> 1, 1, f_rec);
            p += t->edged_stride_uv;
        }
    }
}
static float __inline
dec_psnr(uint8_t* p1, uint8_t* p2, int32_t width1, int32_t width2, int32_t height, int print)
{
	float sad = 0, psnr;
	int32_t i, j, size, ii, jj, diff, iii, jjj;
	uint8_t* p11, *p22;
	for(j=0; j<height; j+=16)
	{
		for (i = 0 ; i < width2 ; i +=16)
		{
			p11 = p1+i;
			p22 = p2+i;
			diff = 0;
			for(jj=0; jj<16; jj++)
			{
				for(ii=0; ii<16; ii++)
				{
					int32_t tmp;
					tmp = (p11[ii] - p22[ii]);
					sad += tmp * tmp;
					if(tmp != 0 && diff != 1)
					{
						if(print)
							printf("%2d != %2d ", p11[ii], p22[ii]);
						iii = ii;
						jjj = jj;
						diff = 1;
					}
				}
				p11 += width1;
				p22 += width2;
			}
			if(diff && print)
			{
				printf("%4d, %2d, %2d\n", (j)*(width2>>4) + (i), iii, jjj);
				print = 0;
			}
		}
		p1 += width1*16;
		p2 += width2*16;
	}
	size = width2 * height;
	if(sad < 1e-6)
		psnr = 0.0f;
	else
		psnr = (float)(10 * log10(65025.0f * size / sad));
	return psnr;
}

int32_t 
decode(const char* filename)
{
    /* just for show how to drive the decoder */
#define BUFFER_SIZE 4096
    T264_t* t = T264dec_open();
    uint8_t buffer[BUFFER_SIZE + 4];
    int32_t run = 1,screen = 0;
    FILE* src_file = fopen(filename, "rb");
    size_t size;
    FILE* f_rec = 0;
	//for decoder PSNR
	int frame_num = 0;
	FILE* f_ref = 0;
	uint8_t *ref_buf = NULL;
    int32_t frame_nums = 0;

    float total_time;
#ifdef _WIN32
    struct _timeb beg, end;
#endif
	
    // xxx
    printf("Current fully support t264 encoder's bitstream.\n");

    if (!src_file)
    {
        printf("cannot open file %s.\n", filename);
        return -1;
    }
    if (rec_path[0])
    {
        f_rec = fopen(rec_path, "wb");
        if (!f_rec)
        {
            printf("cannot open rec file %s.\n", rec_path);
        }
    }
	//for decoder PSNR
	if(ref_path[0])
	{
		f_ref = fopen(ref_path, "rb");
		if(!f_ref)
		{
			printf("cannot open ref file %s.\n", ref_path);
		}
	}

#ifdef _WIN32
    _ftime(&beg);
#endif
    while (run) 
    {
        decoder_state_t state = T264dec_parse(t);
        switch(state) 
        {
        case DEC_STATE_BUFFER:
            /* read more data */
            size = fread(buffer, 1, BUFFER_SIZE, src_file);
            if (size > 0)
            {
                if (size != BUFFER_SIZE)
                {
                    buffer[size] = 0;
                    buffer[size + 1] = 0;
                    buffer[size + 2] = 0;
                    buffer[size + 3] = 1;
                    size += 4;
                }

                T264dec_buffer(t, buffer, size);
            }
            else
            {
                /* if all data has readed, here we will return */
                run = 0;
                /* NOTE: here we should get the last frame */
                write_frame(t, T264dec_flush_frame(t), f_rec);
#ifdef USE_DISPLAY
                winDisplay(t, T264dec_flush_frame(t));
#endif
                frame_nums ++;
            }
            break;
        case DEC_STATE_PIC:
            /* write one pic */
            break;
        case DEC_STATE_SEQ:

#ifdef USE_DISPLAY
            if (screen == 0)
            {
#ifndef __GCC__
                initDisplay(t->width, t->height);
#else
                init_display("",t->width, t->height);
#endif
                screen++;
            }

#endif
            if (t->frame_id > 0)
            {
                /* NOTE: here we should get the last frame */
                write_frame(t, T264dec_flush_frame(t), f_rec);
    #ifdef USE_DISPLAY
                winDisplay(t, T264dec_flush_frame(t));
    #endif
                frame_nums ++;
            }
            printf("ref frames num: %d.\n", t->ss.num_ref_frames);
            printf("width: %d.\n", (t->ss.pic_width_in_mbs_minus1 + 1) << 4);
            printf("height: %d.\n", (t->ss.pic_height_in_mbs_minus1 + 1) << 4);
            break;
        case DEC_STATE_SLICE:
            {
                if (t->output.poc >= 0)
                {
                    write_frame(t, &t->output, f_rec);
				//for decoder PSNR
				if(f_ref)
				{
					float psnr_y, psnr_u, psnr_v;
					int size;
					size = t->width*t->height;
					if(ref_buf == NULL)
					{
						ref_buf = (uint8_t *)malloc(size);
					}
					
					if(ref_buf != NULL)
					{
						uint8_t *p;
						p = t->output.Y[0];
						fread(ref_buf, 1, size, f_ref);
						psnr_y = dec_psnr(p, ref_buf, t->edged_stride, t->width, t->height, 0);

						size >>= 2;
						p = t->output.U;
						fread(ref_buf, 1, size, f_ref);
						psnr_u = dec_psnr(p, ref_buf, t->edged_stride_uv, t->width>>1, t->height>>1, 0);
						p = t->output.V;
						fread(ref_buf, 1, size, f_ref);
						psnr_v = dec_psnr(p, ref_buf, t->edged_stride_uv, t->width>>1, t->height>>1, 0);
						printf("%4d, %.2f, %.2f, %.2f\n", frame_num++, psnr_y, psnr_u, psnr_v);
						if(ref_skip > 0)
						{
							fseek(f_ref, ref_skip*size*6, SEEK_CUR);
						}
					}
				}
#ifdef USE_DISPLAY
                    winDisplay(t, &t->output);
#endif
                    frame_nums ++;                
                }
            };
            break;
        case DEC_STATE_CUSTOM_SET:
            {
                printf("used fast interpolate: %s.\n", t->flags & USE_FASTINTERPOLATE ? "yes" : "no");
            }
            break;
        default:
            /* do not care */
            break;
        }
    };

#ifndef CHIP_DM642
#ifdef _WIN32
    _ftime(&end);
    total_time = (float)(end.time - beg.time) + (float)(end.millitm - beg.millitm) / 1000;
#endif
    printf("fps: %.2ffps(total decode: %d frames).\n", (float)frame_nums / total_time, frame_nums);
#endif    
#ifdef CHIP_DM642
	printf("fps: %.2ffps(total decode: %d frames).\n", (float)frame_nums / total_time, frame_nums);
#endif
    T264dec_close(t);
    fclose(src_file);
    if (f_rec)
        fclose(f_rec);
	if (f_ref)
		fclose(f_ref);
	if(ref_buf != NULL)
		free(ref_buf);
#ifdef USE_DISPLAY
    uninit_display();
#endif

    return 0;
}

void
help()
{
    printf("Usage:\n"
        "\tt264 -d test.264 [rec_path] [reference_path] [skip_num](to decode a 264 file.)\n"
        "\tt264 -e enconfig.txt (to encode a 264 file.)\n");
}

int 
main(int argc, char* argv[])
{
    int32_t i;
    int32_t is_encode = 0;
    int32_t is_decode = 0;
    char* file_name;

    printf("T264 ver: %d.%02d\n", T264_MAJOR, T264_MINOR);
    if (argc < 3)
    {
        help();
        return 0;
    }

    for (i = 1 ; i < 3 ; i ++)
    {
        if (strcmp(argv[i], "-d") == 0)
        {
            is_decode = 1;
        }
        else if(strcmp(argv[i], "-e") == 0)
        {
            is_encode = 1;
        }
        else
        {
            file_name = argv[i];
        }
    }

    if (is_encode)
    {
        return encode(file_name);
    }

    if (is_decode)
    {
        if (argc <= 3)
            rec_path[0] = 0;
        else
		{
			strcpy(rec_path, argv[3]);
		}
		if(argc <= 4)
		{
			ref_path[0] = 0;
		}
		else
		{
			strcpy(ref_path, argv[4]);
		}
		if(argc > 5)
		{
			ref_skip = atoi(argv[5]);
		}
        return decode(file_name);
    }

    help();

    return -1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频第一区免费观看| 99re视频这里只有精品| 91精品国产色综合久久不卡电影| 日韩伦理av电影| 91丨九色丨尤物| 一区二区三区国产精品| 欧美在线观看禁18| 日av在线不卡| 久久奇米777| 精品国产第一区二区三区观看体验| 日韩欧美色综合| 国产亚洲一区二区三区| 国产精品免费av| 亚洲国产精品激情在线观看 | 亚洲二区视频在线| 久久网站最新地址| 婷婷开心激情综合| 美脚の诱脚舐め脚责91| 欧美一区二区在线免费观看| 久久成人综合网| 国产精品家庭影院| 欧美日韩国产在线观看| 国产在线麻豆精品观看| 亚洲色图制服丝袜| 欧美一级爆毛片| 不卡av免费在线观看| 曰韩精品一区二区| 精品久久国产字幕高潮| www.视频一区| 日本 国产 欧美色综合| 最新久久zyz资源站| 91精品国模一区二区三区| 狠狠久久亚洲欧美| 一区二区三区中文字幕电影 | 91精品国产色综合久久不卡电影| 精品一区二区免费在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 欧美综合在线视频| 国产精品一区二区在线观看不卡| 亚洲综合网站在线观看| 精品国产亚洲在线| 欧美中文字幕一区二区三区| 国产一区二区调教| 亚洲高清在线精品| 中文字幕免费在线观看视频一区| 欧美日韩成人高清| 国产 欧美在线| 婷婷久久综合九色综合绿巨人| 日本一区二区三区高清不卡| 欧美人与禽zozo性伦| 粉嫩高潮美女一区二区三区| 日本女人一区二区三区| 亚洲精品久久嫩草网站秘色| 久久久综合精品| 精品国产免费一区二区三区香蕉| 欧美性极品少妇| 色综合久久精品| 粉嫩一区二区三区在线看| 精品一区二区三区久久久| 天天色综合天天| 亚洲一区二区三区在线看| 国产精品国模大尺度视频| 中文字幕不卡在线播放| 精品欧美一区二区三区精品久久| 欧美人与z0zoxxxx视频| 欧美日本乱大交xxxxx| 一本久道久久综合中文字幕 | 国产精品一区久久久久| 美腿丝袜一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 蜜桃一区二区三区四区| 亚洲国产毛片aaaaa无费看| 亚洲日本韩国一区| 国产精品久久三区| 中文字幕日韩av资源站| 国产精品国产三级国产三级人妇| 国产视频一区在线观看| 久久精品人人做人人爽人人| 久久免费视频色| 国产色婷婷亚洲99精品小说| 久久久亚洲高清| 国产欧美在线观看一区| 国产无遮挡一区二区三区毛片日本| 日韩午夜激情av| 精品国产精品网麻豆系列| 精品国产精品网麻豆系列| 久久久精品免费观看| 国产精品人成在线观看免费| 中文字幕一区二区三区精华液 | 樱桃视频在线观看一区| 亚洲精品一二三区| 亚洲一区二区三区中文字幕在线| 亚洲国产一二三| 蜜桃精品视频在线| 国产精品一区二区你懂的| 99精品久久99久久久久| 欧美亚洲国产一区在线观看网站| 欧美中文字幕一区| 欧美一区二区二区| 国产视频亚洲色图| 亚洲欧美另类在线| 日韩国产高清在线| 国产剧情一区在线| 91免费观看视频| 欧美一区二区精品在线| 欧美韩国日本不卡| 亚洲一线二线三线久久久| 蜜臀国产一区二区三区在线播放 | 成人av网址在线| 欧美性淫爽ww久久久久无| 精品免费99久久| 中文字幕在线观看一区二区| 久久91精品久久久久久秒播| 九九**精品视频免费播放| 不卡一区二区在线| 欧美久久久久久久久中文字幕| 久久久久国产精品厨房| 综合色天天鬼久久鬼色| 日韩成人精品视频| 成人黄动漫网站免费app| 欧美老肥妇做.爰bbww视频| 亚洲精品一区二区三区福利| 国产精品久久久久久久蜜臀 | 久久精品国产亚洲5555| 97久久人人超碰| 欧美成人伊人久久综合网| 亚洲激情男女视频| 国产精品99久久久久久似苏梦涵 | 国产精品毛片高清在线完整版| 午夜一区二区三区视频| 国产精品资源网| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 精品国产免费人成在线观看| 伊人色综合久久天天人手人婷| 蜜臀av一区二区在线观看| 96av麻豆蜜桃一区二区| 久久先锋资源网| 天堂午夜影视日韩欧美一区二区| av在线一区二区三区| 日韩一区二区视频| 亚洲午夜精品17c| 成人污视频在线观看| 精品精品欲导航| 首页国产欧美日韩丝袜| 91在线观看美女| 国产欧美精品一区二区色综合 | 91精品国产黑色紧身裤美女| 亚洲欧美一区二区久久| 国产成人鲁色资源国产91色综| 欧美男男青年gay1069videost | 亚洲日本在线观看| 国产精品亚洲一区二区三区在线 | 国产精品66部| 精品国产99国产精品| 日韩高清中文字幕一区| 在线看国产一区| 亚洲综合久久久久| 在线免费观看一区| 亚洲激情五月婷婷| 97精品国产97久久久久久久久久久久| 久久久午夜精品理论片中文字幕| 精品一区二区在线播放| 欧美电影免费观看高清完整版在 | 国产欧美日产一区| 国产精品亚洲成人| 日韩欧美123| 日本欧美一区二区| 日韩三级高清在线| 男女性色大片免费观看一区二区| 777午夜精品免费视频| 午夜av一区二区三区| 欧美精品久久久久久久久老牛影院| 一区二区三区欧美久久| 在线欧美日韩精品| 亚洲电影第三页| 欧美日韩高清一区二区| 青青草国产成人99久久| 日韩久久精品一区| 国产a视频精品免费观看| 国产精品三级在线观看| 91丨九色丨尤物| 午夜视频在线观看一区| 欧美一区二区美女| 国产成人日日夜夜| **性色生活片久久毛片| 91成人在线精品| 丝袜诱惑制服诱惑色一区在线观看| 欧美午夜电影一区| 亚洲一区视频在线| 日韩一区二区三区av| 激情图区综合网| 自拍偷拍亚洲欧美日韩| 欧美久久婷婷综合色| 精品不卡在线视频| 欧美本精品男人aⅴ天堂| 欧美视频中文字幕| 国产成人自拍网| 激情综合五月天| 麻豆精品一区二区三区| 美女一区二区在线观看|