git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bugfix for segfault on rgb2yuv conversion.
[swftools.git]
/
lib
/
h.263
/
swfvideo.c
diff --git
a/lib/h.263/swfvideo.c
b/lib/h.263/swfvideo.c
index
679d0b4
..
1d26152
100644
(file)
--- a/
lib/h.263/swfvideo.c
+++ b/
lib/h.263/swfvideo.c
@@
-43,6
+43,8
@@
void swf_SetVideoStreamDefine(TAG*tag, VIDEOSTREAM*stream, U16 frames, U16 width
#endif
memset(stream, 0, sizeof(VIDEOSTREAM));
stream->olinex = width;
#endif
memset(stream, 0, sizeof(VIDEOSTREAM));
stream->olinex = width;
+ stream->owidth = width;
+ stream->oheight = height;
width+=15;width&=~15;
height+=15;height&=~15;
stream->linex = width;
width+=15;width&=~15;
height+=15;height&=~15;
stream->linex = width;
@@
-251,7
+253,10
@@
static void dct2(int*src, int*dest)
innerdct(a,b,cc);
}
for(t=0;t<64;t++) {
innerdct(a,b,cc);
}
for(t=0;t<64;t++) {
- dest[zigzagtable[t]] = (int)(tmp2[t]);
+ int v = (int)(tmp2[t]);
+ if(v>127) v=127;
+ if(v<-127) v=-127;
+ dest[zigzagtable[t]] = v;
}
}
}
}
@@
-936,6
+941,9
@@
static void predictmvd(VIDEOSTREAM*s, int bx, int by, int*px, int*py)
} else if((x1 <= x3 && x3 <= x2) ||
(x2 <= x3 && x3 <= x1)) {
x4=x3;
} else if((x1 <= x3 && x3 <= x2) ||
(x2 <= x3 && x3 <= x1)) {
x4=x3;
+ } else {
+ x4=0;
+ assert(x4);
}
if((y1 <= y2 && y2 <= y3) ||
}
if((y1 <= y2 && y2 <= y3) ||
@@
-947,6
+955,9
@@
static void predictmvd(VIDEOSTREAM*s, int bx, int by, int*px, int*py)
} else if((y1 <= y3 && y3 <= y2) ||
(y2 <= y3 && y3 <= y1)) {
y4=y3;
} else if((y1 <= y3 && y3 <= y2) ||
(y2 <= y3 && y3 <= y1)) {
y4=y3;
+ } else {
+ y4=0;
+ assert(y4);
}
*px = x4;
}
*px = x4;
@@
-1042,8
+1053,8
@@
static int encode_blockP(TAG*tag, VIDEOSTREAM*s, int bx, int by, int*quant)
if(s->do_motion) {
int hx,hy;
int bestx=0,besty=0,bestbits=65536;
if(s->do_motion) {
int hx,hy;
int bestx=0,besty=0,bestbits=65536;
- int startx=-2,endx=2;
- int starty=-2,endy=2;
+ int startx=-31,endx=32;
+ int starty=-31,endy=32;
if(!bx) startx=0;
if(!by) starty=0;
if(!bx) startx=0;
if(!by) starty=0;
@@
-1283,7
+1294,8
@@
void swf_SetVideoStreamIFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant)
writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_IFRAME);
writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_IFRAME);
- rgb2yuv(s->current, pic, s->linex, s->olinex, s->width, s->height);
+ memset(s->current, 0, s->linex*s->height*sizeof(YUV));
+ rgb2yuv(s->current, pic, s->linex, s->olinex, s->owidth, s->oheight);
//dostat(s);
//dostat(s);
@@
-1307,7
+1319,8
@@
void swf_SetVideoStreamPFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant)
writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_PFRAME);
writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_PFRAME);
- rgb2yuv(s->current, pic, s->linex, s->olinex, s->width, s->height);
+ memset(s->current, 0, s->linex*s->height*sizeof(YUV));
+ rgb2yuv(s->current, pic, s->linex, s->olinex, s->owidth, s->oheight);
memset(s->mvdx, 0, s->bbx*s->bby*sizeof(int));
memset(s->mvdy, 0, s->bbx*s->bby*sizeof(int));
memset(s->mvdx, 0, s->bbx*s->bby*sizeof(int));
memset(s->mvdy, 0, s->bbx*s->bby*sizeof(int));