diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2007-08-09 20:45:59 +0400 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2007-08-09 20:45:59 +0400 |
commit | 3af56110d4e1c6553cb98ab2b9246606f6ab92e8 (patch) | |
tree | 25771d613386b9a5b58469eedf2d78b1f0cd62e0 | |
parent | 874abace12a8fee0b74307939783dd4fc06ef906 (diff) |
Scale subtitle position
Originally committed as revision 10021 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | ffplay.c | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -422,7 +422,8 @@ void fill_border(VideoState *s, int x, int y, int w, int h, int color) #define BPP 1 -static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw, int imgh) +static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw, int imgh, + float scalex, float scaley) { int wrap, wrap3, width2, skip2; int y, u, v, a, u1, v1, a1, w, h; @@ -431,9 +432,9 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw, const uint32_t *pal; int dstx, dsty, dstw, dsth; - dstx = FFMIN(FFMAX(rect->x, 0), imgw); + dstx = FFMIN(scalex * FFMAX(rect->x, 0), imgw); dstw = FFMIN(FFMAX(rect->w, 0), imgw - dstx); - dsty = FFMIN(FFMAX(rect->y, 0), imgh); + dsty = FFMIN(scaley * FFMAX(rect->y, 0), imgh); dsth = FFMIN(FFMAX(rect->h, 0), imgh - dsty); lum = dst->data[0] + dsty * dst->linesize[0]; cb = dst->data[1] + (dsty >> 1) * dst->linesize[1]; @@ -699,6 +700,7 @@ static void video_image_display(VideoState *is) if (vp->pts >= sp->pts + ((float) sp->sub.start_display_time / 1000)) { + float scalex = 1, scaley = 1; SDL_LockYUVOverlay (vp->bmp); pict.data[0] = vp->bmp->pixels[0]; @@ -709,9 +711,14 @@ static void video_image_display(VideoState *is) pict.linesize[1] = vp->bmp->pitches[2]; pict.linesize[2] = vp->bmp->pitches[1]; + if (is->subtitle_st->codec->width) + scalex = (float)vp->bmp->w / is->subtitle_st->codec->width; + if (is->subtitle_st->codec->height) + scaley = (float)vp->bmp->h / is->subtitle_st->codec->height; for (i = 0; i < sp->sub.num_rects; i++) blend_subrect(&pict, &sp->sub.rects[i], - vp->bmp->w, vp->bmp->h); + vp->bmp->w, vp->bmp->h, + scalex, scaley); SDL_UnlockYUVOverlay (vp->bmp); } |