History

libavcodec/qsvenc_hevc: encode RGB format rawvideo

Add support for hevc_qsv to input RGB format frame. It will transform frame to yuv inside MediaSDK instead of using auto scale. Now hevc_qsv supports directly encoding BGRA and X2RGB10 format. The X2RGB10 correspond to the A2RGB20 format and BGRA correspond to RGB4 format in MediaSDK.

Wenbin Chen committed 4 years ago

Commit 9da19c21 parent b1c26ce3 files · +30 −0Browse files

Unified · Split

3 files
  1. libavcodec/qsv.c +16 −0
  2. libavcodec/qsvenc.c +8 −0
  3. libavcodec/qsvenc_hevc.c +6 −0
libavcodec/qsv.c+16−0
@@ -189,6 +189,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) · 188 unmodified lines
189189 case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12;
190190 case MFX_FOURCC_P010: return AV_PIX_FMT_P010;
191191 case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8;
192+#if QSV_VERSION_ATLEAST(1, 9)
193+ case MFX_FOURCC_A2RGB10: return AV_PIX_FMT_X2RGB10;
194+#endif
195+#if QSV_VERSION_ATLEAST(1, 17)
196+ case MFX_FOURCC_RGB4: return AV_PIX_FMT_BGRA;
197+#endif
192198 #if CONFIG_VAAPI
193199 case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422;
194200 #if QSV_VERSION_ATLEAST(1, 27)
@@ -211,6 +217,16 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) · 16 unmodified lines
211217 case AV_PIX_FMT_P010:
212218 *fourcc = MFX_FOURCC_P010;
213219 return AV_PIX_FMT_P010;
220+#if QSV_VERSION_ATLEAST(1, 9)
221+ case AV_PIX_FMT_X2RGB10:
222+ *fourcc = MFX_FOURCC_A2RGB10;
223+ return AV_PIX_FMT_X2RGB10;
224+#endif
225+#if QSV_VERSION_ATLEAST(1, 17)
226+ case AV_PIX_FMT_BGRA:
227+ *fourcc = MFX_FOURCC_RGB4;
228+ return AV_PIX_FMT_BGRA;
229+#endif
214230 #if CONFIG_VAAPI
215231 case AV_PIX_FMT_YUV422P:
216232 case AV_PIX_FMT_YUYV422:
libavcodec/qsvenc.c+8−0
@@ -1616,6 +1616,14 @@ static int submit_frame(QSVEncContext *q, const AVFrame *frame, · 1615 unmodified lines
16161616 qf->surface.Data.V = qf->surface.Data.UV + 2;
16171617 break;
16181618
1619+ case AV_PIX_FMT_X2RGB10:
1620+ case AV_PIX_FMT_BGRA:
1621+ qf->surface.Data.B = qf->frame->data[0];
1622+ qf->surface.Data.G = qf->frame->data[0] + 1;
1623+ qf->surface.Data.R = qf->frame->data[0] + 2;
1624+ qf->surface.Data.A = qf->frame->data[0] + 3;
1625+ break;
1626+
16191627 default:
16201628 /* should not reach here */
16211629 av_assert0(0);
libavcodec/qsvenc_hevc.c+6−0
@@ -304,6 +304,12 @@ const AVCodec ff_hevc_qsv_encoder = { · 303 unmodified lines
304304 .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
305305 AV_PIX_FMT_P010,
306306 AV_PIX_FMT_QSV,
307+#if QSV_VERSION_ATLEAST(1, 17)
308+ AV_PIX_FMT_BGRA,
309+#endif
310+#if QSV_VERSION_ATLEAST(1, 9)
311+ AV_PIX_FMT_X2RGB10,
312+#endif
307313 AV_PIX_FMT_NONE },
308314 .priv_class = &class,
309315 .defaults = qsv_enc_defaults,

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t