Unified · Split
| @@ -13,7 +13,7 @@ · 12 unmodified lines | ||
| 13 | 13 | int mainstacksize = 128*1024; |
| 14 | 14 | |
| 15 | 15 | static Image *curim; |
| 16 | −static u8int *rgb; | |
| 16 | +static u8int *curpx; | |
| 17 | 17 | static uvlong lastframe; |
| 18 | 18 | static int audiofd = -1; |
| 19 | 19 | static Channel *audiosync; |
| @@ -81,21 +81,26 @@ drawframe(Frame *f) · 61 unmodified lines | ||
| 81 | 81 | if(curim != nil && (Dx(curim->r) != f->w || Dy(curim->r) != f->h)){ |
| 82 | 82 | freeimage(curim); |
| 83 | 83 | curim = nil; |
| 84 | − free(rgb); | |
| 85 | − rgb = nil; | |
| 84 | + free(curpx); | |
| 85 | + curpx = nil; | |
| 86 | 86 | } |
| 87 | 87 | r = Rect(0,0,f->w,f->h); |
| 88 | − if(curim == nil) | |
| 89 | − curim = allocimage(display, r, bw ? GREY8 : RGB24, 0, DNofill); | |
| 90 | − if(rgb == nil) | |
| 91 | − rgb = malloc(f->w*f->h*(bw ? 1 : 3)); | |
| 92 | 88 | if(bw){ |
| 89 | + if(curim == nil) | |
| 90 | + curim = allocimage(display, r, GREY8, 0, DNofill); | |
| 91 | + if(curpx == nil) | |
| 92 | + curpx = malloc(f->w*f->h); | |
| 93 | 93 | for(y = 0; y < f->h; y++) |
| 94 | − memmove(rgb+f->w*y, f->yuv[0]+f->ystride*y, f->w); | |
| 94 | + memmove(curpx+f->w*y, f->yuv[0]+f->ystride*y, f->w); | |
| 95 | + loadimage(curim, r, curpx, f->w*f->h); | |
| 95 | 96 | }else{ |
| 96 | − yuv420_rgb24(f->w, f->h, f->yuv[0], f->yuv[1], f->yuv[2], f->ystride, f->uvstride, rgb, f->w*3); | |
| 97 | + if(curim == nil) | |
| 98 | + curim = allocimage(display, r, RGB24, 0, DNofill); | |
| 99 | + if(curpx == nil) | |
| 100 | + curpx = malloc(f->w*f->h*3); | |
| 101 | + yuv420_rgb24(f->w, f->h, f->yuv[0], f->yuv[1], f->yuv[2], f->ystride, f->uvstride, curpx, f->w*3); | |
| 102 | + loadimage(curim, r, curpx, f->w*f->h*3); | |
| 97 | 103 | } |
| 98 | − loadimage(curim, r, rgb, f->w*f->h*(bw ? 1 : 3)); | |
| 99 | 104 | |
| 100 | 105 | dispdelay = nanosec() - x; |
| 101 | 106 | |