{ { "H.265 12-bit (x265)", "x265_12bit", "H.265 12-bit (libx265)", HB_VCODEC_X265_12BIT, HB_MUX_AV_MP4|HB_MUX_AV_MKV, }, NULL, 1, HB_GID_VCODEC_H265, },
{ { "H.265 16-bit (x265)", "x265_16bit", "H.265 16-bit (libx265)", HB_VCODEC_X265_16BIT, HB_MUX_AV_MP4|HB_MUX_AV_MKV, }, NULL, 1, HB_GID_VCODEC_H265, },
{ { "H.265 (Intel QSV)", "qsv_h265", "H.265 (Intel Media SDK)", HB_VCODEC_QSV_H265, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H265, },
+ { { "H.265 10-bit (Intel QSV)", "qsv_h265_10bit", "H.265 10-bit (Intel Media SDK)", HB_VCODEC_QSV_H265_10BIT, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H265, },
{ { "MPEG-4", "mpeg4", "MPEG-4 (libavcodec)", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG4, },
{ { "MPEG-2", "mpeg2", "MPEG-2 (libavcodec)", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG2, },
{ { "VP8", "VP8", "VP8 (libvpx)", HB_VCODEC_FFMPEG_VP8, HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_VP8, },
{
switch (encoder)
{
+#ifdef USE_QSV
+ case HB_VCODEC_QSV_H265_10BIT:
+#endif
case HB_VCODEC_X264_10BIT:
case HB_VCODEC_X265_10BIT:
return 10;
#define HB_VCODEC_FFMPEG_VP9 0x0000080
#define HB_VCODEC_FFMPEG_MASK 0x00000F0
#define HB_VCODEC_QSV_H264 0x0000100
-#define HB_VCODEC_QSV_H265 0x0000200
+#define HB_VCODEC_QSV_H265_8BIT 0x0000200
+#define HB_VCODEC_QSV_H265_10BIT 0x0000400
+#define HB_VCODEC_QSV_H265_MASK 0x0000600
+#define HB_VCODEC_QSV_H265 HB_VCODEC_QSV_H265_8BIT
#define HB_VCODEC_QSV_MASK 0x0000F00
#define HB_VCODEC_X264_8BIT 0x0010000
#define HB_VCODEC_X264 HB_VCODEC_X264_8BIT
#define HB_VCODEC_X265_12BIT 0x0004000
#define HB_VCODEC_X265_16BIT 0x0008000
#define HB_VCODEC_X265_MASK 0x000F000
-#define HB_VCODEC_H265_MASK (HB_VCODEC_X265_MASK|HB_VCODEC_QSV_H265)
+#define HB_VCODEC_H265_MASK (HB_VCODEC_X265_MASK|HB_VCODEC_QSV_H265_MASK)
/* define an invalid CQ value compatible with all CQ-capable codecs */
#define HB_INVALID_VIDEO_QUALITY (-1000.)
case HB_VCODEC_X265_12BIT:
case HB_VCODEC_X265_16BIT:
case HB_VCODEC_QSV_H265:
+ case HB_VCODEC_QSV_H265_10BIT:
track->st->codecpar->codec_id = AV_CODEC_ID_HEVC;
if (job->config.h265.headers_length > 0)
int hb_qsv_available()
{
return ((hb_qsv_video_encoder_is_enabled(HB_VCODEC_QSV_H264) ? HB_VCODEC_QSV_H264 : 0) |
- (hb_qsv_video_encoder_is_enabled(HB_VCODEC_QSV_H265) ? HB_VCODEC_QSV_H265 : 0));
+ (hb_qsv_video_encoder_is_enabled(HB_VCODEC_QSV_H265) ? HB_VCODEC_QSV_H265 : 0) |
+ (hb_qsv_video_encoder_is_enabled(HB_VCODEC_QSV_H265_10BIT) ? HB_VCODEC_QSV_H265_10BIT : 0));
}
int hb_qsv_video_encoder_is_enabled(int encoder)
{
case HB_VCODEC_QSV_H264:
return hb_qsv_info_avc != NULL && hb_qsv_info_avc->available;
+ case HB_VCODEC_QSV_H265_10BIT:
+ if (qsv_hardware_generation(hb_get_cpu_platform()) < QSV_G6)
+ return 0;
case HB_VCODEC_QSV_H265:
return hb_qsv_info_hevc != NULL && hb_qsv_info_hevc->available;
default:
}
if (hb_qsv_info_hevc != NULL && hb_qsv_info_hevc->available)
{
- hb_log(" - H.265 encoder: yes");
+ hb_log(" - H.265 encoder: yes (8bit: yes, 10bit: %s)", (qsv_hardware_generation(hb_get_cpu_platform()) < QSV_G6) ? "no" : "yes" );
hb_log(" - preferred implementation: %s",
hb_qsv_impl_get_name(hb_qsv_info_hevc->implementation));
if (qsv_hardware_info_hevc.available)
{
case HB_VCODEC_QSV_H264:
return hb_qsv_info_avc;
+ case HB_VCODEC_QSV_H265_10BIT:
case HB_VCODEC_QSV_H265:
return hb_qsv_info_hevc;
default:
if (profile->value == MFX_PROFILE_HEVC_MAIN10 &&
qsv_hardware_generation(hb_get_cpu_platform()) < QSV_G6)
{
- hb_log("HEVC Main10 is not supported on this platform");
+ hb_log("qsv: HEVC Main10 is not supported on this platform");
profile = NULL;
}
{
case HB_VCODEC_QSV_H264:
return hb_h264_profile_names_8bit;
- case HB_VCODEC_QSV_H265:
+ case HB_VCODEC_QSV_H265_8BIT:
return hb_h265_profile_names_8bit;
+ case HB_VCODEC_QSV_H265_10BIT:
+ return hb_h265_profile_names_10bit;
default:
return NULL;
}
{
case HB_VCODEC_QSV_H264:
return hb_h264_level_names;
+ case HB_VCODEC_QSV_H265_10BIT:
case HB_VCODEC_QSV_H265:
return hb_h265_level_names;
default:
if (hb_qsv_info_avc != NULL) caps = hb_qsv_info_avc->capabilities;
break;
+ case HB_VCODEC_QSV_H265_10BIT:
case HB_VCODEC_QSV_H265:
if (hb_qsv_info_hevc != NULL) caps = hb_qsv_info_hevc->capabilities;
break;
uint64_t caps = 0;
switch (codec)
{
+ case HB_VCODEC_QSV_H265_10BIT:
case HB_VCODEC_QSV_H265:
if (hb_qsv_info_hevc != NULL) caps = hb_qsv_info_hevc->capabilities;
*direction = 1;
break;
case HB_VCODEC_QSV_H264:
case HB_VCODEC_QSV_H265:
+ case HB_VCODEC_QSV_H265_10BIT:
w = hb_get_work(h, WORK_ENCQSV);
break;
case HB_VCODEC_THEORA:
case HB_VCODEC_X265_16BIT:
case HB_VCODEC_QSV_H264:
case HB_VCODEC_QSV_H265:
+ case HB_VCODEC_QSV_H265_10BIT:
hb_log(" + profile: %s", job->encoder_profile);
default:
break;
case HB_VCODEC_X264_10BIT:
case HB_VCODEC_QSV_H264:
case HB_VCODEC_QSV_H265:
+ case HB_VCODEC_QSV_H265_10BIT:
hb_log(" + level: %s", job->encoder_level);
default:
break;