diff options
author | Marton Balint <cus@passwd.hu> | 2017-08-05 22:15:10 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2017-08-10 22:08:40 +0200 |
commit | 493f637d1e933ebdd9f63528a7782d3617c442cb (patch) | |
tree | 0f5f75fac8a611365082f106d3bf0db0648a01f8 /ffplay.c | |
parent | f3571048669bf876681499f49e9df492f05f73c6 (diff) |
ffplay: add support for rendering yuv images with negative line size
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'ffplay.c')
-rw-r--r-- | ffplay.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -859,13 +859,18 @@ static int upload_texture(SDL_Texture *tex, AVFrame *frame, struct SwsContext ** int ret = 0; switch (frame->format) { case AV_PIX_FMT_YUV420P: - if (frame->linesize[0] < 0 || frame->linesize[1] < 0 || frame->linesize[2] < 0) { - av_log(NULL, AV_LOG_ERROR, "Negative linesize is not supported for YUV.\n"); + if (frame->linesize[0] > 0 && frame->linesize[1] > 0 && frame->linesize[2] > 0) { + ret = SDL_UpdateYUVTexture(tex, NULL, frame->data[0], frame->linesize[0], + frame->data[1], frame->linesize[1], + frame->data[2], frame->linesize[2]); + } else if (frame->linesize[0] < 0 && frame->linesize[1] < 0 && frame->linesize[2] < 0) { + ret = SDL_UpdateYUVTexture(tex, NULL, frame->data[0] + frame->linesize[0] * (frame->height - 1), -frame->linesize[0], + frame->data[1] + frame->linesize[1] * (AV_CEIL_RSHIFT(frame->height, 1) - 1), -frame->linesize[1], + frame->data[2] + frame->linesize[2] * (AV_CEIL_RSHIFT(frame->height, 1) - 1), -frame->linesize[2]); + } else { + av_log(NULL, AV_LOG_ERROR, "Mixed negative and positive linesizes are not supported.\n"); return -1; } - ret = SDL_UpdateYUVTexture(tex, NULL, frame->data[0], frame->linesize[0], - frame->data[1], frame->linesize[1], - frame->data[2], frame->linesize[2]); break; case AV_PIX_FMT_BGRA: if (frame->linesize[0] < 0) { |