Index: source/libvpx/vp9/common/vp9_loopfilter.h |
=================================================================== |
--- source/libvpx/vp9/common/vp9_loopfilter.h (revision 219822) |
+++ source/libvpx/vp9/common/vp9_loopfilter.h (working copy) |
@@ -22,6 +22,27 @@ |
#define SIMD_WIDTH 16 |
+#define MAX_REF_LF_DELTAS 4 |
+#define MAX_MODE_LF_DELTAS 2 |
+ |
+struct loopfilter { |
+ int filter_level; |
+ |
+ int sharpness_level; |
+ int last_sharpness_level; |
+ |
+ uint8_t mode_ref_delta_enabled; |
+ uint8_t mode_ref_delta_update; |
+ |
+ // 0 = Intra, Last, GF, ARF |
+ signed char ref_deltas[MAX_REF_LF_DELTAS]; |
+ signed char last_ref_deltas[MAX_REF_LF_DELTAS]; |
+ |
+ // 0 = ZERO_MV, MV |
+ signed char mode_deltas[MAX_MODE_LF_DELTAS]; |
+ signed char last_mode_deltas[MAX_MODE_LF_DELTAS]; |
+}; |
+ |
// Need to align this structure so when it is declared and |
// passed it can be loaded into vector registers. |
typedef struct { |
@@ -35,33 +56,38 @@ |
uint8_t mode_lf_lut[MB_MODE_COUNT]; |
} loop_filter_info_n; |
-struct loop_filter_info { |
- const uint8_t *mblim; |
- const uint8_t *lim; |
- const uint8_t *hev_thr; |
-}; |
- |
- |
/* assorted loopfilter functions which get used elsewhere */ |
struct VP9Common; |
struct macroblockd; |
-void vp9_loop_filter_init(struct VP9Common *cm, struct loopfilter *lf); |
+void vp9_loop_filter_init(struct VP9Common *cm); |
// Update the loop filter for the current frame. |
// This should be called before vp9_loop_filter_rows(), vp9_loop_filter_frame() |
// calls this function directly. |
-void vp9_loop_filter_frame_init(struct VP9Common *const cm, |
- struct macroblockd *const xd, |
- int default_filt_lvl); |
+void vp9_loop_filter_frame_init(struct VP9Common *cm, int default_filt_lvl); |
void vp9_loop_filter_frame(struct VP9Common *cm, |
struct macroblockd *mbd, |
int filter_level, |
- int y_only); |
+ int y_only, int partial); |
// Apply the loop filter to [start, stop) macro block rows in frame_buffer. |
void vp9_loop_filter_rows(const YV12_BUFFER_CONFIG *frame_buffer, |
struct VP9Common *cm, struct macroblockd *xd, |
int start, int stop, int y_only); |
+ |
+typedef struct LoopFilterWorkerData { |
+ const YV12_BUFFER_CONFIG *frame_buffer; |
+ struct VP9Common *cm; |
+ struct macroblockd xd; // TODO(jzern): most of this is unnecessary to the |
+ // loopfilter. the planes are necessary as their state |
+ // is changed during decode. |
+ int start; |
+ int stop; |
+ int y_only; |
+} LFWorkerData; |
+ |
+// Operates on the rows described by LFWorkerData passed as 'arg1'. |
+int vp9_loop_filter_worker(void *arg1, void *arg2); |
#endif // VP9_COMMON_VP9_LOOPFILTER_H_ |