From e0491bc133f1ac5930be05e7a4490fcbefb1e511 Mon Sep 17 00:00:00 2001 From: Dw9 <36155473+Dw9@users.noreply.github.com> Date: Wed, 8 Sep 2021 20:06:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A1=AC=E8=A7=A3=E6=94=AF=E6=8C=81nv12?= =?UTF-8?q?=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- player/YuvDisplayer.h | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/player/YuvDisplayer.h b/player/YuvDisplayer.h index 8073eca9..9b67d32d 100644 --- a/player/YuvDisplayer.h +++ b/player/YuvDisplayer.h @@ -1,4 +1,4 @@ -/* + /* * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved. * * This file is part of ZLMediaKit(https://github.com/ZLMediaKit/ZLMediaKit). @@ -163,16 +163,24 @@ public: _render = SDL_CreateRenderer(_win, -1, SDL_RENDERER_ACCELERATED); } if (_render && !_texture) { - _texture = SDL_CreateTexture(_render, SDL_PIXELFORMAT_IYUV, - SDL_TEXTUREACCESS_STREAMING, - pFrame->width, - pFrame->height); + if (pFrame->format == AV_PIX_FMT_NV12) { + _texture = SDL_CreateTexture( + _render, SDL_PIXELFORMAT_NV12, SDL_TEXTUREACCESS_STREAMING, pFrame->width, pFrame->height); + } else { + _texture = SDL_CreateTexture( + _render, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, pFrame->width, pFrame->height); + } } if (_texture) { - SDL_UpdateYUVTexture(_texture, nullptr, - pFrame->data[0], pFrame->linesize[0], - pFrame->data[1], pFrame->linesize[1], - pFrame->data[2], pFrame->linesize[2]); + //需要更新sdl到最新(>=2.0.16) + if (pFrame->format == AV_PIX_FMT_NV12) { + SDL_UpdateNVTexture( + _texture, nullptr, pFrame->data[0], pFrame->linesize[0], pFrame->data[1], pFrame->linesize[1]); + } else { + SDL_UpdateYUVTexture( + _texture, nullptr, pFrame->data[0], pFrame->linesize[0], pFrame->data[1], pFrame->linesize[1], + pFrame->data[2], pFrame->linesize[2]); + } //SDL_UpdateTexture(_texture, nullptr, pFrame->data[0], pFrame->linesize[0]); SDL_RenderClear(_render); @@ -190,4 +198,4 @@ private: void *_hwnd = nullptr; }; -#endif /* YUVDISPLAYER_H_ */ \ No newline at end of file +#endif /* YUVDISPLAYER_H_ */