[svn] / trunk / xvidcore / src / image / image.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/image.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1566, Sun Dec 5 13:56:13 2004 UTC revision 1666, Sat Dec 17 13:57:15 2005 UTC
# Line 19  Line 19 
19   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: image.c,v 1.30 2004-12-05 13:56:13 syskin Exp $   * $Id: image.c,v 1.35 2005-12-17 13:57:15 syskin Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 236  Line 236 
236          }          }
237  }  }
238    
 /* bframe encoding requires image-based u,v interpolation */  
239  void  void
240  image_interpolate(const IMAGE * refn,  image_interpolate(const uint8_t * refn,
241                                    IMAGE * refh,                                    uint8_t * refh,
242                                    IMAGE * refv,                                    uint8_t * refv,
243                                    IMAGE * refhv,                                    uint8_t * refhv,
244                                    uint32_t edged_width,                                    uint32_t edged_width,
245                                    uint32_t edged_height,                                    uint32_t edged_height,
246                                    uint32_t quarterpel,                                    uint32_t quarterpel,
# Line 249  Line 248 
248  {  {
249          const uint32_t offset = EDGE_SIZE2 * (edged_width + 1); /* we only interpolate half of the edge area */          const uint32_t offset = EDGE_SIZE2 * (edged_width + 1); /* we only interpolate half of the edge area */
250          const uint32_t stride_add = 7 * edged_width;          const uint32_t stride_add = 7 * edged_width;
 #if 0  
         const uint32_t edged_width2 = edged_width / 2;  
         const uint32_t edged_height2 = edged_height / 2;  
         const uint32_t offset2 = EDGE_SIZE2 * (edged_width2 + 1);  
         const uint32_t stride_add2 = 7 * edged_width2;  
 #endif  
         uint8_t *n_ptr, *h_ptr, *v_ptr, *hv_ptr;  
         uint32_t x, y;  
251    
252            uint8_t *n_ptr;
253            uint8_t *h_ptr, *v_ptr, *hv_ptr;
254            uint32_t x, y;
255    
256          n_ptr = refn->y;          n_ptr = (uint8_t*)refn;
257          h_ptr = refh->y;          h_ptr = refh;
258          v_ptr = refv->y;          v_ptr = refv;
259    
260          n_ptr -= offset;          n_ptr -= offset;
261          h_ptr -= offset;          h_ptr -= offset;
# Line 290  Line 284 
284                          n_ptr += stride_add;                          n_ptr += stride_add;
285                  }                  }
286    
287                  h_ptr = refh->y + (edged_height - EDGE_SIZE - EDGE_SIZE2)*edged_width - EDGE_SIZE2;                  h_ptr = refh + (edged_height - EDGE_SIZE - EDGE_SIZE2)*edged_width - EDGE_SIZE2;
288                  hv_ptr = refhv->y + (edged_height - EDGE_SIZE - EDGE_SIZE2)*edged_width - EDGE_SIZE2;                  hv_ptr = refhv + (edged_height - EDGE_SIZE - EDGE_SIZE2)*edged_width - EDGE_SIZE2;
289    
290                  for (y = 0; y < (edged_height - EDGE_SIZE); y = y + 8) {                  for (y = 0; y < (edged_height - EDGE_SIZE); y = y + 8) {
291                          hv_ptr -= stride_add;                          hv_ptr -= stride_add;
# Line 307  Line 301 
301                  }                  }
302          } else {          } else {
303    
304                  hv_ptr = refhv->y;                  hv_ptr = refhv;
305                  hv_ptr -= offset;                  hv_ptr -= offset;
306    
307                  for (y = 0; y < (edged_height - EDGE_SIZE); y += 8) {                  for (y = 0; y < (edged_height - EDGE_SIZE); y += 8) {
# Line 333  Line 327 
327                          n_ptr += stride_add;                          n_ptr += stride_add;
328                  }                  }
329          }          }
 /*  
 #ifdef BFRAMES  
         n_ptr = refn->u;  
         h_ptr = refh->u;  
         v_ptr = refv->u;  
         hv_ptr = refhv->u;  
   
         n_ptr -= offset2;  
         h_ptr -= offset2;  
         v_ptr -= offset2;  
         hv_ptr -= offset2;  
   
         for (y = 0; y < edged_height2; y += 8) {  
                 for (x = 0; x < edged_width2; x += 8) {  
                         interpolate8x8_halfpel_h(h_ptr, n_ptr, edged_width2, rounding);  
                         interpolate8x8_halfpel_v(v_ptr, n_ptr, edged_width2, rounding);  
                         interpolate8x8_halfpel_hv(hv_ptr, n_ptr, edged_width2, rounding);  
   
                         n_ptr += 8;  
                         h_ptr += 8;  
                         v_ptr += 8;  
                         hv_ptr += 8;  
                 }  
                 h_ptr += stride_add2;  
                 v_ptr += stride_add2;  
                 hv_ptr += stride_add2;  
                 n_ptr += stride_add2;  
         }  
   
         n_ptr = refn->v;  
         h_ptr = refh->v;  
         v_ptr = refv->v;  
         hv_ptr = refhv->v;  
   
         n_ptr -= offset2;  
         h_ptr -= offset2;  
         v_ptr -= offset2;  
         hv_ptr -= offset2;  
   
         for (y = 0; y < edged_height2; y = y + 8) {  
                 for (x = 0; x < edged_width2; x = x + 8) {  
                         interpolate8x8_halfpel_h(h_ptr, n_ptr, edged_width2, rounding);  
                         interpolate8x8_halfpel_v(v_ptr, n_ptr, edged_width2, rounding);  
                         interpolate8x8_halfpel_hv(hv_ptr, n_ptr, edged_width2, rounding);  
   
                         n_ptr += 8;  
                         h_ptr += 8;  
                         v_ptr += 8;  
                         hv_ptr += 8;  
                 }  
                 h_ptr += stride_add2;  
                 v_ptr += stride_add2;  
                 hv_ptr += stride_add2;  
                 n_ptr += stride_add2;  
         }  
 #endif  
 */  
         /*  
            interpolate_halfpel_h(  
            refh->y - offset,  
            refn->y - offset,  
            edged_width, edged_height,  
            rounding);  
   
            interpolate_halfpel_v(  
            refv->y - offset,  
            refn->y - offset,  
            edged_width, edged_height,  
            rounding);  
   
            interpolate_halfpel_hv(  
            refhv->y - offset,  
            refn->y - offset,  
            edged_width, edged_height,  
            rounding);  
          */  
   
         /* uv-image-based compensation  
            offset = EDGE_SIZE2 * (edged_width / 2 + 1);  
   
            interpolate_halfpel_h(  
            refh->u - offset,  
            refn->u - offset,  
            edged_width / 2, edged_height / 2,  
            rounding);  
   
            interpolate_halfpel_v(  
            refv->u - offset,  
            refn->u - offset,  
            edged_width / 2, edged_height / 2,  
            rounding);  
   
            interpolate_halfpel_hv(  
            refhv->u - offset,  
            refn->u - offset,  
            edged_width / 2, edged_height / 2,  
            rounding);  
   
   
            interpolate_halfpel_h(  
            refh->v - offset,  
            refn->v - offset,  
            edged_width / 2, edged_height / 2,  
            rounding);  
   
            interpolate_halfpel_v(  
            refv->v - offset,  
            refn->v - offset,  
            edged_width / 2, edged_height / 2,  
            rounding);  
   
            interpolate_halfpel_hv(  
            refhv->v - offset,  
            refn->v - offset,  
            edged_width / 2, edged_height / 2,  
            rounding);  
          */  
