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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? t264.c

?? T264是中國的視頻編碼自由組織合力開發(fā)的264編解碼程序
?? 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;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频中文字幕| 亚洲免费观看视频| 日韩视频中午一区| 欧美久久久久久久久中文字幕| 在线观看日韩毛片| 在线观看一区二区视频| 欧美色综合网站| 欧美酷刑日本凌虐凌虐| 欧美一区二区视频在线观看2020 | 激情综合色丁香一区二区| 亚洲韩国精品一区| 日韩综合一区二区| 蜜臀av在线播放一区二区三区| 久久av资源网| 国产精品一区免费视频| 国产精品系列在线观看| 成人av手机在线观看| 99re6这里只有精品视频在线观看| 91最新地址在线播放| 在线观看亚洲a| 日韩精品一区二区三区老鸭窝 | 久久精品视频一区| 国产欧美一区在线| 亚洲三级久久久| 婷婷成人综合网| 久久国产精品99精品国产| 国产一区啦啦啦在线观看| 成人黄色片在线观看| 欧美中文一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 欧美在线看片a免费观看| 欧美精品久久一区二区三区| 日韩免费高清视频| 日本一区二区三区免费乱视频 | 成人激情小说网站| 欧美亚洲综合在线| 精品入口麻豆88视频| 综合激情成人伊人| 日韩在线一区二区| 国产精品自在在线| 91视频国产资源| 欧美一级xxx| 中文字幕在线不卡一区| 天天综合网天天综合色 | 欧美大黄免费观看| 亚洲视频一区二区在线| 日韩av成人高清| www.在线欧美| 日韩一区二区不卡| 亚洲色欲色欲www在线观看| 日本三级亚洲精品| 91亚洲资源网| 欧美一区二区三区免费视频| 欧美国产日韩亚洲一区| 日本vs亚洲vs韩国一区三区二区| 成人免费视频一区| 91精品国产综合久久精品性色| 国产精品久久久久影院| 老司机午夜精品| 欧美伊人久久大香线蕉综合69 | 蜜芽一区二区三区| 91在线观看美女| 久久综合色天天久久综合图片| 一区二区三区在线观看国产| 激情文学综合丁香| 欧美日韩国产bt| 亚洲日本护士毛茸茸| 国产精品中文字幕日韩精品| 91精品国产免费久久综合| 亚洲色图19p| 国产成人精品亚洲777人妖| 91精品综合久久久久久| 一区二区三区日韩欧美精品| 国产成人精品一区二区三区网站观看| 欧美日韩国产综合久久| 一级日本不卡的影视| 成人夜色视频网站在线观看| 精品国产一区二区国模嫣然| 亚洲成人一区二区在线观看| 91免费在线视频观看| 国产清纯白嫩初高生在线观看91| 久久99深爱久久99精品| 欧美高清www午色夜在线视频| 亚洲欧美一区二区三区孕妇| 国产一区二区三区精品视频| 日韩精品在线一区二区| 蜜臀av一区二区| 51精品国自产在线| 日韩中文字幕1| 欧美精品 日韩| 亚洲第一福利视频在线| 在线观看国产一区二区| 亚洲精品一二三区| 色婷婷久久久亚洲一区二区三区| 欧美激情在线免费观看| 国产成人aaa| 国产色综合一区| 国产xxx精品视频大全| 国产日韩欧美一区二区三区综合| 国产乱码精品1区2区3区| 26uuu国产日韩综合| 精品在线一区二区| 久久女同精品一区二区| 国产福利精品一区| 久久久国际精品| 成人免费电影视频| 中文字幕国产一区| 99久久免费国产| 亚洲男人的天堂在线观看| 色综合久久久久| 亚洲一区在线观看网站| 欧美日韩精品一区二区三区蜜桃 | 一区二区三区四区不卡视频| 色婷婷亚洲综合| 亚洲一级二级三级在线免费观看| 在线视频一区二区三| 亚洲一级不卡视频| 91精品欧美久久久久久动漫 | 国产成人免费在线视频| 国产日韩欧美麻豆| 91网上在线视频| 亚洲高清三级视频| 欧美一区二区三区日韩视频| 精品一区二区三区视频| 中文在线资源观看网站视频免费不卡 | 亚洲综合自拍偷拍| 欧美精品777| 国产白丝精品91爽爽久久 | 国产精品中文字幕日韩精品| 国产精品久久久久久久午夜片| 色综合天天综合在线视频| 日韩中文字幕亚洲一区二区va在线 | 国产suv精品一区二区三区| 综合电影一区二区三区 | 欧美一区二区三区视频免费播放| 久热成人在线视频| 国产精品免费人成网站| 欧美视频在线不卡| 国产最新精品精品你懂的| 中文字幕一区二区三区视频| 欧美三级日韩三级国产三级| 九一久久久久久| 亚洲日本在线a| 日韩一区二区三区在线视频| 成人免费电影视频| 三级亚洲高清视频| 国产精品丝袜久久久久久app| 欧美日韩国产一级片| 国产麻豆精品视频| 亚洲一区二区三区四区不卡| 精品99久久久久久| 欧美在线观看一区| 国产麻豆午夜三级精品| 亚洲制服丝袜一区| 国产人久久人人人人爽| 678五月天丁香亚洲综合网| 成人avav在线| 麻豆精品蜜桃视频网站| 亚洲精选视频在线| 久久久亚洲精品石原莉奈| 色播五月激情综合网| 国产一区二区三区综合| 亚洲主播在线观看| 中文字幕av资源一区| 日韩欧美一二区| 91电影在线观看| 高清不卡在线观看| 捆绑调教一区二区三区| 亚洲麻豆国产自偷在线| 久久这里只有精品6| 欧美嫩在线观看| 色综合色综合色综合色综合色综合| 久久99精品国产麻豆婷婷| 亚洲bt欧美bt精品| 亚洲视频精选在线| 国产调教视频一区| 日韩欧美国产三级| 欧美日韩精品一区二区三区| 97se亚洲国产综合自在线| 狠狠色综合播放一区二区| 天堂成人国产精品一区| 日韩伦理av电影| 日本一区二区三区四区在线视频 | 亚洲一区二区五区| 国产精品超碰97尤物18| 久久色.com| 精品国产三级a在线观看| 欧美日韩一级二级| 日本二三区不卡| 97久久精品人人做人人爽50路| 国产精品99久久久久久似苏梦涵| 喷水一区二区三区| 三级欧美在线一区| 亚洲资源中文字幕| 一区二区三区在线观看视频| 亚洲人快播电影网| 亚洲日本欧美天堂| 一区二区三区蜜桃网| 亚洲三级在线免费| 亚洲精品老司机|