mc.h
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * mc.h: h264 encoder library (Motion Compensation)
  3.  *****************************************************************************
  4.  * Copyright (C) 2004-2008 Loren Merritt <lorenm@u.washington.edu>
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
  19.  *****************************************************************************/
  20. #ifndef X264_MC_H
  21. #define X264_MC_H
  22. /* Do the MC
  23.  * XXX: Only width = 4, 8 or 16 are valid
  24.  * width == 4 -> height == 4 or 8
  25.  * width == 8 -> height == 4 or 8 or 16
  26.  * width == 16-> height == 8 or 16
  27.  * */
  28. typedef struct
  29. {
  30.     void (*mc_luma)(uint8_t *dst, int i_dst, uint8_t **src, int i_src,
  31.                     int mvx, int mvy,
  32.                     int i_width, int i_height );
  33.     /* may round up the dimensions if they're not a power of 2 */
  34.     uint8_t* (*get_ref)(uint8_t *dst, int *i_dst, uint8_t **src, int i_src,
  35.                         int mvx, int mvy,
  36.                         int i_width, int i_height );
  37.     /* mc_chroma may write up to 2 bytes of garbage to the right of dst,
  38.      * so it must be run from left to right. */
  39.     void (*mc_chroma)(uint8_t *dst, int i_dst, uint8_t *src, int i_src,
  40.                       int mvx, int mvy,
  41.                       int i_width, int i_height );
  42.     void (*avg[10])( uint8_t *dst, int, uint8_t *src1, int, uint8_t *src2, int, int i_weight );
  43.     /* only 16x16, 8x8, and 4x4 defined */
  44.     void (*copy[7])( uint8_t *dst, int, uint8_t *src, int, int i_height );
  45.     void (*copy_16x16_unaligned)( uint8_t *dst, int, uint8_t *src, int, int i_height );
  46.     void (*plane_copy)( uint8_t *dst, int i_dst,
  47.                         uint8_t *src, int i_src, int w, int h);
  48.     void (*hpel_filter)( uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, uint8_t *src,
  49.                          int i_stride, int i_width, int i_height, int16_t *buf );
  50.     /* prefetch the next few macroblocks of fenc or fdec */
  51.     void (*prefetch_fenc)( uint8_t *pix_y, int stride_y,
  52.                            uint8_t *pix_uv, int stride_uv, int mb_x );
  53.     /* prefetch the next few macroblocks of a hpel reference frame */
  54.     void (*prefetch_ref)( uint8_t *pix, int stride, int parity );
  55.     void *(*memcpy_aligned)( void *dst, const void *src, size_t n );
  56.     void (*memzero_aligned)( void *dst, int n );
  57.     /* successive elimination prefilter */
  58.     void (*integral_init4h)( uint16_t *sum, uint8_t *pix, int stride );
  59.     void (*integral_init8h)( uint16_t *sum, uint8_t *pix, int stride );
  60.     void (*integral_init4v)( uint16_t *sum8, uint16_t *sum4, int stride );
  61.     void (*integral_init8v)( uint16_t *sum8, int stride );
  62.     void (*frame_init_lowres_core)( uint8_t *src0, uint8_t *dst0, uint8_t *dsth, uint8_t *dstv, uint8_t *dstc,
  63.                                     int src_stride, int dst_stride, int width, int height );
  64.     void (*mbtree_propagate_cost)( int *dst, uint16_t *propagate_in, uint16_t *intra_costs,
  65.                                    uint16_t *inter_costs, uint16_t *inv_qscales, int len );
  66. } x264_mc_functions_t;
  67. void x264_mc_init( int cpu, x264_mc_functions_t *pf );
  68. #endif