| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #pragma once
- static const enum AVPixelFormat i420_formats[] = {
- AV_PIX_FMT_YUV420P,
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_YUV422P,
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_NONE
- };
- static const enum AVPixelFormat nv12_formats[] = {
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_YUV420P,
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_NONE
- };
- static const enum AVPixelFormat i444_formats[] = {
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_RGBA,
- AV_PIX_FMT_BGRA,
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_NONE
- };
- static const enum AVPixelFormat yuy2_formats[] = {
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_YUV420P,
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_NONE
- };
- static const enum AVPixelFormat uyvy_formats[] = {
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_YUV420P,
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_NONE
- };
- static const enum AVPixelFormat rgba_formats[] = {
- AV_PIX_FMT_RGBA,
- AV_PIX_FMT_BGRA,
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_NONE
- };
- static const enum AVPixelFormat bgra_formats[] = {
- AV_PIX_FMT_BGRA,
- AV_PIX_FMT_RGBA,
- AV_PIX_FMT_YUV444P,
- AV_PIX_FMT_YUYV422,
- AV_PIX_FMT_UYVY422,
- AV_PIX_FMT_NV12,
- AV_PIX_FMT_NV21,
- AV_PIX_FMT_NONE
- };
- static enum AVPixelFormat get_best_format(
- const enum AVPixelFormat *best,
- const enum AVPixelFormat *formats)
- {
- while (*best != AV_PIX_FMT_NONE) {
- enum AVPixelFormat best_format = *best;
- const enum AVPixelFormat *cur_formats = formats;
- while (*cur_formats != AV_PIX_FMT_NONE) {
- enum AVPixelFormat avail_format = *cur_formats;
- if (best_format == avail_format)
- return best_format;
- cur_formats++;
- }
- best++;
- }
- return AV_PIX_FMT_NONE;
- }
- static inline enum AVPixelFormat get_closest_format(
- enum AVPixelFormat format,
- const enum AVPixelFormat *formats)
- {
- enum AVPixelFormat best_format = AV_PIX_FMT_NONE;
- if (!formats || formats[0] == AV_PIX_FMT_NONE)
- return format;
- switch ((int)format) {
- case AV_PIX_FMT_YUV444P:
- best_format = get_best_format(i444_formats, formats);
- break;
- case AV_PIX_FMT_YUV420P:
- best_format = get_best_format(i420_formats, formats);
- break;
- case AV_PIX_FMT_NV12:
- best_format = get_best_format(nv12_formats, formats);
- break;
- case AV_PIX_FMT_YUYV422:
- best_format = get_best_format(yuy2_formats, formats);
- break;
- case AV_PIX_FMT_UYVY422:
- best_format = get_best_format(uyvy_formats, formats);
- break;
- case AV_PIX_FMT_RGBA:
- best_format = get_best_format(rgba_formats, formats);
- break;
- case AV_PIX_FMT_BGRA:
- best_format = get_best_format(bgra_formats, formats);
- break;
- }
- return (best_format == AV_PIX_FMT_NONE) ? formats[0] : best_format;
- }
|