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

📄 video_file_creator.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
MEDIA_STATUS_CODE video_enc_get_type(STFSAL * meta_file, kal_uint32 * type)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_is_short_header);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)type, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_framerate(STFSAL * meta_file, kal_uint32 * frame_rate)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_average_frame_rate);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)frame_rate, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_timescale(STFSAL * meta_file, kal_uint32 * timescale)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_time_scale);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)timescale, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_frame_size(STFSAL * meta_file, kal_uint32 * width, kal_uint32 * height)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_frame_width);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)width, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)height, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_vos_length(STFSAL * meta_file, kal_uint32 * length)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_vos_length);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)length, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_vos_data(kal_uint8 * vos, kal_uint32 length, STFSAL * meta_file)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_vos_data);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)vos, length);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_mdatsz_pos(STFSAL * meta_file, kal_uint32 * pos)
{
    g_video_enc_status.FSAL_STATUS = FSAL_Seek(meta_file, file_create_pos_video_mdatsz_pos);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(meta_file, (kal_uint8 *)pos, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = meta_file;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE mpeg4_get_frame_timestamp_from_meta_file(kal_uint32 frame_number, kal_uint32 vos_length, kal_uint32 * result)
{
    kal_uint32 length_pos;

    length_pos = (((file_create_pos_vos_data + vos_length + 3) / 4) * 4) + (8 * frame_number);

    g_video_enc_status.FSAL_STATUS = FSAL_Seek(&mp4_files.MEDIA_META_FILE, length_pos);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = &mp4_files.MEDIA_META_FILE;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(&mp4_files.MEDIA_META_FILE, (kal_uint8 *)result, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = &mp4_files.MEDIA_META_FILE;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE mpeg4_get_frame_length_from_meta_file(kal_uint32 frame_number, kal_uint32 vos_length, kal_uint32 * result)
{
    kal_uint32 length_pos;

    length_pos = (((file_create_pos_vos_data + vos_length + 3) / 4) * 4) + (8 * frame_number) + 4;

    g_video_enc_status.FSAL_STATUS = FSAL_Seek(&mp4_files.MEDIA_META_FILE, length_pos);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = &mp4_files.MEDIA_META_FILE;
        return FSAL_ERROR;
    }

    g_video_enc_status.FSAL_STATUS = FSAL_Read(&mp4_files.MEDIA_META_FILE, (kal_uint8 *)result, 4);

    if (g_video_enc_status.FSAL_STATUS != FSAL_OK)
    {
        VIDEO_ASSERT(0);

        g_video_enc_status.FSAL_ERROR_FILE = &mp4_files.MEDIA_META_FILE;
        return FSAL_ERROR;
    }

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE mpeg4_generate_max_buffer_and_frame(kal_uint32 * total_frame_length, kal_uint32 * avg_frame, kal_uint32 * max_frame, kal_uint32 frame_number, kal_uint32 frame_rate, kal_uint32 vos_length)
{
    kal_uint32 i;

    kal_uint32 total;
    kal_uint32 total1;
    kal_uint32 frame_length_i;
    MEDIA_STATUS_CODE result;

    result = mpeg4_get_frame_length_from_meta_file(0, vos_length, &total1);

    if (result != MEDIA_STATUS_OK)
    {
        VIDEO_ASSERT(0);
        return result;
    }

    total = total1;
    *total_frame_length = 0;
    *max_frame = total1;

    for (i = 1; i < frame_number; i++)
    {
        result = mpeg4_get_frame_length_from_meta_file(i, vos_length, &frame_length_i);

        if (result != MEDIA_STATUS_OK)
        {
            VIDEO_ASSERT(0);
            return result;
        }

        if (*max_frame<frame_length_i)
            *max_frame = frame_length_i;

        total += frame_length_i;
        total1 += frame_length_i;
        if ((i + 1) % (frame_rate) == 0)
        {
            if (*total_frame_length<total1)
                *total_frame_length = total1;
            total1 = 0;
        }
    }

    if (*total_frame_length<total1)
        *total_frame_length = total1;

    *total_frame_length = *total_frame_length * 8; //bits
    total = total * 8;                             //bits
    *avg_frame = total *(frame_rate / frame_number);
    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE mpeg4_generate_avg_buffer_and_frame(kal_uint32 * total_frame_length, kal_uint32 * max_frame, kal_uint32 frame_number, kal_uint32 frame_rate, kal_uint32 vos_length)
{
    kal_uint32 total;

    kal_uint32 i;
    kal_uint32 temp;
    MEDIA_STATUS_CODE result;

    total = 0;

    for (i = 0; i < frame_number; i++)
    {
        result = mpeg4_get_frame_length_from_meta_file(i, vos_length, &temp);

        if (result != MEDIA_STATUS_OK)
        {
            VIDEO_ASSERT(0);
            return result;
        }
        total += temp;
    }

    total *= 8;

    //if( frame_number > (int)(frame_rate));
    total = total * (int)(frame_rate / ((int)frame_number));

    return MEDIA_STATUS_OK;
}

MEDIA_STATUS_CODE video_enc_get_total_duration(MP4_FILE_CREATE_STRUCT * file_creat_struct, kal_uint32 * duration)
{
    kal_uint32 i;

    kal_uint32 temp_prev;
    kal_uint32 temp;
    MEDIA_STATUS_CODE result;
    kal_uint32 vos_length;
    kal_uint32 pre_duration = 0;
    kal_uint32 stts_time;

    *duration = 0;
    temp_prev = 0;

    if (file_creat_struct->frame_number == 1)
    {
        *duration = 500;
    }
    else
    {
        g_video_enc_status.FSAL_STATUS = FSAL_Seek(&mp4_files.MEDIA_META_FILE, file_create_pos_vos_length);

⌨️ 快捷键说明

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