From bf51c08aa872004dba80a662950e01fbf4061e8d Mon Sep 17 00:00:00 2001 From: Good Guy Date: Tue, 10 Dec 2024 11:29:41 -0700 Subject: [PATCH] Credit Andrew + Terje testing Intel hardware qsv and vaapi additions --- cinelerra-5.1/cinelerra/ffmpeg.C | 19 ++++++++++++++---- cinelerra-5.1/cinelerra/ffmpeg.h | 2 +- cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.mp4 | 4 ++++ .../ffmpeg/video/av1_qsv_10b420.webm | 4 ++++ cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.mp4 | 4 ++++ cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.webm | 4 ++++ .../ffmpeg/video/av1_vaapi_10b420.mp4 | 5 +++++ .../ffmpeg/video/av1_vaapi_10b420.webm | 5 +++++ .../ffmpeg/video/av1_vaapi_8b420.mp4 | 5 +++++ .../ffmpeg/video/av1_vaapi_8b420.webm | 5 +++++ .../ffmpeg/video/h264_mediacodec.mp4 | 3 +++ cinelerra-5.1/ffmpeg/video/h264_qsv_8b420.mp4 | 4 ++++ .../ffmpeg/video/h264_vaapi_8b420.mp4 | 5 +++++ .../ffmpeg/video/hevc_mediacodec.mp4 | 3 +++ .../ffmpeg/video/hevc_qsv_10b420.mp4 | 4 ++-- .../ffmpeg/video/hevc_qsv_10b422.mp4 | 4 ++-- cinelerra-5.1/ffmpeg/video/hevc_qsv_8b420.mp4 | 4 ++-- .../ffmpeg/video/hevc_vaapi_10b420.mp4 | 5 +++++ .../ffmpeg/video/hevc_vaapi_10b422.mp4 | 5 +++++ .../ffmpeg/video/hevc_vaapi_8b420.mp4 | 5 +++++ cinelerra-5.1/ffmpeg/video/mpeg2_hdv.mpeg | 9 +++++++++ cinelerra-5.1/ffmpeg/video/presets_vaapi.tar | Bin 0 -> 30720 bytes cinelerra-5.1/ffmpeg/video/vp9_qsv_10b420.mp4 | 4 ++++ .../ffmpeg/video/vp9_qsv_10b420.webm | 4 ++++ cinelerra-5.1/ffmpeg/video/vp9_qsv_8b420.mp4 | 4 ++++ cinelerra-5.1/ffmpeg/video/vp9_qsv_8b420.webm | 4 ++++ .../ffmpeg/video/vp9_vaapi_10b420.mp4 | 5 +++++ .../ffmpeg/video/vp9_vaapi_10b420.webm | 5 +++++ .../ffmpeg/video/vp9_vaapi_8b420.mp4 | 5 +++++ .../ffmpeg/video/vp9_vaapi_8b420.webm | 5 +++++ .../thirdparty/src/mjpegtools-2.2.1.patch9 | 10 +++++++++ 31 files changed, 143 insertions(+), 11 deletions(-) create mode 100644 cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/h264_mediacodec.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/h264_qsv_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/h264_vaapi_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/hevc_mediacodec.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b422.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/hevc_vaapi_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/mpeg2_hdv.mpeg create mode 100644 cinelerra-5.1/ffmpeg/video/presets_vaapi.tar create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_qsv_10b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_qsv_10b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_qsv_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_qsv_8b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_vaapi_10b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_vaapi_10b420.webm create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_vaapi_8b420.mp4 create mode 100644 cinelerra-5.1/ffmpeg/video/vp9_vaapi_8b420.webm create mode 100644 cinelerra-5.1/thirdparty/src/mjpegtools-2.2.1.patch9 diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C index 7521c0ba..075ef4dd 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.C +++ b/cinelerra-5.1/cinelerra/ffmpeg.C @@ -1194,7 +1194,7 @@ int FFVideoStream::decode_hw_format(AVCodec *decoder, AVHWDeviceType type) return ret; } -AVHWDeviceType FFVideoStream::encode_hw_activate(const char *hw_dev) +AVHWDeviceType FFVideoStream::encode_hw_activate(const char *hw_dev, const char *hw_sformat) { const char *drm_node_enc = getenv("CIN_DRM_ENC"); AVBufferRef *hw_device_ctx = 0; @@ -1230,6 +1230,7 @@ AVHWDeviceType FFVideoStream::encode_hw_activate(const char *hw_dev) AVHWFramesContext *frames_ctx = (AVHWFramesContext *)(hw_frames_ref->data); frames_ctx->format = AV_PIX_FMT_VAAPI; frames_ctx->sw_format = AV_PIX_FMT_NV12; + if (strcmp(hw_sformat, "vaapi")) frames_ctx->sw_format = av_get_pix_fmt(hw_sformat); frames_ctx->width = width; frames_ctx->height = height; frames_ctx->initial_pool_size = 0; // 200; @@ -2900,6 +2901,16 @@ int FFMPEG::open_encoder(const char *type, const char *spec) FFStream *fst = 0; AVStream *st = 0; AVCodecContext *ctx = 0; + + /* some encoders dislike ildct flag in ffmpeg 7.0/7.1 */ + int is_no_ildct; + if (!strcmp (codec_name, "av1_qsv") || + !strcmp(codec_name, "h264_qsv") || + !strcmp(codec_name, "vp9_qsv")) + is_no_ildct=1; + else + is_no_ildct=0; + const AVCodecDescriptor *codec_desc = 0; #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) @@ -3057,7 +3068,7 @@ int FFMPEG::open_encoder(const char *type, const char *spec) } AVPixelFormat pix_fmt = av_get_pix_fmt(asset->ff_pixel_format); if( opt_hw_dev != 0 ) { - AVHWDeviceType hw_type = vid->encode_hw_activate(opt_hw_dev); + AVHWDeviceType hw_type = vid->encode_hw_activate(opt_hw_dev, asset->ff_pixel_format); switch( hw_type ) { case AV_HWDEVICE_TYPE_VAAPI: pix_fmt = AV_PIX_FMT_VAAPI; @@ -3110,7 +3121,7 @@ int FFMPEG::open_encoder(const char *type, const char *spec) av_dict_set(&sopts, "field_order", "tt", 0); else av_dict_set(&sopts, "field_order", "tb", 0); - if (ctx->codec_id != AV_CODEC_ID_MJPEG) + if (ctx->codec_id != AV_CODEC_ID_MJPEG && !is_no_ildct) av_dict_set(&sopts, "flags", "+ilme+ildct", 0); break; case ILACE_MODE_BOTTOM_FIRST: @@ -3118,7 +3129,7 @@ int FFMPEG::open_encoder(const char *type, const char *spec) av_dict_set(&sopts, "field_order", "bb", 0); else av_dict_set(&sopts, "field_order", "bt", 0); - if (ctx->codec_id != AV_CODEC_ID_MJPEG) + if (ctx->codec_id != AV_CODEC_ID_MJPEG && !is_no_ildct) av_dict_set(&sopts, "flags", "+ilme+ildct", 0); break; case ILACE_MODE_NOTINTERLACED: av_dict_set(&sopts, "field_order", "progressive", 0); break; diff --git a/cinelerra-5.1/cinelerra/ffmpeg.h b/cinelerra-5.1/cinelerra/ffmpeg.h index ed864b59..5253d9c7 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.h +++ b/cinelerra-5.1/cinelerra/ffmpeg.h @@ -278,7 +278,7 @@ public: #else int decode_hw_format(AVCodec *decoder, AVHWDeviceType type); #endif - AVHWDeviceType encode_hw_activate(const char *hw_dev); + AVHWDeviceType encode_hw_activate(const char *hw_dev, const char *hw_sformat); int encode_hw_write(FFrame *picture); int encode_frame(AVFrame *frame); int create_filter(const char *filter_spec); diff --git a/cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.mp4 b/cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.mp4 new file mode 100644 index 00000000..3124c595 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.mp4 @@ -0,0 +1,4 @@ +mp4 av1_qsv +cin_pix_fmt=p010le +profile=main +# global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.webm b/cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.webm new file mode 100644 index 00000000..4269b211 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_qsv_10b420.webm @@ -0,0 +1,4 @@ +webm av1_qsv +cin_pix_fmt=p010le +profile=main +# global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.mp4 b/cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.mp4 new file mode 100644 index 00000000..3034c4c0 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.mp4 @@ -0,0 +1,4 @@ +mp4 av1_qsv +cin_pix_fmt=nv12 +profile=main +# global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.webm b/cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.webm new file mode 100644 index 00000000..e6dd5ba9 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_qsv_8b420.webm @@ -0,0 +1,4 @@ +webm av1_qsv +cin_pix_fmt=nv12 +profile=main +# global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.mp4 b/cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.mp4 new file mode 100644 index 00000000..20ed818a --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.mp4 @@ -0,0 +1,5 @@ +mp4 av1_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=p010le +profile=main +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.webm b/cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.webm new file mode 100644 index 00000000..07b74bec --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_vaapi_10b420.webm @@ -0,0 +1,5 @@ +webm av1_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=p010le +profile=main +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.mp4 b/cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.mp4 new file mode 100644 index 00000000..ce41a323 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.mp4 @@ -0,0 +1,5 @@ +mp4 av1_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=nv12 +profile=main +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.webm b/cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.webm new file mode 100644 index 00000000..117ebb18 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/av1_vaapi_8b420.webm @@ -0,0 +1,5 @@ +webm av1_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=nv12 +profile=main +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/h264_mediacodec.mp4 b/cinelerra-5.1/ffmpeg/video/h264_mediacodec.mp4 new file mode 100644 index 00000000..b0bce96b --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/h264_mediacodec.mp4 @@ -0,0 +1,3 @@ +mp4 h264_mediacodec +cin_pix_fmt=yuv420p +pix_fmt=yuv420p \ No newline at end of file diff --git a/cinelerra-5.1/ffmpeg/video/h264_qsv_8b420.mp4 b/cinelerra-5.1/ffmpeg/video/h264_qsv_8b420.mp4 new file mode 100644 index 00000000..145ad676 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/h264_qsv_8b420.mp4 @@ -0,0 +1,4 @@ +mp4 h264_qsv +cin_pix_fmt=nv12 +profile=high +# global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/h264_vaapi_8b420.mp4 b/cinelerra-5.1/ffmpeg/video/h264_vaapi_8b420.mp4 new file mode 100644 index 00000000..1a457604 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/h264_vaapi_8b420.mp4 @@ -0,0 +1,5 @@ +mp4 h264_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=nv12 +profile=high +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/hevc_mediacodec.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_mediacodec.mp4 new file mode 100644 index 00000000..4f3bac1c --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/hevc_mediacodec.mp4 @@ -0,0 +1,3 @@ +mp4 hevc_mediacodec +cin_pix_fmt=yuv420p +pix_fmt=yuv420p \ No newline at end of file diff --git a/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b420.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b420.mp4 index 1f183883..ebc8ddb2 100644 --- a/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b420.mp4 +++ b/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b420.mp4 @@ -1,5 +1,5 @@ -mp4 hevc_qsv_10b420 -# usable with Pixels: p010le +mp4 hevc_qsv +cin_pix_fmt=p010le profile=main10 # global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b422.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b422.mp4 index 421caf12..04e47034 100644 --- a/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b422.mp4 +++ b/cinelerra-5.1/ffmpeg/video/hevc_qsv_10b422.mp4 @@ -1,5 +1,5 @@ -mp4 hevc_qsv_10b422 -# usable with Pixels: y210le +mp4 hevc_qsv +cin_pix_fmt=y210le profile=0 # global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/hevc_qsv_8b420.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_qsv_8b420.mp4 index 96c60ede..66eadbbb 100644 --- a/cinelerra-5.1/ffmpeg/video/hevc_qsv_8b420.mp4 +++ b/cinelerra-5.1/ffmpeg/video/hevc_qsv_8b420.mp4 @@ -1,4 +1,4 @@ -mp4 hevc_qsv_8b420 -# usable with Pixels: nv12 +mp4 hevc_qsv +cin_pix_fmt=nv12 profile=main # global_quality=25 diff --git a/cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b420.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b420.mp4 new file mode 100644 index 00000000..3639b3b0 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b420.mp4 @@ -0,0 +1,5 @@ +mp4 hevc_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=p010le +profile=main10 +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b422.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b422.mp4 new file mode 100644 index 00000000..3a64bf7c --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/hevc_vaapi_10b422.mp4 @@ -0,0 +1,5 @@ +mp4 hevc_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=y210le +profile=rext +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/hevc_vaapi_8b420.mp4 b/cinelerra-5.1/ffmpeg/video/hevc_vaapi_8b420.mp4 new file mode 100644 index 00000000..08c598ef --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/hevc_vaapi_8b420.mp4 @@ -0,0 +1,5 @@ +mp4 hevc_vaapi +cin_hw_dev=vaapi +cin_pix_fmt=nv12 +profile=main +# global_quality=22 diff --git a/cinelerra-5.1/ffmpeg/video/mpeg2_hdv.mpeg b/cinelerra-5.1/ffmpeg/video/mpeg2_hdv.mpeg new file mode 100644 index 00000000..581f068b --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/mpeg2_hdv.mpeg @@ -0,0 +1,9 @@ +mpeg mpeg2video +trellis=1 +mbd=rd +cmp=satd +subcmp=satd +b=25000000 +g=15 +bf=2 +b_strategy=1 diff --git a/cinelerra-5.1/ffmpeg/video/presets_vaapi.tar b/cinelerra-5.1/ffmpeg/video/presets_vaapi.tar new file mode 100644 index 0000000000000000000000000000000000000000..bb4d1bda9d9b2b2fa0c0cb80bdd829b862bb4726 GIT binary patch literal 30720 zcmeHP+j81E6y=$(VCKB5($@Wf_w#uEfN@e_zv}tlb@h3D`2MLniPfp9_S==gPWkMGCofI~`u^Fw|^^2P4B-L03xN-!FX6HEga#u;#Pyju0H zO5rTC3Y-9Gbba-{ceSl6v99M<&p#wwAMQtGqI`f;P5PVs2O04ntcBU42q(|{KRi7h zgHcC?)b;4=@1=-$_(it{=J(sj)#m5w^ZK-GbfEdie*3)ovO6yKT=0kWe1CZQvVB-D zch&ZB{?Fp;!_!^$u=@6+de|O+Edhx5?`7`mak88G|8sq}8~0nV&RC_q^Kgyw%^@88`2_w0X^{>J`CHvrlH z1=dfb|6rtNMmz9MavSSEIOlP9;FS_u%WM0;u50SL7OxfUX$_K+r@*mFezmESx zqyLZm{{f6y3PbFF+5lvkf;Vk6(Ekk>^^yQEr8SV`|3&|W;f?=aank=H>mt&B>9u1{ zTZQjN#rD7ATr({VM*1~xb_f0Ve_I!W1KvnM@&6*zH@cHdln=(0e z!(4^h{=ck&+X(=H{%^KlHx&NQH7&*34fTJ0y3ddRnB>1~{C~nKDKUK9#Q$smALak$ zUj`V%zvTZ3^!Z!OJk;W^n*_gp`k%rJ%z4M1RH6wET;v~JHVzDP0_}g{y(RNM|J+T{ z!zK^qgP|q)k7URE-#-6A)1f0F&s|KhpmIwK9bv z`u_`p0|1Bh^O4lQ%rs@|;LER{@-Xt`k!smdkx>zf4msj|5kBkxi@(H4@mxd zD8Ap1J^i1O@&O=e{cqy`ef`JJWd8>sW-1KP|G@uG$Nw_TNZDos{Xgw}2KWDf{C~_V zZ{zme&7f|BuiA==jfp{Qm)lxeB%ZcWYpf`=31jx#px~ySMd!nrz@C|GWG@rHpLP z|Kno-NdF5ggh>Cu|GZY##rluAnHb_XUf}bYKwjnlw{;EH)wO@1z~HHi(Fk<+ z{x?1Ue?I@$@gL8jlKnq=a{r)#CjY-%1cNpJK+gX^0QfKe$}9RmsV^|C|GoWxtN%)p z{a<9|MEdVI>c7F$ms~lHPxx^`0Kjpuj9Z2A|H%K3j|^yPTCAx-Q~F<#$(x{)?$*DW zl=8vIlKdA<{$FeVH~a@{==nbZhPes@?Ek?1Pu72~87bTDP5qz7{2$`~N9S>S{=eS; zQ~qE6wGivS<$_6k3JV(ZMqK&-9i9%9LRjr(8y&bD0KgqUQ`gmX>-|Cgu~QG@5s3AF zBFYB?OY6TqKmYH{f2iYsl>Z;Vn58hp{-+H