Index: source/libvpx/vp9/common/vp9_loopfilter.h |
=================================================================== |
--- source/libvpx/vp9/common/vp9_loopfilter.h (revision 251189) |
+++ source/libvpx/vp9/common/vp9_loopfilter.h (working copy) |
@@ -60,10 +60,43 @@ |
uint8_t lvl[MAX_SEGMENTS][MAX_REF_FRAMES][MAX_MODE_LF_DELTAS]; |
} loop_filter_info_n; |
+// This structure holds bit masks for all 8x8 blocks in a 64x64 region. |
+// Each 1 bit represents a position in which we want to apply the loop filter. |
+// Left_ entries refer to whether we apply a filter on the border to the |
+// left of the block. Above_ entries refer to whether or not to apply a |
+// filter on the above border. Int_ entries refer to whether or not to |
+// apply borders on the 4x4 edges within the 8x8 block that each bit |
+// represents. |
+// Since each transform is accompanied by a potentially different type of |
+// loop filter there is a different entry in the array for each transform size. |
+typedef struct { |
+ uint64_t left_y[TX_SIZES]; |
+ uint64_t above_y[TX_SIZES]; |
+ uint64_t int_4x4_y; |
+ uint16_t left_uv[TX_SIZES]; |
+ uint16_t above_uv[TX_SIZES]; |
+ uint16_t int_4x4_uv; |
+ uint8_t lfl_y[64]; |
+ uint8_t lfl_uv[16]; |
+} LOOP_FILTER_MASK; |
+ |
/* assorted loopfilter functions which get used elsewhere */ |
struct VP9Common; |
struct macroblockd; |
+struct VP9LfSyncData; |
+// This function sets up the bit masks for the entire 64x64 region represented |
+// by mi_row, mi_col. |
+void vp9_setup_mask(struct VP9Common *const cm, |
+ const int mi_row, const int mi_col, |
+ MODE_INFO **mi_8x8, const int mode_info_stride, |
+ LOOP_FILTER_MASK *lfm); |
+ |
+void vp9_filter_block_plane(struct VP9Common *const cm, |
+ struct macroblockd_plane *const plane, |
+ int mi_row, |
+ LOOP_FILTER_MASK *lfm); |
+ |
void vp9_loop_filter_init(struct VP9Common *cm); |
// Update the loop filter for the current frame. |
@@ -74,7 +107,7 @@ |
void vp9_loop_filter_frame(struct VP9Common *cm, |
struct macroblockd *mbd, |
int filter_level, |
- int y_only, int partial); |
+ int y_only, int partial_frame); |
// Apply the loop filter to [start, stop) macro block rows in frame_buffer. |
void vp9_loop_filter_rows(const YV12_BUFFER_CONFIG *frame_buffer, |
@@ -90,6 +123,9 @@ |
int start; |
int stop; |
int y_only; |
+ |
+ struct VP9LfSyncData *lf_sync; |
+ int num_lf_workers; |
} LFWorkerData; |
// Operates on the rows described by LFWorkerData passed as 'arg1'. |