diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2013-12-21 00:08:50 +0100 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2013-12-22 03:49:11 +0100 |
commit | 7398e0516f7fdf98e74e5ce8966ac02c28aba754 (patch) | |
tree | 68ee8678c2ec4b212c82cd1672285d8921bce526 /libavcodec | |
parent | be7c323176e2e5fcf30e3d2ff20975b2f936811b (diff) | |
download | ffmpeg-7398e0516f7fdf98e74e5ce8966ac02c28aba754.tar.gz |
hevc: move DSP declarations from hevc.h into hevcdsp.h
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/hevc.h | 82 | ||||
-rw-r--r-- | libavcodec/hevcdsp.c | 2 | ||||
-rw-r--r-- | libavcodec/hevcdsp.h | 109 |
3 files changed, 111 insertions, 82 deletions
diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h index 434e781bb0..014219795d 100644 --- a/libavcodec/hevc.h +++ b/libavcodec/hevc.h @@ -33,6 +33,7 @@ #include "cabac.h" #include "dsputil.h" #include "get_bits.h" +#include "hevcdsp.h" #include "internal.h" #include "thread.h" #include "videodsp.h" @@ -658,19 +659,6 @@ typedef struct TransformUnit { uint8_t is_cu_qp_delta_coded; } TransformUnit; -typedef struct SAOParams { - int offset_abs[3][4]; ///< sao_offset_abs - int offset_sign[3][4]; ///< sao_offset_sign - - int band_position[3]; ///< sao_band_position - - int eo_class[3]; ///< sao_eo_class - - int offset_val[3][5]; ///<SaoOffsetVal - - uint8_t type_idx[3]; ///< sao_type_idx -} SAOParams; - typedef struct DBParams { int beta_offset; int tc_offset; @@ -716,70 +704,6 @@ typedef struct HEVCNAL { const uint8_t *data; } HEVCNAL; -typedef struct HEVCDSPContext { - void (*put_pcm)(uint8_t *dst, ptrdiff_t stride, int size, - GetBitContext *gb, int pcm_bit_depth); - - void (*transquant_bypass[4])(uint8_t *dst, int16_t *coeffs, - ptrdiff_t stride); - - void (*transform_skip)(uint8_t *dst, int16_t *coeffs, ptrdiff_t stride); - void (*transform_4x4_luma_add)(uint8_t *dst, int16_t *coeffs, - ptrdiff_t stride); - void (*transform_add[4])(uint8_t *dst, int16_t *coeffs, ptrdiff_t stride); - - void (*sao_band_filter[4])(uint8_t *dst, uint8_t *src, ptrdiff_t stride, - struct SAOParams *sao, int *borders, - int width, int height, int c_idx); - void (*sao_edge_filter[4])(uint8_t *dst, uint8_t *src, ptrdiff_t stride, - struct SAOParams *sao, int *borders, int width, - int height, int c_idx, uint8_t vert_edge, - uint8_t horiz_edge, uint8_t diag_edge); - - void (*put_hevc_qpel[4][4])(int16_t *dst, ptrdiff_t dststride, uint8_t *src, - ptrdiff_t srcstride, int width, int height, - int16_t *mcbuffer); - void (*put_hevc_epel[2][2])(int16_t *dst, ptrdiff_t dststride, uint8_t *src, - ptrdiff_t srcstride, int width, int height, - int mx, int my, int16_t *mcbuffer); - - void (*put_unweighted_pred)(uint8_t *dst, ptrdiff_t dststride, int16_t *src, - ptrdiff_t srcstride, int width, int height); - void (*put_weighted_pred_avg)(uint8_t *dst, ptrdiff_t dststride, - int16_t *src1, int16_t *src2, - ptrdiff_t srcstride, int width, int height); - void (*weighted_pred)(uint8_t denom, int16_t wlxFlag, int16_t olxFlag, - uint8_t *dst, ptrdiff_t dststride, int16_t *src, - ptrdiff_t srcstride, int width, int height); - void (*weighted_pred_avg)(uint8_t denom, int16_t wl0Flag, int16_t wl1Flag, - int16_t ol0Flag, int16_t ol1Flag, uint8_t *dst, - ptrdiff_t dststride, int16_t *src1, int16_t *src2, - ptrdiff_t srcstride, int width, int height); - - void (*hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, - int *beta, int *tc, - uint8_t *no_p, uint8_t *no_q); - void (*hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, - int *beta, int *tc, - uint8_t *no_p, uint8_t *no_q); - void (*hevc_h_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, - int *tc, uint8_t *no_p, uint8_t *no_q); - void (*hevc_v_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, - int *tc, uint8_t *no_p, uint8_t *no_q); - void (*hevc_h_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, - int *beta, int *tc, - uint8_t *no_p, uint8_t *no_q); - void (*hevc_v_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, - int *beta, int *tc, - uint8_t *no_p, uint8_t *no_q); - void (*hevc_h_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, - int *tc, uint8_t *no_p, - uint8_t *no_q); - void (*hevc_v_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, - int *tc, uint8_t *no_p, - uint8_t *no_q); -} HEVCDSPContext; - struct HEVCContext; typedef struct HEVCPredContext { @@ -1060,10 +984,6 @@ void ff_hevc_pps_free(HEVCPPS **ppps); void ff_hevc_pred_init(HEVCPredContext *hpc, int bit_depth); -void ff_hevc_dsp_init(HEVCDSPContext *hpc, int bit_depth); - -extern const int8_t ff_hevc_epel_filters[7][16]; - extern const uint8_t ff_hevc_qpel_extra_before[4]; extern const uint8_t ff_hevc_qpel_extra_after[4]; extern const uint8_t ff_hevc_qpel_extra[4]; diff --git a/libavcodec/hevcdsp.c b/libavcodec/hevcdsp.c index 70de8434c7..de8c3d268e 100644 --- a/libavcodec/hevcdsp.c +++ b/libavcodec/hevcdsp.c @@ -20,7 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "hevc.h" +#include "hevcdsp.h" static const int8_t transform[32][32] = { { 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, diff --git a/libavcodec/hevcdsp.h b/libavcodec/hevcdsp.h new file mode 100644 index 0000000000..30ca2097b3 --- /dev/null +++ b/libavcodec/hevcdsp.h @@ -0,0 +1,109 @@ +/* + * HEVC video decoder + * + * Copyright (C) 2012 - 2013 Guillaume Martres + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * Libav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_HEVCDSP_H +#define AVCODEC_HEVCDSP_H + +#include "get_bits.h" + +typedef struct SAOParams { + int offset_abs[3][4]; ///< sao_offset_abs + int offset_sign[3][4]; ///< sao_offset_sign + + int band_position[3]; ///< sao_band_position + + int eo_class[3]; ///< sao_eo_class + + int offset_val[3][5]; ///<SaoOffsetVal + + uint8_t type_idx[3]; ///< sao_type_idx +} SAOParams; + +typedef struct HEVCDSPContext { + void (*put_pcm)(uint8_t *dst, ptrdiff_t stride, int size, + GetBitContext *gb, int pcm_bit_depth); + + void (*transquant_bypass[4])(uint8_t *dst, int16_t *coeffs, + ptrdiff_t stride); + + void (*transform_skip)(uint8_t *dst, int16_t *coeffs, ptrdiff_t stride); + void (*transform_4x4_luma_add)(uint8_t *dst, int16_t *coeffs, + ptrdiff_t stride); + void (*transform_add[4])(uint8_t *dst, int16_t *coeffs, ptrdiff_t stride); + + void (*sao_band_filter[4])(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + struct SAOParams *sao, int *borders, + int width, int height, int c_idx); + void (*sao_edge_filter[4])(uint8_t *dst, uint8_t *src, ptrdiff_t stride, + struct SAOParams *sao, int *borders, int width, + int height, int c_idx, uint8_t vert_edge, + uint8_t horiz_edge, uint8_t diag_edge); + + void (*put_hevc_qpel[4][4])(int16_t *dst, ptrdiff_t dststride, uint8_t *src, + ptrdiff_t srcstride, int width, int height, + int16_t *mcbuffer); + void (*put_hevc_epel[2][2])(int16_t *dst, ptrdiff_t dststride, uint8_t *src, + ptrdiff_t srcstride, int width, int height, + int mx, int my, int16_t *mcbuffer); + + void (*put_unweighted_pred)(uint8_t *dst, ptrdiff_t dststride, int16_t *src, + ptrdiff_t srcstride, int width, int height); + void (*put_weighted_pred_avg)(uint8_t *dst, ptrdiff_t dststride, + int16_t *src1, int16_t *src2, + ptrdiff_t srcstride, int width, int height); + void (*weighted_pred)(uint8_t denom, int16_t wlxFlag, int16_t olxFlag, + uint8_t *dst, ptrdiff_t dststride, int16_t *src, + ptrdiff_t srcstride, int width, int height); + void (*weighted_pred_avg)(uint8_t denom, int16_t wl0Flag, int16_t wl1Flag, + int16_t ol0Flag, int16_t ol1Flag, uint8_t *dst, + ptrdiff_t dststride, int16_t *src1, int16_t *src2, + ptrdiff_t srcstride, int width, int height); + + void (*hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, + int *beta, int *tc, + uint8_t *no_p, uint8_t *no_q); + void (*hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, + int *beta, int *tc, + uint8_t *no_p, uint8_t *no_q); + void (*hevc_h_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, + int *tc, uint8_t *no_p, uint8_t *no_q); + void (*hevc_v_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, + int *tc, uint8_t *no_p, uint8_t *no_q); + void (*hevc_h_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, + int *beta, int *tc, + uint8_t *no_p, uint8_t *no_q); + void (*hevc_v_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, + int *beta, int *tc, + uint8_t *no_p, uint8_t *no_q); + void (*hevc_h_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, + int *tc, uint8_t *no_p, + uint8_t *no_q); + void (*hevc_v_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, + int *tc, uint8_t *no_p, + uint8_t *no_q); +} HEVCDSPContext; + +void ff_hevc_dsp_init(HEVCDSPContext *hpc, int bit_depth); + +extern const int8_t ff_hevc_epel_filters[7][16]; + +#endif /* AVCODEC_HEVCDSP_H */ |