Skip to content
Snippets Groups Projects
Commit 9f0869cd authored by Philippe Gorley's avatar Philippe Gorley Committed by Olivier SOLDANO
Browse files

accel: optimize get_format callback


Remove the second loop in the getFormatCb function. Ring will no longer
check the pixel formats twice in case hardware decoding isn't possible.

Change-Id: Ib03deb152394948979249828376bc4280b859424
Reviewed-by: default avatarOlivier Soldano <olivier.soldano@savoirfairelinux.com>
parent 13d858be
No related branches found
No related tags found
No related merge requests found
...@@ -54,7 +54,9 @@ getFormatCb(AVCodecContext* codecCtx, const AVPixelFormat* formats) ...@@ -54,7 +54,9 @@ getFormatCb(AVCodecContext* codecCtx, const AVPixelFormat* formats)
return avcodec_default_get_format(codecCtx, formats); return avcodec_default_get_format(codecCtx, formats);
} }
for (int i = 0; formats[i] != AV_PIX_FMT_NONE; i++) { AVPixelFormat fallback = AV_PIX_FMT_NONE;
for (int i = 0; formats[i] != AV_PIX_FMT_NONE; ++i) {
fallback = formats[i];
if (formats[i] == accel->format()) { if (formats[i] == accel->format()) {
accel->setWidth(codecCtx->coded_width); accel->setWidth(codecCtx->coded_width);
accel->setHeight(codecCtx->coded_height); accel->setHeight(codecCtx->coded_height);
...@@ -62,7 +64,6 @@ getFormatCb(AVCodecContext* codecCtx, const AVPixelFormat* formats) ...@@ -62,7 +64,6 @@ getFormatCb(AVCodecContext* codecCtx, const AVPixelFormat* formats)
accel->setCodecCtx(codecCtx); accel->setCodecCtx(codecCtx);
if (accel->init()) if (accel->init())
return accel->format(); return accel->format();
break;
} }
} }
...@@ -70,14 +71,7 @@ getFormatCb(AVCodecContext* codecCtx, const AVPixelFormat* formats) ...@@ -70,14 +71,7 @@ getFormatCb(AVCodecContext* codecCtx, const AVPixelFormat* formats)
RING_WARN("Falling back to software decoding"); RING_WARN("Falling back to software decoding");
codecCtx->get_format = avcodec_default_get_format; codecCtx->get_format = avcodec_default_get_format;
codecCtx->get_buffer2 = avcodec_default_get_buffer2; codecCtx->get_buffer2 = avcodec_default_get_buffer2;
for (int i = 0; formats[i] != AV_PIX_FMT_NONE; i++) { return fallback;
auto desc = av_pix_fmt_desc_get(formats[i]);
if (desc && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
return formats[i];
}
}
return AV_PIX_FMT_NONE;
} }
static int static int
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment