⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mme_project.c

📁 由bmp生成mpeg2 的I_frame 数据
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	return set_frame_index_mme_project(project, project->in_point);
}

/*-----------------------------------------------------------------*/
__int64 go_start_frame_mme_project(MME_PROJECT *project)
{
	return set_frame_index_mme_project(project, 0);
}

/*-----------------------------------------------------------------*/
__int64 go_end_frame_mme_project(MME_PROJECT *project)
{
	__int64 max;

	max = project->video_info.dwLengthH;
	max <<= 32;
	max += project->video_info.dwLengthL;

	return set_frame_index_mme_project(project, max-1);
}

/*-----------------------------------------------------------------*/
__int64 go_next_i_frame_mme_project(MME_PROJECT *project)
{
	__int64 i;
	__int64 max;
	
	VF_FrameType frame_type;

	max = project->video_info.dwLengthH;
	max <<= 32;
	max += project->video_info.dwLengthL;

	frame_type.dwSize = sizeof(VF_FrameType);
	
	for(i=project->frame_index+1;i<max;i++){
		frame_type.dwFrameNumberL = (DWORD)(i & 0xffffffff);
		frame_type.dwFrameNumberH = (DWORD)(i >> 32);
		frame_type.dwFrameType = VF_FRAME_TYPE_UNEDITABLE;
		
		project->func_edit_ext->GetFrameType(project->file, &frame_type);
		if(frame_type.dwFrameType == (VF_FRAME_TYPE_STARTABLE|VF_FRAME_TYPE_ENDABLE)){
			return set_frame_index_mme_project(project, i);
		}
	}

	sprintf(project->error_msg, msg_table[project->lang][MSG_FAILED_TO_FIND_I_FRAME]);
	return project->frame_index;
}

/*-----------------------------------------------------------------*/
__int64 go_prev_i_frame_mme_project(MME_PROJECT *project)
{
	__int64 i;
	__int64 max;
	
	VF_FrameType frame_type;

	max = project->video_info.dwLengthH;
	max <<= 32;
	max += project->video_info.dwLengthL;

	frame_type.dwSize = sizeof(VF_FrameType);
	
	for(i=project->frame_index-1;i>=0;i--){
		frame_type.dwFrameNumberL = (DWORD)(i & 0xffffffff);
		frame_type.dwFrameNumberH = (DWORD)(i >> 32);
		frame_type.dwFrameType = VF_FRAME_TYPE_UNEDITABLE;
		
		project->func_edit_ext->GetFrameType(project->file, &frame_type);
		if(frame_type.dwFrameType == (VF_FRAME_TYPE_STARTABLE|VF_FRAME_TYPE_ENDABLE)){
			return set_frame_index_mme_project(project, i);
		}
	}

	sprintf(project->error_msg, msg_table[project->lang][MSG_FAILED_TO_FIND_I_FRAME]);
	return project->frame_index;
}

/*-----------------------------------------------------------------*/
int set_in_point_mme_project(MME_PROJECT *project)
{
	VF_FrameType frame_type;

	frame_type.dwSize = sizeof(VF_FrameType);
	frame_type.dwFrameNumberL = (DWORD)(project->frame_index & 0xffffffff);
	frame_type.dwFrameNumberH = (DWORD)(project->frame_index >> 32);
	frame_type.dwFrameType = VF_FRAME_TYPE_UNEDITABLE;

	project->func_edit_ext->GetFrameType(project->file, &frame_type);
	if(frame_type.dwFrameType & VF_FRAME_TYPE_STARTABLE){
		project->in_point = project->frame_index;
		set_status_str(project);
		return 1;
	}

	sprintf(project->error_msg, msg_table[project->lang][MSG_FRAME_TYPE_NOT_STARTABLE], project->frame_index);
	return 0;
}

/*-----------------------------------------------------------------*/
int set_out_point_mme_project(MME_PROJECT *project)
{
	VF_FrameType frame_type;

	frame_type.dwSize = sizeof(VF_FrameType);
	frame_type.dwFrameNumberL = (DWORD)(project->frame_index & 0xffffffff);
	frame_type.dwFrameNumberH = (DWORD)(project->frame_index >> 32);
	frame_type.dwFrameType = VF_FRAME_TYPE_UNEDITABLE;

	project->func_edit_ext->GetFrameType(project->file, &frame_type);
	if(frame_type.dwFrameType & VF_FRAME_TYPE_ENDABLE){
		project->out_point = project->frame_index+1;
		set_status_str(project);
		return 1;
	}

	sprintf(project->error_msg, msg_table[project->lang][MSG_FRAME_TYPE_NOT_FINISHABLE], project->frame_index);
	return 0;
}