330  }  }
331    
332    
# Line 717  Line 594 
594                           int height,                           int height,
595                           uint32_t edged_width,                           uint32_t edged_width,
596                           uint8_t * dst[4],                           uint8_t * dst[4],
597                           uint32_t dst_stride[4],                           int dst_stride[4],
598                           int csp,                           int csp,
599                           int interlacing)                           int interlacing)
600  {  {
# Line 1078  Line 955 
955  }  }
956    
957  void  void
958  output_slice(IMAGE * cur, int std, int width, xvid_image_t* out_frm, int mbx, int mby,int mbl) {  output_slice(IMAGE * cur, int stride, int width, xvid_image_t* out_frm, int mbx, int mby,int mbl) {
959    uint8_t *dY,*dU,*dV,*sY,*sU,*sV;    uint8_t *dY,*dU,*dV,*sY,*sU,*sV;
960    int std2 = std >> 1;    int stride2 = stride >> 1;
961    int w = mbl << 4, w2,i;    int w = mbl << 4, w2,i;
962    
963    if(w > width)    if(w > width)
# Line 1090  Line 967 
967    dY = (uint8_t*)out_frm->plane[0] + (mby << 4) * out_frm->stride[0] + (mbx << 4);    dY = (uint8_t*)out_frm->plane[0] + (mby << 4) * out_frm->stride[0] + (mbx << 4);
968    dU = (uint8_t*)out_frm->plane[1] + (mby << 3) * out_frm->stride[1] + (mbx << 3);    dU = (uint8_t*)out_frm->plane[1] + (mby << 3) * out_frm->stride[1] + (mbx << 3);
969    dV = (uint8_t*)out_frm->plane[2] + (mby << 3) * out_frm->stride[2] + (mbx << 3);    dV = (uint8_t*)out_frm->plane[2] + (mby << 3) * out_frm->stride[2] + (mbx << 3);
970    sY = cur->y + (mby << 4) * std + (mbx << 4);    sY = cur->y + (mby << 4) * stride + (mbx << 4);
971    sU = cur->u + (mby << 3) * std2 + (mbx << 3);    sU = cur->u + (mby << 3) * stride2 + (mbx << 3);
972    sV = cur->v + (mby << 3) * std2 + (mbx << 3);    sV = cur->v + (mby << 3) * stride2 + (mbx << 3);
973    
974    for(i = 0 ; i < 16 ; i++) {    for(i = 0 ; i < 16 ; i++) {
975      memcpy(dY,sY,w);      memcpy(dY,sY,w);
976      dY += out_frm->stride[0];      dY += out_frm->stride[0];
977      sY += std;      sY += stride;
978    }    }
979    for(i = 0 ; i < 8 ; i++) {    for(i = 0 ; i < 8 ; i++) {
980      memcpy(dU,sU,w2);      memcpy(dU,sU,w2);
981      dU += out_frm->stride[1];      dU += out_frm->stride[1];
982      sU += std2;      sU += stride2;
983    }    }
984    for(i = 0 ; i < 8 ; i++) {    for(i = 0 ; i < 8 ; i++) {
985      memcpy(dV,sV,w2);      memcpy(dV,sV,w2);
986      dV += out_frm->stride[2];      dV += out_frm->stride[2];
987      sV += std2;      sV += stride2;
988    }    }
989  }  }
990    

Legend:
Removed from v.1566  
changed lines
  Added in v.1666

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4