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

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

?? vfapidec.c

?? DVD轉換到AVI的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 
 *	Copyright (C) Chia-chen Kuo - Jan 2001
 *
 *  This file is part of DVD2AVI, a free MPEG-2 decoder
 *	
 *  DVD2AVI is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *   
 *  DVD2AVI is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *   
 *  You should have received a copy of the GNU General Public License
 *  along with GNU Make; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
 *
 */

#define GLOBAL
#include "global.h"
#include "vfapi.h"
#include "getbit.h"

#define MAX_FRAME_NUMBER	1000000
#define MAX_GOP_SIZE		1024

static int ChromaFormat[4] = {
	0, 6, 8, 12
};

typedef struct {
	DWORD		number;
	int			file;
	__int64		position;
}	GOPLIST;
GOPLIST *GOPList[MAX_FRAME_NUMBER];

typedef struct {
	DWORD			top;
	DWORD			bottom;
	unsigned char	forward:1;
	unsigned char	backward:1;
}	FRAMELIST;
FRAMELIST *FrameList[MAX_FRAME_NUMBER];

static unsigned char *GOPBuffer[MAX_GOP_SIZE];
static BOOL Field_Order, Full_Frame;

__forceinline static void RGBCopyodd(unsigned char *src, unsigned char *dst, int pitch, int forward);
__forceinline static void RGBCopyeven(unsigned char *src, unsigned char *dst, int pitch, int forward);

