📄 video_editor_timectrl.c
字号:
{
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_NO_SUCH_SAMPLE)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
}
if (g_video_dec_status.PARSE_STATUS == MP4_PARSER_NO_SUCH_SAMPLE)
{
video_frame_no = g_video_dec_info_ptr->total_frames_in_file-1;
}
g_video_dec_status.PARSE_STATUS = MP4_GetDecodeTime(VIDEO_EDITOR_DATA.pstVIDParser,
video_frame_no,
&temp_time_video_scale,
MP4_TRACK_VIDEO);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
video_time = VIDEO_ANYBASE_TO_COMMBASE(temp_time_video_scale, VIDEO_EDITOR_DATA.video_time_scale);
ASSERT(video_time <= ref_time);
/*AV sync info: end_time*/
VIDEO_EDITOR_DATA.video_avsync.delta_end_frame_duratoin = (ref_time-video_time+addition_time);
if ( VIDEO_EDITOR_DATA.video_avsync.delta_end_frame_duratoin < VIDEO_ANYBASE_TO_COMMBASE(VIDEO_EDITOR_DROP_DURATION, 1000) )
{
VIDEO_EDITOR_DATA.video_avsync.end_frame_number = (video_frame_no-1);
VIDEO_EDITOR_DATA.video_avsync.end_frame_discard = KAL_TRUE;
}
else
{
VIDEO_EDITOR_DATA.video_avsync.end_frame_number = video_frame_no;
VIDEO_EDITOR_DATA.video_avsync.end_frame_discard = KAL_FALSE;
}
return MEDIA_STATUS_OK;
}
MEDIA_STATUS_CODE video_editor_avsync_end_info(kal_uint32 end_time,
VEDITOR_AVSYNC_AUDIO_STRUCT *audio_avsync)
{
/*Only audio_avsync->audio_end_frame, and video AV sync end info*/
MEDIA_STATUS_CODE result;
kal_uint32 audio_frame_no;
kal_uint64 temp_time_audio_scale;
kal_uint32 audio_time;
kal_uint32 additional_time;
/*Audio*/
g_video_dec_status.PARSE_STATUS =
MP4_Audio_TimeToSampleNo(VIDEO_EDITOR_DATA.pstAUDParser,
end_time, /*Unit: ms*/
&audio_frame_no);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
if (audio_frame_no != 0)
audio_avsync->audio_end_frame = audio_frame_no-1;
VIDEO_EDITOR_DATA.audio_avsync.audio_end_frame = audio_avsync->audio_end_frame;
g_video_dec_status.PARSE_STATUS = MP4_GetDecodeTime(VIDEO_EDITOR_DATA.pstAUDParser,
audio_frame_no,
&temp_time_audio_scale,
MP4_TRACK_AUDIO);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_NO_SUCH_SAMPLE)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
}
audio_time = VIDEO_ANYBASE_TO_COMMBASE(temp_time_audio_scale, VIDEO_EDITOR_DATA.audio_time_scale);
/*Vidio*/
result = video_editor_per_audio_frame_duration(&additional_time);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
result = video_editor_avsync_video_end_info(audio_time, additional_time);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
return MEDIA_STATUS_OK;
}
MEDIA_STATUS_CODE video_editor_non_avsync_info(kal_uint32 video_start_time,
kal_uint32 audio_start_time,
kal_uint32 av_duration,
VEDITOR_AVSYNC_AUDIO_STRUCT *audio_avsync,
kal_uint32 *current_video_frame_no)
{
MEDIA_STATUS_CODE result;
kal_uint32 audio_frame_no;
kal_uint64 temp_starttime_audio_scale;
kal_uint64 temp_endtime_audio_scale;
kal_uint32 real_av_duration_ms;
kal_uint32 temp_starttime_comm_scale;
kal_uint32 temp_endtime_comm_scale;
kal_uint32 additional_time;
/*Audio*/
g_video_dec_status.PARSE_STATUS =
MP4_Audio_TimeToSampleNo(VIDEO_EDITOR_DATA.pstAUDParser,
audio_start_time, /*Unit: ms*/
&audio_frame_no);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
audio_avsync->audio_start_frame = audio_frame_no;
g_video_dec_status.PARSE_STATUS =
MP4_Audio_TimeToSampleNo(VIDEO_EDITOR_DATA.pstAUDParser,
(audio_start_time+av_duration), /*Unit: ms*/
&audio_frame_no);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
audio_avsync->audio_end_frame = audio_frame_no;
g_video_dec_status.PARSE_STATUS = MP4_GetDecodeTime(VIDEO_EDITOR_DATA.pstAUDParser,
audio_avsync->audio_start_frame,
&temp_starttime_audio_scale,
MP4_TRACK_AUDIO);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_NO_SUCH_SAMPLE)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
}
g_video_dec_status.PARSE_STATUS = MP4_GetDecodeTime(VIDEO_EDITOR_DATA.pstAUDParser,
audio_avsync->audio_end_frame,
&temp_endtime_audio_scale,
MP4_TRACK_AUDIO);
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_OK)
{
if (g_video_dec_status.PARSE_STATUS != MP4_PARSER_NO_SUCH_SAMPLE)
{
VIDEO_ASSERT(0);
return MP4_PARSER_ERROR;
}
}
real_av_duration_ms = VIDEO_ANYBASE_TO_ANYBASE( (temp_endtime_audio_scale-temp_starttime_audio_scale), VIDEO_EDITOR_DATA.audio_time_scale, 1000 );
temp_starttime_comm_scale = VIDEO_ANYBASE_TO_COMMBASE(video_start_time, 1000);
/*Video*/
result = video_editor_avsync_video_start_info(temp_starttime_comm_scale,
current_video_frame_no);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
result = video_editor_per_audio_frame_duration(&additional_time);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
temp_endtime_comm_scale = VIDEO_ANYBASE_TO_COMMBASE((video_start_time+real_av_duration_ms), 1000);
result = video_editor_avsync_video_end_info(temp_endtime_comm_scale, additional_time);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
return MEDIA_STATUS_OK;
}
MEDIA_STATUS_CODE video_editor_avsync_info(kal_bool av_sync,
kal_uint32 video_start_time,
kal_uint32 audio_start_time,
kal_uint32 av_duration,
VEDITOR_AVSYNC_AUDIO_STRUCT *audio_avsync,
kal_uint32 *current_video_frame_no)
{
MEDIA_STATUS_CODE result;
kal_uint32 audio_frame_duration;
result = video_editor_per_audio_frame_duration(&audio_frame_duration);
if(av_sync)
{
ASSERT(video_start_time == audio_start_time);
/*Start time*/
result = video_editor_avsync_start_info(video_start_time, audio_avsync, current_video_frame_no);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
/*End time*/
result = video_editor_avsync_end_info((video_start_time+av_duration), audio_avsync);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
}
else
{
result = video_editor_non_avsync_info(video_start_time,
audio_start_time,
av_duration,
audio_avsync,
current_video_frame_no);
if (result != MEDIA_STATUS_OK)
{
VIDEO_ASSERT(0);
return result;
}
}
return MEDIA_STATUS_OK;
}
#else /*!__VIDEO_EDITOR__*/
#include "drv_comm.h"
#endif /*__VIDEO_EDITOR__*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -