📄 mme_project.c
字号:
{
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 + -