/*-----------------------------------------------------------------*/
__int64 get_frame_index_mme_project(MME_PROJECT *project)
{
	return project->frame_index;
}

/*-----------------------------------------------------------------*/
const BITMAPINFOHEADER *get_dib_header_mme_project(MME_PROJECT *project)
{
	return project->dib_header;
}

/*-----------------------------------------------------------------*/
int get_frame_width_mme_project(MME_PROJECT *project)
{
	const BITMAPINFOHEADER *bi;

	bi = get_dib_header_mme_project(project);

	return bi->biWidth;
}

/*-----------------------------------------------------------------*/
int get_frame_height_mme_project(MME_PROJECT *project)
{
	const BITMAPINFOHEADER *bi;

	bi = get_dib_header_mme_project(project);

	return bi->biHeight;
}

/*-----------------------------------------------------------------*/
__int64 get_frame_count_mme_project(MME_PROJECT *project)
{
	__int64 r;

	r = project->video_info.dwLengthH;
	r <<= 32;
	r += project->video_info.dwLengthL;

	return r;
}

/*-----------------------------------------------------------------*/
__int64 get_in_point_mme_project(MME_PROJECT *project)
{
	return project->in_point;
}

/*-----------------------------------------------------------------*/
__int64 get_out_point_mme_project(MME_PROJECT *project)
{
	return project->out_point;
}

/*------------------------------------------------------------------
 file local functions - implementation
 ------------------------------------------------------------------*/
/*-----------------------------------------------------------------*/
static void set_status_str(MME_PROJECT *project)
{
	char *p;

	VF_FrameType frame_type;
	TIMECODE tc;
	int fps;
	int drop;
	
	sprintf(project->status_str, " %s", read_filename(project->path));
	cut_suffix(project->status_str);
	p = strchr(project->status_str, '\0');
	sprintf(p, " : %I64d", project->frame_index);

	fps = (project->video_info.dwRate+project->video_info.dwScale-1) / project->video_info.dwScale;
	drop = project->video_info.dwRate % project->video_info.dwScale;
	frame2timecode(&(project->frame_index), &tc, fps, drop);

	p = strchr(project->status_str, '\0');
	sprintf(p, " [%02d:%02d:%02d:%02d]", tc.hh, tc.mm, tc.ss, tc.ff);

	frame_type.dwSize = sizeof(VF_FrameType);
	frame_type.dwFrameNumberL = (DWORD)(project->frame_index & 0xffffffff);
	frame_type.dwFrameNumberH = (DWORD)(project->frame_index >> 32);
	frame_type.dwFrameType = VF_FRAME_TYPE_UNEDITABLE;

	project->func_edit_ext->GetFrameType(project->file, &frame_type);
	if(frame_type.dwFrameType == (VF_FRAME_TYPE_STARTABLE|VF_FRAME_TYPE_ENDABLE)){
		strcat(project->status_str, " : I");
	}else if(frame_type.dwFrameType & VF_FRAME_TYPE_ENDABLE){
		strcat(project->status_str, " : P");
	}else if(frame_type.dwFrameType & VF_FRAME_TYPE_STARTABLE){
		strcat(project->status_str, " : Bc");
	}else{
		strcat(project->status_str, " : B");
	}
		       
	if(project->frame_index == project->in_point){
		strcat(project->status_str, " [in]");
	}
	
	if(project->frame_index == (project->out_point-1)){
		strcat(project->status_str, " [out]");
	}
}

/*-----------------------------------------------------------------*/
static const char *read_filename(const char *path)
{
	const char *ret;

	ret = path;
	
	while(*path){
		if(*path == PATH_DELIMITER){
			ret = path + 1;
		}
		path = CharNext(path);
	}

	return ret;
}

/*-----------------------------------------------------------------*/
static void cut_suffix(char *path)
{
	char *p;

	p = NULL;

	while(*path){
		if(*path == FILENAME_DELIMITER){
			p = path;
		}
		path = CharNext(path);
	}

	if(p){
		*p = '\0';
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -