当前位置: 代码迷 >> 综合 >> 多个gif图片按幻灯片方式长时间播放引起手机死机
  详细解决方案

多个gif图片按幻灯片方式长时间播放引起手机死机

热度:34   发布时间:2024-01-19 18:48:26.0
确认gdi_lfs会有leak file handle,Patch id: MAUI_03048124
可以按以下方法进行修改:
把函数
BOOL gdi_image_is_gif_file(U8 *file_name)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 f;
    U8 buf[3];
    kal_uint32 len;
    kal_int32 result;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    f = gdi_lfs_open(gdi_lfs_handle,(U16*) file_name, FS_READ_ONLY | FS_OPEN_NO_DIR | FS_OPEN_SHARED, 0);
    if (f < 0) 
    {
        return FALSE;
    }
    f = gdi_lfs_handle;
    
    result = gdi_lfs_read(f, buf, 3, &len);
    gdi_lfs_close(f);
    if (result == FS_NO_ERROR)
        if (len == 3)
            if (buf[0] == 'G' && buf[1] == 'I' && buf[2] == 'F')
            {
                return TRUE;
            }
    return FALSE;
}
改为:
BOOL gdi_image_is_gif_file(U8 *file_name)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 f;
    U8 buf[3];
    kal_uint32 len;
    kal_int32 result;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    f = DRM_open_file(
            (U16*) file_name,
            FS_READ_ONLY | FS_OPEN_NO_DIR | FS_OPEN_SHARED,
            DRM_PERMISSION_DISPLAY);
    if (f < 0) 
    {
        return FALSE;
    }
    
    result = DRM_read_file(f, buf, 3, &len);
    DRM_close_file(f);
    if (result == FS_NO_ERROR)
        if (len == 3)
            if (buf[0] == 'G' && buf[1] == 'I' && buf[2] == 'F')
            {
                return TRUE;
            }
    return FALSE;
}


把函数
BOOL gdi_image_is_png_file(U8 *file_name)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int f;
    U8 buf[8];
    U32 len;
    U32 result;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    f = gdi_lfs_open(gdi_lfs_handle,(U16*) file_name, FS_READ_ONLY | FS_OPEN_NO_DIR | FS_OPEN_SHARED, 0);
    if (f < 0) return FALSE;
    f = gdi_lfs_handle;
    result = gdi_lfs_read(f, buf, 8, &len);
    gdi_lfs_close(f);
    if (result == FS_NO_ERROR)
        if (len == 8)
            if (memcmp(buf, "\x89PNG\x0d\x0a\x1a\x0a", 8) == 0)
            {
                return TRUE;
            }
    return FALSE;
}
改为:
BOOL gdi_image_is_png_file(U8 *file_name)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    int f;
    U8 buf[8];
    U32 len;
    U32 result;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    f = DRM_open_file(
            (U16*) file_name,
            FS_READ_ONLY | FS_OPEN_NO_DIR | FS_OPEN_SHARED,
            DRM_PERMISSION_DISPLAY);
    if (f < 0) 
    {
        return FALSE;
    }
    result = DRM_read_file(f, buf, 8, &len);
    DRM_close_file(f);
    if (result == FS_NO_ERROR)
        if (len == 8)
            if (memcmp(buf, "\x89PNG\x0d\x0a\x1a\x0a", 8) == 0)
            {
                return TRUE;
            }
    return FALSE;
}

  相关解决方案