Skip to content

Commit d94b11a

Browse files
committed
ffmpeg_filter: Factor get_compliance_unofficial_pix_fmts() out
Signed-off-by: Michael Niedermayer <[email protected]>
1 parent 82d2aa2 commit d94b11a

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

ffmpeg_filter.c

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,29 +38,38 @@
3838
#include "libavutil/imgutils.h"
3939
#include "libavutil/samplefmt.h"
4040

41+
42+
static const enum AVPixelFormat *get_compliance_unofficial_pix_fmts(enum AVCodecID codec_id, const enum AVPixelFormat default_formats[])
43+
{
44+
static const enum AVPixelFormat mjpeg_formats[] =
45+
{ AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
46+
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
47+
AV_PIX_FMT_NONE };
48+
static const enum AVPixelFormat ljpeg_formats[] =
49+
{ AV_PIX_FMT_BGR24 , AV_PIX_FMT_BGRA , AV_PIX_FMT_BGR0,
50+
AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
51+
AV_PIX_FMT_YUV420P , AV_PIX_FMT_YUV444P , AV_PIX_FMT_YUV422P,
52+
AV_PIX_FMT_NONE};
53+
54+
if (codec_id == AV_CODEC_ID_MJPEG) {
55+
return mjpeg_formats;
56+
} else if (codec_id == AV_CODEC_ID_LJPEG) {
57+
return ljpeg_formats;
58+
} else {
59+
return default_formats;
60+
}
61+
}
62+
4163
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx, AVCodec *codec, enum AVPixelFormat target)
4264
{
4365
if (codec && codec->pix_fmts) {
4466
const enum AVPixelFormat *p = codec->pix_fmts;
4567
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(target);
4668
int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
4769
enum AVPixelFormat best= AV_PIX_FMT_NONE;
48-
static const enum AVPixelFormat mjpeg_formats[] =
49-
{ AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
50-
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
51-
AV_PIX_FMT_NONE };
52-
static const enum AVPixelFormat ljpeg_formats[] =
53-
{ AV_PIX_FMT_BGR24 , AV_PIX_FMT_BGRA , AV_PIX_FMT_BGR0,
54-
AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
55-
AV_PIX_FMT_YUV420P , AV_PIX_FMT_YUV444P , AV_PIX_FMT_YUV422P,
56-
AV_PIX_FMT_NONE};
5770

5871
if (enc_ctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) {
59-
if (enc_ctx->codec_id == AV_CODEC_ID_MJPEG) {
60-
p = mjpeg_formats;
61-
} else if (enc_ctx->codec_id == AV_CODEC_ID_LJPEG) {
62-
p =ljpeg_formats;
63-
}
72+
p = get_compliance_unofficial_pix_fmts(enc_ctx->codec_id, p);
6473
}
6574
for (; *p != AV_PIX_FMT_NONE; p++) {
6675
best= avcodec_find_best_pix_fmt_of_2(best, *p, target, has_alpha, NULL);
@@ -130,12 +139,7 @@ static char *choose_pix_fmts(OutputStream *ost)
130139

131140
p = ost->enc->pix_fmts;
132141
if (ost->enc_ctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) {
133-
if (ost->enc_ctx->codec_id == AV_CODEC_ID_MJPEG) {
134-
p = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE };
135-
} else if (ost->enc_ctx->codec_id == AV_CODEC_ID_LJPEG) {
136-
p = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUV420P,
137-
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_BGRA, AV_PIX_FMT_NONE };
138-
}
142+
p = get_compliance_unofficial_pix_fmts(ost->enc_ctx->codec_id, p);
139143
}
140144

141145
for (; *p != AV_PIX_FMT_NONE; p++) {

0 commit comments

Comments
 (0)