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

📄 video_editor_timectrl.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
   {
   	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 + -