]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/hevcdsp.h
pthread_frame: ensure the threads don't run simultaneously with hwaccel
[ffmpeg] / libavcodec / hevcdsp.h
index e906c5e4aa21c9f0f37aefd96720a224143edd61..2f4ff0111f5d9a91d0eed4ab7784b321b9ed3dab 100644 (file)
@@ -42,13 +42,12 @@ 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 (*add_residual[4])(uint8_t *dst, int16_t *res, 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 (*dequant)(int16_t *coeffs);
+    void (*transform_4x4_luma)(int16_t *coeffs);
+    void (*idct[4])(int16_t *coeffs, int col_limit);
+    void (*idct_dc[4])(int16_t *coeffs);
 
     void (*sao_band_filter[4])(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
                                struct SAOParams *sao, int *borders,
@@ -65,18 +64,30 @@ typedef struct HEVCDSPContext {
                                    ptrdiff_t srcstride, 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_unweighted_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 (*put_unweighted_pred[8])(uint8_t *dst, ptrdiff_t dststride, int16_t *src,
+                                   ptrdiff_t srcstride, int height);
+    void (*put_unweighted_pred_chroma[8])(uint8_t *dst, ptrdiff_t dststride, int16_t *src,
+                                          ptrdiff_t srcstride, int height);
+    void (*put_unweighted_pred_avg[8])(uint8_t *dst, ptrdiff_t dststride,
+                                       int16_t *src1, int16_t *src2,
+                                       ptrdiff_t srcstride, int height);
+    void (*put_unweighted_pred_avg_chroma[8])(uint8_t *dst, ptrdiff_t dststride,
+                                              int16_t *src1, int16_t *src2,
+                                              ptrdiff_t srcstride, int height);
+    void (*weighted_pred[8])(uint8_t denom, int16_t wlxFlag, int16_t olxFlag,
+                             uint8_t *dst, ptrdiff_t dststride, int16_t *src,
+                             ptrdiff_t srcstride, int height);
+    void (*weighted_pred_chroma[8])(uint8_t denom, int16_t wlxFlag, int16_t olxFlag,
+                                    uint8_t *dst, ptrdiff_t dststride, int16_t *src,
+                                    ptrdiff_t srcstride, int height);
+    void (*weighted_pred_avg[8])(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 height);
+    void (*weighted_pred_avg_chroma[8])(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 height);
 
     void (*hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride,
                                     int beta, int *tc,
@@ -104,8 +115,12 @@ typedef struct HEVCDSPContext {
 
 void ff_hevc_dsp_init(HEVCDSPContext *hpc, int bit_depth);
 
+void ff_hevc_dsp_init_ppc(HEVCDSPContext *c, const int bit_depth);
 void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth);
 
-extern const int8_t ff_hevc_epel_filters[7][16];
+extern const int16_t ff_hevc_epel_coeffs[7][16];
+extern const int8_t ff_hevc_epel_coeffs8[7][16];
+extern const int16_t ff_hevc_qpel_coeffs[3][8];
+extern const int8_t ff_hevc_qpel_coeffs8[3][16];
 
 #endif /* AVCODEC_HEVCDSP_H */