[xiph-commits] r17201 - branches/theorarm-merge-branch/lib/arm

robin at svn.xiph.org robin at svn.xiph.org
Wed May 12 17:06:37 PDT 2010


Author: robin
Date: 2010-05-12 17:06:37 -0700 (Wed, 12 May 2010)
New Revision: 17201

Modified:
   branches/theorarm-merge-branch/lib/arm/ARMstate.c
Log:
Add missing oc_state_loop_filter_frag_rows_arm function.

Correct compile problems in oc_state_frag_recon_arm.



Modified: branches/theorarm-merge-branch/lib/arm/ARMstate.c
===================================================================
--- branches/theorarm-merge-branch/lib/arm/ARMstate.c	2010-05-12 23:58:07 UTC (rev 17200)
+++ branches/theorarm-merge-branch/lib/arm/ARMstate.c	2010-05-13 00:06:37 UTC (rev 17201)
@@ -39,9 +39,50 @@
                    _state->ref_frame_data[_state->ref_frame_idx[_src_frame]],
                    _state->ref_ystride[_pli],
                    _nfragis,
-                   frag_bug_offs);
+                   _fragis,
+                   frag_buf_offs);
 }
 
+void oc_state_loop_filter_frag_rows_arm(const oc_theora_state *_state,signed char*_bv,
+ int _refi,int _pli,int _fragy0,int _fragy_end){
+  const oc_fragment_plane *fplane;
+  const oc_fragment       *frags;
+  const ptrdiff_t         *frag_buf_offs;
+  unsigned char           *ref_frame_data;
+  ptrdiff_t                fragi_top;
+  ptrdiff_t                fragi_bot;
+  ptrdiff_t                fragi0;
+  ptrdiff_t                fragi0_end;
+  int                      ystride;
+  int                      nhfrags;
+  _bv+=127;
+  fplane=_state->fplanes+_pli;
+  nhfrags=fplane->nhfrags;
+  fragi_top=fplane->froffset;
+  fragi_bot=fragi_top+fplane->nfrags;
+  fragi0=fragi_top+_fragy0*(ptrdiff_t)nhfrags;
+  fragi0_end=fragi0+(_fragy_end-_fragy0)*(ptrdiff_t)nhfrags;
+  ystride=_state->ref_ystride[_pli];
+  frags=_state->frags;
+  frag_buf_offs=_state->frag_buf_offs;
+  ref_frame_data=_state->ref_frame_data[_refi];
+  /*The following loops are constructed somewhat non-intuitively on purpose.
+    The main idea is: if a block boundary has at least one coded fragment on
+     it, the filter is applied to it.
+    However, the order that the filters are applied in matters, and VP3 chose
+     the somewhat strange ordering used below.*/
+  oc_state_loop_filter_frag_rows_inner(ref_frame_data,
+                                       ystride,
+                                       _bv,
+                                       frags,
+                                       fragi0,
+                                       fragi0_end,
+                                       fragi_top,
+                                       fragi_bot,
+                                       frag_buf_offs,
+                                       nhfrags);
+}
+
 static void oc_state_frag_recon_arm(const oc_theora_state *_state,ptrdiff_t _fragi,
  int _pli,ogg_int16_t _dct_coeffs[64],int _last_zzi,ogg_uint16_t _dc_quant){
   unsigned char *dst;
@@ -77,7 +118,7 @@
      _state->ref_frame_data[_state->ref_frame_idx[OC_FRAME_FOR_MODE(mb_mode)]]
      +frag_buf_off;
     if(oc_state_get_mv_offsets(_state,mvoffsets,_pli,
-     _state->frag_mvs[_fragi][0],_state->frag_mvs[_fragi][1])>1){
+     _state->frag_mvs[_fragi].v[0],_state->frag_mvs[_fragi].v[1])>1){
       oc_frag_recon_inter2_arm(
        dst,ref+mvoffsets[0],ref+mvoffsets[1],ystride,_dct_coeffs);
     }



More information about the commits mailing list