video_util_resize.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  *  Filtered Image Rescaling by Dale Schumacher
  3.  */
  4. #ifndef _SCALEIMAGE_H_
  5. #define _SCALEIMAGE_H_
  6. #include <math.h>
  7. /* This type represents one pixel */
  8. typedef unsigned char pixel_t;
  9. /* Helper structure that holds information about image */
  10. typedef struct
  11. {
  12.     int     xsize;      /* horizontal size of the image in pixel_ts */
  13.     int     ysize;      /* vertical size of the image in pixel_ts */
  14.     pixel_t *data;      /* pointer to first scanline of image */
  15.     int     span;       /* byte offset between two scanlines */
  16.     int     pixspan;    /* byte offset between two pixels on line (usually 1) */
  17. } image_t;
  18. /* Initializes image_t structure for given width and height.
  19.    Please do NOT manipulate xsize, span and ysize properties directly,
  20.    scaling code has inverted meaning of x and y axis 
  21.    (i.e. w=ysize, h=xsize)  */
  22. extern void scale_setup_image(image_t *img, int w, int h, int depth, pixel_t *data);
  23. typedef int fixdouble;
  24. #define double2fixdouble(d) ((fixdouble)((d) * 65536))
  25. #define fixdouble2int(d)    (((d) + 32768) >> 16)
  26. typedef union
  27. {
  28.    pixel_t      *pixel;
  29.    fixdouble     weight;
  30.    int           index;
  31.    int           count;
  32. } instruction_t;
  33. /* This structure holds the state of scaling function just after
  34.    initialization and before image processing. The advantage of
  35.    this approach is that you can do as much of (CPU intensive)
  36.    processing as possible only once and use relatively fast
  37.    function for per-frame processing.  */
  38. typedef struct
  39. {
  40.     image_t       *src, *dst;
  41.     pixel_t       *tmp;
  42.     instruction_t *programY, *programX;
  43. }  scaler_t;
  44. extern image_t *scale_new_image(int xsize, int ysize, int depth);
  45. /* Initializes scaling for given destination and source dimensions
  46.    and depths and filter function. */
  47. extern scaler_t *scale_image_init(image_t *dst, image_t *src,
  48.                                  double (*filterf)(double), double fwidth);
  49. /* Processes frame.  */
  50. extern void scale_image_process(scaler_t *scaler);
  51. /* Shuts down scaler, deallocates memory. */
  52. extern void scale_image_done(scaler_t *scaler);
  53. extern void scale_free_image(image_t *image);
  54. /* These are filter functions and their respective fwidth values
  55.    that you can use when filtering. The higher fwidth is, the
  56.    longer processing takes. Filter function's cost is much less
  57.    important because it is computed only once, during scaler_t
  58.    initialization.
  59. */
  60. #define       Box_support       (0.5)
  61. extern double Box_filter(double t);
  62. #define       Triangle_support  (1.0)
  63. extern double Triangle_filter(double t);
  64. #define       Hermite_support   (1.0)
  65. extern double Hermite_filter(double t);
  66. #define       Bell_support      (1.5)
  67. extern double Bell_filter(double t);        /* box (*) box (*) box */
  68. #define       B_spline_support  (2.0)
  69. extern double B_spline_filter(double t);    /* box (*) box (*) box (*) box */
  70. #define       Mitchell_support  (2.0)
  71. extern double Mitchell_filter(double t);
  72. #define       Lanczos3_support  (3.0)
  73. extern double Lanczos3_filter(double t);
  74. #endif