]> git.sesse.net Git - x264/blobdiff - common/frame.h
`make fprofiled` to automate gcc -fprofile-generate/use
[x264] / common / frame.h
index 14fbece298d377f71eb40d2b5b5ee480dfba7d3c..59fd9f62ba19d9931df3db827200b86f6daa5ca5 100644 (file)
@@ -24,6 +24,8 @@
 #ifndef _FRAME_H
 #define _FRAME_H 1
 
+#include <inttypes.h>
+
 typedef struct
 {
     /* */
@@ -32,26 +34,67 @@ typedef struct
     int     i_qpplus1;
     int64_t i_pts;
     int     i_frame;    /* Presentation frame number */
+    int     i_frame_num; /* Coded frame number */
+    int     b_kept_as_ref;
 
     /* YUV buffer */
     int     i_plane;
     int     i_stride[4];
     int     i_lines[4];
+    int     i_stride_lowres;
+    int     i_lines_lowres;
     uint8_t *plane[4];
+    uint8_t *filtered[4]; /* plane[0], H, V, HV */
+    uint8_t *lowres[4]; /* half-size copy of input frame: Orig, H, V, HV */
 
     /* for unrestricted mv we allocate more data than needed
      * allocated data are stored in buffer */
-    void    *buffer[4];
+    void    *buffer[11];
+
+    /* motion data */
+    int8_t  *mb_type;
+    int16_t (*mv[2])[2];
+    int8_t  *ref[2];
+    int     i_ref[2];
+    int     ref_poc[2][16];
+
+    /* for adaptive B-frame decision.
+     * contains the SATD cost of the lowres frame encoded in various modes
+     * FIXME: how big an array do we need? */
+    int     i_cost_est[16][16];
+    int     i_intra_mbs[16];
 
 } x264_frame_t;
 
+typedef void (*x264_deblock_inter_t)( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 );
+typedef void (*x264_deblock_intra_t)( uint8_t *pix, int stride, int alpha, int beta );
+typedef struct
+{
+    x264_deblock_inter_t deblock_v_luma;
+    x264_deblock_inter_t deblock_h_luma;
+    x264_deblock_inter_t deblock_v_chroma;
+    x264_deblock_inter_t deblock_h_chroma;
+    x264_deblock_intra_t deblock_v_luma_intra;
+    x264_deblock_intra_t deblock_h_luma_intra;
+    x264_deblock_intra_t deblock_v_chroma_intra;
+    x264_deblock_intra_t deblock_h_chroma_intra;
+} x264_deblock_function_t;
+
 x264_frame_t *x264_frame_new( x264_t *h );
 void          x264_frame_delete( x264_frame_t *frame );
 
 void          x264_frame_copy_picture( x264_t *h, x264_frame_t *dst, x264_picture_t *src );
 
 void          x264_frame_expand_border( x264_frame_t *frame );
+void          x264_frame_expand_border_filtered( x264_frame_t *frame );
+void          x264_frame_expand_border_lowres( x264_frame_t *frame );
+void          x264_frame_expand_border_mod16( x264_t *h, x264_frame_t *frame );
 
 void          x264_frame_deblocking_filter( x264_t *h, int i_slice_type );
 
+void          x264_frame_filter( int cpu, x264_frame_t *frame );
+void          x264_frame_init_lowres( int cpu, x264_frame_t *frame );
+
+void          x264_deblock_init( int cpu, x264_deblock_function_t *pf );
+
 #endif