Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) 2006-2012 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  21.  * DEALINGS IN THE SOFTWARE.
  22.  */
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <string.h>
  27. #include <assert.h>
  28. #include <math.h>
  29.  
  30. #include "intel_driver.h"
  31. #include "intel_media.h"
  32.  
  33. //static pthread_mutex_t free_avc_surface_lock = PTHREAD_MUTEX_INITIALIZER;
  34.  
  35. void
  36. gen_free_avc_surface(void **data)
  37. {
  38.     GenAvcSurface *avc_surface;
  39.  
  40. //    pthread_mutex_lock(&free_avc_surface_lock);
  41.  
  42.     avc_surface = *data;
  43.  
  44.     if (!avc_surface) {
  45. //        pthread_mutex_unlock(&free_avc_surface_lock);
  46.         return;
  47.     }
  48.  
  49.  
  50.     dri_bo_unreference(avc_surface->dmv_top);
  51.     avc_surface->dmv_top = NULL;
  52.     dri_bo_unreference(avc_surface->dmv_bottom);
  53.     avc_surface->dmv_bottom = NULL;
  54.  
  55.     free(avc_surface);
  56.     *data = NULL;
  57.  
  58. //    pthread_mutex_unlock(&free_avc_surface_lock);
  59. }
  60.  
  61. /* This is to convert one float to the given format interger.
  62.  * For example: 1.25 to S1.6 or U2.6 and so on
  63.  */
  64. int intel_format_convert(float src, int out_int_bits, int out_frac_bits,int out_sign_flag)
  65. {
  66.      unsigned char negative_flag = (src < 0.0) ? 1 : 0;
  67.      float src_1 = (!negative_flag)? src: -src ;
  68.      unsigned int factor = 1 << out_frac_bits;
  69.      int output_value = 0;
  70.  
  71.      unsigned int integer_part  = floorf(src_1);
  72.      unsigned int fraction_part = ((int)((src_1 - integer_part) * factor)) & (factor - 1) ;
  73.  
  74.      output_value = (integer_part << out_frac_bits) | fraction_part;
  75.  
  76.      if(negative_flag)
  77.          output_value = (~output_value + 1) & ((1 <<(out_int_bits + out_frac_bits)) -1);
  78.  
  79.      if(out_sign_flag == 1 && negative_flag)
  80.      {
  81.           output_value |= negative_flag <<(out_int_bits + out_frac_bits);
  82.      }
  83.      return output_value;
  84. }
  85.