diff --git a/ffplay.c b/ffplay.c index b69b503692..38673b5de1 100644 --- a/ffplay.c +++ b/ffplay.c @@ -1478,6 +1478,24 @@ static void alloc_picture(VideoState *is) SDL_UnlockMutex(is->pictq_mutex); } +static void duplicate_right_border_pixels(SDL_Overlay *bmp) { + int i, width, height; + Uint8 *p, *maxp; + for (i = 0; i < 3; i++) { + width = bmp->w; + height = bmp->h; + if (i > 0) { + width >>= 1; + height >>= 1; + } + if (bmp->pitches[i] > width) { + maxp = bmp->pixels[i] + bmp->pitches[i] * height - 1; + for (p = bmp->pixels[i] + width - 1; p < maxp; p += bmp->pitches[i]) + *(p+1) = *p; + } + } +} + static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_t pos, int serial) { VideoPicture *vp; @@ -1593,6 +1611,8 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_ sws_scale(is->img_convert_ctx, src_frame->data, src_frame->linesize, 0, vp->height, pict.data, pict.linesize); #endif + /* workaround SDL PITCH_WORKAROUND */ + duplicate_right_border_pixels(vp->bmp); /* update the bitmap content */ SDL_UnlockYUVOverlay(vp->bmp);