mirror of https://git.ffmpeg.org/ffmpeg.git
swscale: Introduce a helper to identify semi-planar formats
This cleans up the ever-more-unreadable list of semi-planar exclusions for selecting the planar copy wrapper.
This commit is contained in:
parent
1c7f1f38c5
commit
dd3f1e3a11
|
@ -676,6 +676,17 @@ static av_always_inline int isPlanarYUV(enum AVPixelFormat pix_fmt)
|
||||||
return ((desc->flags & AV_PIX_FMT_FLAG_PLANAR) && isYUV(pix_fmt));
|
return ((desc->flags & AV_PIX_FMT_FLAG_PLANAR) && isYUV(pix_fmt));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Identity semi-planar YUV formats. Specifically, those are YUV formats
|
||||||
|
* where the second and third components (U & V) are on the same plane.
|
||||||
|
*/
|
||||||
|
static av_always_inline int isSemiPlanarYUV(enum AVPixelFormat pix_fmt)
|
||||||
|
{
|
||||||
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
||||||
|
av_assert0(desc);
|
||||||
|
return (isPlanarYUV(pix_fmt) && desc->comp[1].plane == desc->comp[2].plane);
|
||||||
|
}
|
||||||
|
|
||||||
static av_always_inline int isRGB(enum AVPixelFormat pix_fmt)
|
static av_always_inline int isRGB(enum AVPixelFormat pix_fmt)
|
||||||
{
|
{
|
||||||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
||||||
|
|
|
@ -1930,12 +1930,7 @@ void ff_get_unscaled_swscale(SwsContext *c)
|
||||||
(isPlanarYUV(srcFormat) && isPlanarYUV(dstFormat) &&
|
(isPlanarYUV(srcFormat) && isPlanarYUV(dstFormat) &&
|
||||||
c->chrDstHSubSample == c->chrSrcHSubSample &&
|
c->chrDstHSubSample == c->chrSrcHSubSample &&
|
||||||
c->chrDstVSubSample == c->chrSrcVSubSample &&
|
c->chrDstVSubSample == c->chrSrcVSubSample &&
|
||||||
dstFormat != AV_PIX_FMT_NV12 && dstFormat != AV_PIX_FMT_NV21 &&
|
!isSemiPlanarYUV(srcFormat) && !isSemiPlanarYUV(dstFormat)))
|
||||||
dstFormat != AV_PIX_FMT_P010LE && dstFormat != AV_PIX_FMT_P010BE &&
|
|
||||||
dstFormat != AV_PIX_FMT_P016LE && dstFormat != AV_PIX_FMT_P016BE &&
|
|
||||||
srcFormat != AV_PIX_FMT_NV12 && srcFormat != AV_PIX_FMT_NV21 &&
|
|
||||||
srcFormat != AV_PIX_FMT_P010LE && srcFormat != AV_PIX_FMT_P010BE &&
|
|
||||||
srcFormat != AV_PIX_FMT_P016LE && srcFormat != AV_PIX_FMT_P016BE))
|
|
||||||
{
|
{
|
||||||
if (isPacked(c->srcFormat))
|
if (isPacked(c->srcFormat))
|
||||||
c->swscale = packedCopyWrapper;
|
c->swscale = packedCopyWrapper;
|
||||||
|
|
Loading…
Reference in New Issue