int Open_D2VFAPI(char *path, D2VFAPI *out)
{
	DWORD i, j, size, code, type, tff, rff, film, ntsc, gop, top, bottom, mapping;
	int repeat_on, repeat_off, repeat_init;
	char ID[19], PASS[19] = "DVD2AVIProjectFile";

	ZeroMemory(out, sizeof(D2VFAPI));

	out->VF_File = fopen(path, "r");
	if (fgets(ID, 19, out->VF_File)==NULL)
		return 0;
	if (strcmp(ID, PASS))
		return 0;

	fscanf(out->VF_File, "%d", &File_Limit);

	i = File_Limit;
	while (i)
	{
		fscanf(out->VF_File, "%d ", &j);
		fgets(Infilename[File_Limit-i], j+1, out->VF_File);
		if ((Infile[File_Limit-i] = _open(Infilename[File_Limit-i], _O_RDONLY | _O_BINARY))==-1)
			return 0;
		i--;
	}

	fscanf(out->VF_File, "\nSystem_Stream=%d\n", &SystemStream_Flag);
	File_Flag = 0;
	_lseeki64(Infile[0], 0, SEEK_SET);

	Initialize_FPU_IDCT();
	Initialize_REF_IDCT();
	Initialize_Buffer();

	do
	{
		next_start_code();
		code = Get_Bits(32);
	}
	while (code!=SEQUENCE_HEADER_CODE);

	sequence_header();

	mb_width = (horizontal_size+15)/16;
	mb_height = progressive_sequence ? (vertical_size+15)/16 : 2*((vertical_size+31)/32);

	Coded_Picture_Width = 16 * mb_width;
	Coded_Picture_Height = 16 * mb_height;

	Chroma_Width = (chroma_format==CHROMA444) ? Coded_Picture_Width : Coded_Picture_Width>>1;
	Chroma_Height = (chroma_format!=CHROMA420) ? Coded_Picture_Height : Coded_Picture_Height>>1;

	block_count = ChromaFormat[chroma_format];

	qheightd2 = Coded_Picture_Height / 4 - 2;
	hheightd2 = Coded_Picture_Height / 2 - 2;
	hwidth = Coded_Picture_Width / 2;
	hwidthd8 = Coded_Picture_Width / 2 - 8;
	dwidth = Coded_Picture_Width * 2;
	twidth = Coded_Picture_Width * 3;
	swidth = Coded_Picture_Width * 6;
	area = Coded_Picture_Width * Coded_Picture_Height;

	for (i=0; i<8; i++)
	{
		p_block[i] = (short *)malloc(sizeof(short)*64 + 64);
		block[i]   = (short *)((long)p_block[i] + 64 - (long)p_block[i]%64);
	}

	p_fTempArray = (void *)malloc(sizeof(float)*128 + 64);
	fTempArray = (void *)((long)p_fTempArray + 64 - (long)p_fTempArray%64);

	for (i=0; i<3; i++)
	{
		if (i==0)
			size = Coded_Picture_Width * Coded_Picture_Height;
		else
			size = Chroma_Width * Chroma_Height;

		backward_reference_frame[i] = (unsigned char*)malloc(size);
		forward_reference_frame[i] = (unsigned char*)malloc(size);
		auxframe[i] = (unsigned char*)malloc(size);
	}

	u422 = (unsigned char*)malloc(Coded_Picture_Width * Coded_Picture_Height / 2);
	v422 = (unsigned char*)malloc(Coded_Picture_Width * Coded_Picture_Height / 2);
	u444 = (unsigned char*)malloc(Coded_Picture_Width * Coded_Picture_Height);
	v444 = (unsigned char*)malloc(Coded_Picture_Width * Coded_Picture_Height);
	rgb24 = (unsigned char*)malloc(Coded_Picture_Width * Coded_Picture_Height * 3);

	fscanf(out->VF_File, "iDCT_Algorithm=%d\n", &IDCT_Flag);
	fscanf(out->VF_File, "YUVRGB_Scale=%d\n", &Scale_Flag);

	if (Scale_Flag)
	{
		YUVRGB_Scale = 0x1000254310002543;
		YUVRGB_Offset = 0x0010001000100010;
	}
	else
	{
		YUVRGB_Scale = 0x1000200010002000;
		YUVRGB_Offset = 0x0000000000000000;
	}

	fscanf(out->VF_File, "Lum_Gain=%d\n", &i);
	fscanf(out->VF_File, "Lum_Offset=%d\n", &j);

	if (i==128 && j==0)
		Luminance_Flag = 0;
	else
	{
		Luminance_Flag = 1;
		LumGainMask = ((__int64)i<<48) + ((__int64)i<<32) + ((__int64)i<<16) + (__int64)i;
		LumOffsetMask = ((__int64)j<<48) + ((__int64)j<<32) + ((__int64)j<<16) + (__int64)j;

		lum = (unsigned char*)malloc(Coded_Picture_Width * Coded_Picture_Height);
	}

	fscanf(out->VF_File, "Field_Operation=%d\n", &FO_Flag);
	fscanf(out->VF_File, "Frame_Rate=%d\n\n", &(out->VF_FrameRate));

	fscanf(out->VF_File, "%d %X ", &i, &j);
	fscanf(out->VF_File, "%d %X", &i, &j);

	ntsc = film = top = bottom = gop = mapping = repeat_on = repeat_off = repeat_init = 0;

	while (fscanf(out->VF_File, "%d", &type) && type<9)
	{
		if (type==7)	// I frame
		{
			GOPList[gop] = calloc(1, sizeof(GOPLIST));
			GOPList[gop]->number = film;
			fscanf(out->VF_File, "%d %X", &(GOPList[gop]->file), &j);

			GOPList[gop]->position = (__int64)j*BUFFER_SIZE;
			gop ++;

			fscanf(out->VF_File, "%d", &j);
			tff = j>>1;
			rff = j & 1;
		}
		else	// P, B frame
		{
			tff = type>>1;
			rff = type & 1;
		}

		if (!film)
		{
			if (tff)
				Field_Order = 1;
			else
				Field_Order = 0;
		}

		if (FO_Flag==FO_FILM)
		{
			if (rff)
				repeat_on++;
			else
				repeat_off++;

			if (repeat_init)
			{
				if (repeat_off-repeat_on == 5)
				{
					repeat_on = repeat_off = 0;
				}
				else
				{
					FrameList[mapping] = calloc(1, sizeof(FRAMELIST));
					FrameList[mapping]->top = FrameList[mapping]->bottom = film;
					mapping ++;
				}

				if (repeat_on-repeat_off == 5)
				{
					repeat_on = repeat_off = 0;
					FrameList[mapping] = calloc(1, sizeof(FRAMELIST));
					FrameList[mapping]->top = FrameList[mapping]->bottom = film;
					mapping ++;
				}
			}
			else
			{
				if (repeat_off-repeat_on == 3)
				{
					repeat_on = repeat_off = 0;
					repeat_init = 1;
				}
				else
				{
					FrameList[mapping] = calloc(1, sizeof(FRAMELIST));
					FrameList[mapping]->top = FrameList[mapping]->bottom = film;
					mapping ++;
				}

				if (repeat_on-repeat_off == 3)
				{
					repeat_on = repeat_off = 0;
					repeat_init = 1;

					FrameList[mapping] = calloc(1, sizeof(FRAMELIST));
					FrameList[mapping]->top = FrameList[mapping]->bottom = film;
					mapping ++;
				}
			}
		}
		else
		{
			if (top)
			{
				FrameList[ntsc]->bottom = film;
				ntsc ++;
				FrameList[ntsc] = calloc(1, sizeof(FRAMELIST));
				FrameList[ntsc]->top = film;
			}
			else if (bottom)
			{
				FrameList[ntsc]->top = film;
				ntsc ++;
				FrameList[ntsc] = calloc(1, sizeof(FRAMELIST));
				FrameList[ntsc]->bottom = film;
			}
			else
			{
				FrameList[ntsc] = calloc(1, sizeof(FRAMELIST));
				FrameList[ntsc]->top = film;
				FrameList[ntsc]->bottom = film;
				ntsc ++;
			}

			if (rff)
			{
				if (!top && !bottom)
					FrameList[ntsc] = calloc(1, sizeof(FRAMELIST));

				if (tff)
				{
					FrameList[ntsc]->top = film;
					top = 1;
				}
				else
				{
					FrameList[ntsc]->bottom = film;
					bottom = 1;
				}

				if (top && bottom)
				{
					top = bottom = 0;
					ntsc ++;
				}
			}
		}

		film ++;
	}

	out->VF_FrameBound = film;
	film -= 2;

	if (FO_Flag==FO_FILM)
	{
		while (FrameList[mapping-1]->top >= film)
			mapping --;

		out->VF_FrameLimit = mapping;
	}
	else
	{
		if (FO_Flag==FO_SWAP)
		{
			Field_Order = !Field_Order;

			if (Field_Order)
				for (i=0; i<ntsc-1; i++)
					FrameList[i]->bottom = FrameList[i+1]->bottom;
			else
				for (i=0; i<ntsc-1; i++)
					FrameList[i]->top = FrameList[i+1]->top;
		}

		while ((FrameList[ntsc-1]->top >= film) || (FrameList[ntsc-1]->bottom >= film))
			ntsc --;

		out->VF_FrameLimit = ntsc;

		for (i=0; i<out->VF_FrameLimit-1; i++)
			if (FrameList[i]->top==FrameList[i+1]->top || FrameList[i]->top==FrameList[i+1]->bottom ||
				FrameList[i]->bottom==FrameList[i+1]->top || FrameList[i]->bottom==FrameList[i+1]->bottom)
			{
				FrameList[i]->forward = 1;
				FrameList[i+1]->backward = 1;
			}
	}

	Full_Frame = 1;
	for (i=0; i<out->VF_FrameLimit; i++)
		if (FrameList[i]->top!=FrameList[i]->bottom)
		{
			Full_Frame = 0;
			break;
		}

	out->VF_GOPNow = out->VF_GOPLimit = gop;
	out->VF_OldFrame = out->VF_FrameLimit;
	out->VF_FrameSize = Coded_Picture_Width * Coded_Picture_Height * 3;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线不卡视频| 首页国产欧美日韩丝袜| 日韩精品乱码免费| 国产麻豆视频一区二区| 北条麻妃国产九九精品视频| 成人av网址在线| 91精品国产综合久久国产大片| 欧美精品一区二| 亚洲日本一区二区三区| 日韩国产在线观看| eeuss鲁一区二区三区| 欧美美女网站色| 欧美变态口味重另类| 国产精品理论在线观看| 舔着乳尖日韩一区| 成人国产精品视频| 欧美一区二区三区在线| 亚洲久草在线视频| 亚洲午夜久久久久| av不卡一区二区三区| 欧美电影在线免费观看| 国产精品萝li| 久久精品国产99久久6| 欧美优质美女网站| 中文字幕一区三区| 肉色丝袜一区二区| 91麻豆国产香蕉久久精品| 精品国精品国产尤物美女| 亚洲欧美另类小说视频| 国产精品一线二线三线精华| 欧美精品一二三四| 成人欧美一区二区三区| 国产精品主播直播| 欧美一二三四区在线| 亚洲男同1069视频| 成人av电影在线| 国产亚洲精品aa| 久久机这里只有精品| 欧美三级午夜理伦三级中视频| 中文字幕av一区 二区| 精品一区二区三区在线视频| 欧美日韩综合色| 亚洲欧洲中文日韩久久av乱码| 国内精品伊人久久久久影院对白| 欧美日韩精品一区二区三区四区| 一区二区三区成人| 色综合久久中文综合久久97| 日韩精品一区二区三区四区视频| 偷拍亚洲欧洲综合| 欧美日韩精品一区二区三区| 亚洲福利视频导航| 欧美日韩一区高清| 亚洲国产另类精品专区| 91精品1区2区| 亚洲成人一二三| 欧美性videosxxxxx| 一区二区三区免费看视频| 日本久久精品电影| 亚洲综合视频网| 欧美手机在线视频| 日韩经典一区二区| 欧美一激情一区二区三区| 一区二区三区中文字幕| 欧美性受极品xxxx喷水| 日韩主播视频在线| 欧美刺激午夜性久久久久久久| 久久精品国产网站| 国产精品乱码久久久久久| 色综合久久中文字幕综合网| 亚洲国产aⅴ天堂久久| 欧美一区二区大片| 水蜜桃久久夜色精品一区的特点| 91麻豆精品国产91久久久资源速度| 蜜臂av日日欢夜夜爽一区| 精品国产电影一区二区| 丰满少妇久久久久久久 | 亚洲男人的天堂一区二区| 色妹子一区二区| 日韩在线播放一区二区| 国产欧美1区2区3区| av一区二区三区在线| 亚洲九九爱视频| 欧美电影免费提供在线观看| 成人h动漫精品| 日韩国产精品久久| 精品粉嫩aⅴ一区二区三区四区| 成人免费av网站| 性做久久久久久久久| 精品日韩在线一区| 色婷婷一区二区| 激情av综合网| 日本一区二区综合亚洲| 欧美美女喷水视频| 成人av在线一区二区| 日本不卡一区二区三区高清视频| 亚洲国产精品99久久久久久久久| 精品视频免费在线| 国产精品亚洲专一区二区三区| 亚洲视频你懂的| 精品国产a毛片| 欧美色综合网站| 成人午夜精品一区二区三区| 午夜激情久久久| 国产午夜一区二区三区| 日韩视频国产视频| 91丨porny丨户外露出| 韩国av一区二区| 午夜成人免费视频| 亚洲欧美偷拍三级| 337p日本欧洲亚洲大胆色噜噜| 欧美视频完全免费看| 成人av电影在线观看| 国产真实乱子伦精品视频| 五月婷婷综合激情| 亚洲区小说区图片区qvod| 国产亚洲成av人在线观看导航| 欧美一区二区黄| 欧美久久久久久蜜桃| 色老综合老女人久久久| 午夜精品免费在线观看| 欧美专区亚洲专区| 亚洲欧美一区二区三区孕妇| 欧美日韩美女一区二区| 国产精品中文字幕欧美| 亚洲黄色性网站| 欧美人妖巨大在线| 岛国av在线一区| 亚洲成人在线观看视频| 中文字幕一区二区三区在线观看| 欧美精品v国产精品v日韩精品| 国产成都精品91一区二区三| 免费观看一级欧美片| 日韩主播视频在线| 香蕉成人啪国产精品视频综合网| 最新日韩在线视频| 国产精品第五页| 最新久久zyz资源站| 国产精品毛片无遮挡高清| 久久久五月婷婷| 欧美国产97人人爽人人喊| 久久精品人人做人人综合| 欧美激情一区二区三区在线| 久久九九国产精品| 国产精品乱人伦中文| 日本一区二区免费在线| 国产清纯白嫩初高生在线观看91 | 欧美色手机在线观看| 精品国产一区二区在线观看| 亚洲男同性恋视频| 麻豆成人综合网| 国产综合成人久久大片91| 天天影视涩香欲综合网| 国产激情精品久久久第一区二区| 亚洲欧洲成人av每日更新| 制服丝袜亚洲网站| 日韩欧美国产综合| 国产亚洲一区二区三区四区| 综合精品久久久| 久久国产精品99精品国产| 不卡av在线免费观看| 91精品国产免费久久综合| 久久先锋影音av鲁色资源网| 亚洲色大成网站www久久九九| 日本亚洲免费观看| av激情综合网| 日韩欧美国产综合一区| 夜夜揉揉日日人人青青一国产精品| 亚洲图片一区二区| 97se亚洲国产综合在线| 精品久久人人做人人爱| 亚洲电影第三页| 91久久精品一区二区三| 国产欧美日韩视频一区二区 | 欧美性大战xxxxx久久久| 精品国产乱码久久久久久老虎 | 欧美综合一区二区| 欧美一级久久久| 亚洲妇熟xx妇色黄| 在线免费观看成人短视频| 国产精品白丝在线| 黄网站免费久久| 26uuu国产在线精品一区二区| 亚洲国产aⅴ成人精品无吗| 色丁香久综合在线久综合在线观看| 国产精品久久二区二区| 国产成人啪午夜精品网站男同| 欧美va亚洲va香蕉在线| 老汉av免费一区二区三区| 日韩视频国产视频| 国产精品一品二品| 中文字幕精品综合| 色婷婷香蕉在线一区二区| 亚洲mv在线观看| 欧美zozo另类异族| 337p亚洲精品色噜噜狠狠| 亚洲福利一二三区| 亚洲精品写真福利| 一区二区免费看| 国产精品美女一区二区| 国产三级一区二区三区|