示例#1
0
/*****************************************************************************
 * FUNCTION
 *  gui_image_query_cache_type
 * DESCRIPTION
 *  Query image type to cache
 * PARAMETERS
 *  image_id       [IN] Image resource ID
 *  filename       [IN] Filename
 * RETURNS
 *  gui_cache_image_type_enum
 *****************************************************************************/
gui_cache_image_type_enum gui_image_query_cache_type(MMI_ID_TYPE image_id, PS8 filename)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U16 image_type;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* get image type */
    if (image_id != 0)
    {
        image_type = gdi_image_get_type_from_id(image_id);
    }
    else
    {   
        image_type = gdi_image_get_type_from_file(filename);
    }

    /* Do nothing if the image is invalid. */
    if (image_type == GDI_IMAGE_TYPE_INVALID)
    {
        return GUI_CACHE_IMAGE_NONE;
    }
    
#if (defined(MT6223) || defined(MT6223P) || defined(MT6205) || defined(MT6205B))
    /* For 6223 and 6205, cache GIF and JPG images by PBM. */
    if ((image_type == GDI_IMAGE_TYPE_JPG) || (image_type == GDI_IMAGE_TYPE_JPG_FILE) ||
        (image_type == GDI_IMAGE_TYPE_GIF) || (image_type == GDI_IMAGE_TYPE_GIF_FILE))
    {
        return GUI_CACHE_IMAGE_PBM;
    }
#endif /* (defined(MT6223) || defined(MT6223P) || defined(MT6205) || defined(MT6205B)) */
    
    return GUI_CACHE_IMAGE_NONE;
}
示例#2
0
/*****************************************************************************
 * FUNCTION
 *  gdi_image_decoder_decode_file_with_output_clipping
 * DESCRIPTION
 *  
 * PARAMETERS
 *  offset_x            [IN]        
 *  offset_y            [IN]        
 *  width               [IN]        
 *  height              [IN]        
 *  output_clipx1       [IN]        
 *  output_clipy1       [IN]        
 *  output_clipx2       [IN]        
 *  output_clipy2       [IN]        
 *  is_blt              [IN]        
 *  image_name          [?]         
 *  handle_ptr          [?]         
 * RETURNS
 *  
 *****************************************************************************/
