Falls back to the exact same code the software encoder uses.
---
 libavcodec/ffv1enc.c        |  4 ++--
 libavcodec/ffv1enc.h        |  1 +
 libavcodec/ffv1enc_vulkan.c | 10 ++++++++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 696823b796..1a0413895a 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -516,7 +516,7 @@ static int sort_stt(FFV1Context *s, uint8_t stt[256])
 }
 
 
-static int encode_determine_slices(AVCodecContext *avctx)
+int ff_ffv1_encode_determine_slices(AVCodecContext *avctx)
 {
     FFV1Context *s = avctx->priv_data;
     int plane_count = 1 + 2*s->chroma_planes + s->transparency;
@@ -919,7 +919,7 @@ static int encode_init_internal(AVCodecContext *avctx)
         return ret;
 
     if (s->version > 1) {
-        if ((ret = encode_determine_slices(avctx)) < 0)
+        if ((ret = ff_ffv1_encode_determine_slices(avctx)) < 0)
             return ret;
 
         if ((ret = ff_ffv1_write_extradata(avctx)) < 0)
diff --git a/libavcodec/ffv1enc.h b/libavcodec/ffv1enc.h
index 2ecc2d16ec..42d521a747 100644
--- a/libavcodec/ffv1enc.h
+++ b/libavcodec/ffv1enc.h
@@ -32,6 +32,7 @@ enum {
 };
 
 av_cold int ff_ffv1_encode_init(AVCodecContext *avctx);
+av_cold int ff_ffv1_encode_determine_slices(AVCodecContext *avctx);
 av_cold int ff_ffv1_write_extradata(AVCodecContext *avctx);
 av_cold int ff_ffv1_encode_setup_plane_info(AVCodecContext *avctx,
                                             enum AVPixelFormat pix_fmt);
diff --git a/libavcodec/ffv1enc_vulkan.c b/libavcodec/ffv1enc_vulkan.c
index 1874a3f42b..243f472568 100644
--- a/libavcodec/ffv1enc_vulkan.c
+++ b/libavcodec/ffv1enc_vulkan.c
@@ -1540,8 +1540,14 @@ static av_cold int 
vulkan_encode_ffv1_init(AVCodecContext *avctx)
         f->num_v_slices = fv->num_v_slices;
 
         if (f->num_h_slices <= 0 && f->num_v_slices <= 0) {
-            f->num_h_slices = 32;
-            f->num_v_slices = 32;
+            if (avctx->slices) {
+                err = ff_ffv1_encode_determine_slices(avctx);
+                if (err < 0)
+                    return err;
+            } else {
+                f->num_h_slices = 32;
+                f->num_v_slices = 32;
+            }
         } else if (f->num_h_slices && f->num_v_slices <= 0) {
             f->num_v_slices = 1024 / f->num_h_slices;
         } else if (f->num_v_slices && f->num_h_slices <= 0) {
-- 
2.45.2
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to