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
189 case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12;189 case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12;
190 case MFX_FOURCC_P010: return AV_PIX_FMT_P010;190 case MFX_FOURCC_P010: return AV_PIX_FMT_P010;
191 case MFX_FOURCC_P8: return AV_PIX_FMT_PAL8;191 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
192#if CONFIG_VAAPI198#if CONFIG_VAAPI
193 case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422;199 case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422;
194#if QSV_VERSION_ATLEAST(1, 27)200#if QSV_VERSION_ATLEAST(1, 27)
@@ -211,6 +217,16 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) · 16 unmodified lines
211 case AV_PIX_FMT_P010:217 case AV_PIX_FMT_P010:
212 *fourcc = MFX_FOURCC_P010;218 *fourcc = MFX_FOURCC_P010;
213 return AV_PIX_FMT_P010;219 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
214#if CONFIG_VAAPI230#if CONFIG_VAAPI
215 case AV_PIX_FMT_YUV422P:231 case AV_PIX_FMT_YUV422P:
216 case AV_PIX_FMT_YUYV422:232 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
1616 qf->surface.Data.V = qf->surface.Data.UV + 2;1616 qf->surface.Data.V = qf->surface.Data.UV + 2;
1617 break;1617 break;
1618 1618
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
1619 default:1627 default:
1620 /* should not reach here */1628 /* should not reach here */
1621 av_assert0(0);1629 av_assert0(0);
libavcodec/qsvenc_hevc.c+6−0
@@ -304,6 +304,12 @@ const AVCodec ff_hevc_qsv_encoder = { · 303 unmodified lines
304 .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,304 .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
305 AV_PIX_FMT_P010,305 AV_PIX_FMT_P010,
306 AV_PIX_FMT_QSV,306 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
307 AV_PIX_FMT_NONE },313 AV_PIX_FMT_NONE },
308 .priv_class = &class,314 .priv_class = &class,
309 .defaults = qsv_enc_defaults,315 .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