[FFmpeg-soc] [soc]: r630 - dirac/libavcodec/dirac.c
marco
subversion at mplayerhq.hu
Wed Aug 8 10:04:50 CEST 2007
Author: marco
Date: Wed Aug 8 10:04:50 2007
New Revision: 630
Log:
fix typos. speed up loop significantly
Modified:
dirac/libavcodec/dirac.c
Modified: dirac/libavcodec/dirac.c
==============================================================================
--- dirac/libavcodec/dirac.c (original)
+++ dirac/libavcodec/dirac.c Wed Aug 8 10:04:50 2007
@@ -1926,31 +1926,40 @@ static int motion_comp(AVCodecContext *a
int hbits, vbits;
int total_wt_bits;
+ int istart, istop;
+ int jstart, jstop;
+
if (comp == 0) {
width = s->sequence.luma_width;
height = s->sequence.luma_height;
- xblen = s->frame_decoding.luma_yblen;
- yblen = s->frame_decoding.luma_xblen;
- xbsep = s->frame_decoding.luma_ybsep;
- ybsep = s->frame_decoding.luma_xbsep;
+ xblen = s->frame_decoding.luma_xblen;
+ yblen = s->frame_decoding.luma_yblen;
+ xbsep = s->frame_decoding.luma_xbsep;
+ ybsep = s->frame_decoding.luma_ybsep;
} else {
width = s->sequence.chroma_width;
height = s->sequence.chroma_height;
- xblen = s->frame_decoding.chroma_yblen;
- yblen = s->frame_decoding.chroma_xblen;
- xbsep = s->frame_decoding.chroma_ybsep;
- ybsep = s->frame_decoding.chroma_xbsep;
+ xblen = s->frame_decoding.chroma_xblen;
+ yblen = s->frame_decoding.chroma_yblen;
+ xbsep = s->frame_decoding.chroma_xbsep;
+ ybsep = s->frame_decoding.chroma_ybsep;
}
- xoffset = (xblen - ybsep) / 2;
+ xoffset = (xblen - xbsep) / 2;
yoffset = (yblen - ybsep) / 2;
hbits = av_log2(xoffset) + 2;
vbits = av_log2(yoffset) + 2;
total_wt_bits = hbits + vbits + s->frame_decoding.picture_weight_precision;
- for (j = 0; j < s->blheight; j++)
- for (i = 0; i < s->blwidth; i++) {
+ /* XXX: Check if these values are right. */
+ istart = FFMAX(0, (x - xoffset) / xbsep - 1);
+ jstart = FFMAX(0, (y - yoffset) / ybsep - 1);
+ istop = FFMIN(s->blwidth, (x + xoffset) / xbsep + 1);
+ jstop = FFMIN(s->blheight, (y + yoffset) / ybsep + 1);
+
+ for (j = jstart; j < jstop; j++)
+ for (i = istart; i < istop; i++) {
struct dirac_blockmotion *currblock;
int xstart = FFMAX(0, i * xbsep - xoffset);
int ystart = FFMAX(0, j * ybsep - yoffset);
More information about the FFmpeg-soc
mailing list