GDI_RESULT gdi_image_decoder_decode_file_with_output_clipping(
            S32 offset_x,
            S32 offset_y,
            S32 width,
            S32 height,
            S32 output_clipx1,
            S32 output_clipy1,
            S32 output_clipx2,
            S32 output_clipy2,
            BOOL is_blt,
            S8 *image_name,
            gdi_handle *handle_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    GDI_ENTER_CRITICAL_SECTION(gdi_image_decoder_decode_file)
    S16 valid_idx;
    S16 this_idx;
    U32 file_size;
    BOOL has_entry = FALSE;
    FS_HANDLE file_handle;
    U16 image_type;

    if (handle_ptr != NULL)
    {
        *handle_ptr = GDI_ERROR_HANDLE;
    }

     
    if (width == 0 || height == 0)
    {
        GDI_RETURN(GDI_SUCCEED);
    }
    /* check if it is a decodable file format */
    image_type = gdi_image_get_type_from_file(image_name);

    if (image_type != GDI_IMAGE_TYPE_JPG_FILE)  /* currently, we only support jpeg file */
    {
        GDI_RETURN(GDI_IMAGE_DECODER_ERR_INVALID_IMG_TYPE);
    }

    /* find a valid entry to record this jpeg decoder */
    for (valid_idx = 0; valid_idx < GDI_IMAGE_DECODER_ITEM_COUNT; valid_idx++)
    {
        if (gdi_image_decoder_item_list[valid_idx].is_used == FALSE)
        {
            has_entry = TRUE;
            break;
        }
    }

    if (has_entry == FALSE)
    {
        /* cant find entry to save jpeg decoder data */
        GDI_RETURN(GDI_IMAGE_DECODER_ERR_NO_ITEM_ENTRY);
    }

    /* open file */
    file_handle = DRM_open_file((U16*) image_name, FS_READ_ONLY, 0);

    if (file_handle >= 0)
    {
        /* check if size can fit into file buffer */
        /* DRM_REPLACE */
        /* FS_GetFileSize(file_handle, (kal_uint32*)&file_size); */
        DRM_file_size(file_handle, (kal_uint32*) & file_size);

        /* check if dest size larger than intermediate frame buffer */
        if (gdi_image_decoder_frame_buf_size < (U32) ((width + 16) * (height + 16)))    /* +16 for jpeg's stuffing */
        {
            /* DRM_REPLACE */
            /* FS_Close(file_handle); */
            DRM_close_file(file_handle);
            GDI_RETURN(GDI_IMAGE_DECODER_ERR_FRAME_BUF_NOT_ENOUGH);
        }

        if (gdi_image_decoder_item_first_idx == -1)
        {
            /* first in the list, re-assign first index */
            gdi_image_decoder_item_first_idx = valid_idx;
        }
        else
        {
            this_idx = gdi_image_decoder_item_first_idx;

            /* loop to find next */
            while (this_idx != -1)
            {
                if (gdi_image_decoder_item_list[this_idx].next_idx == -1)
                {
                    gdi_image_decoder_item_list[this_idx].next_idx = valid_idx;
                    break;
                }

                this_idx = gdi_image_decoder_item_list[this_idx].next_idx;
            }
        }

        /* find a valid seq number */
        if (gdi_image_decoder_item_seq_num_idx < GDI_IMAGE_DECODER_ITEM_SEQ_NUM_LIMIT - 1)
        {
            gdi_image_decoder_item_seq_num_idx++;
        }
        else
        {
            gdi_image_decoder_item_seq_num_idx = 1;
        }

        gdi_image_decoder_item_list[valid_idx].is_used = TRUE;
        gdi_image_decoder_item_list[valid_idx].file_handle = file_handle;
        gdi_image_decoder_item_list[valid_idx].is_blt = is_blt;
        gdi_image_decoder_item_list[valid_idx].img_type = image_type;
        gdi_image_decoder_item_list[valid_idx].dest_offset_x = offset_x;
        gdi_image_decoder_item_list[valid_idx].dest_offset_y = offset_y;
        gdi_image_decoder_item_list[valid_idx].dest_width = (U16) width;
        gdi_image_decoder_item_list[valid_idx].dest_height = (U16) height;
        gdi_image_decoder_item_list[valid_idx].next_idx = -1;
        gdi_image_decoder_item_list[valid_idx].seq_num = gdi_image_decoder_item_seq_num_idx;
        gdi_image_decoder_item_list[valid_idx].layer_handle = (gdi_handle) gdi_act_layer;
        gdi_image_decoder_item_list[valid_idx].lcd_handle = GDI_LCD->act_handle;
        gdi_image_decoder_item_list[valid_idx].clipx1 = gdi_act_layer->clipx1;
        gdi_image_decoder_item_list[valid_idx].clipy1 = gdi_act_layer->clipy1;
        gdi_image_decoder_item_list[valid_idx].clipx2 = gdi_act_layer->clipx2;
        gdi_image_decoder_item_list[valid_idx].clipy2 = gdi_act_layer->clipy2;
        gdi_image_decoder_item_list[valid_idx].output_clipx1 = output_clipx1;
        gdi_image_decoder_item_list[valid_idx].output_clipy1 = output_clipy1;
        gdi_image_decoder_item_list[valid_idx].output_clipx2 = output_clipx2;
        gdi_image_decoder_item_list[valid_idx].output_clipy2 = output_clipy2;

        if (gdi_image_decoder_item_list[gdi_image_decoder_item_first_idx].next_idx == -1)
        {
            /* only one jpeg wait to decoder, call this function, if already has another jpeg is decoding,
               the following function will be called when the previous jpeg is decoderd */
            gdi_image_decoder_decode_from_list();
        }

        /* succeed create a jpeg decoder entry , return it's sequential no as handle */
        if (handle_ptr != NULL)
        {
            *handle_ptr = gdi_image_decoder_item_seq_num_idx;
        }

        GDI_RETURN(GDI_SUCCEED);
    }
    else
    {
        /* open File error */
        GDI_RETURN(GDI_IMAGE_DECODER_ERR_OPEN_FILE_FAILED);
    }
    GDI_EXIT_CRITICAL_SECTION(gdi_image_decoder_decode_file)
}