[FFmpeg-devel] [PATCH] vulkan/av1: fix tile upload offsets.

2023-06-20 Thread airlied
From: Dave Airlie 

This fixes decoding av1-1-b8-22-svc-L2T1.ivf
while not breaking other videos.
---
 libavcodec/vulkan_av1.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavcodec/vulkan_av1.c b/libavcodec/vulkan_av1.c
index 91e44ba803..005998b1bd 100644
--- a/libavcodec/vulkan_av1.c
+++ b/libavcodec/vulkan_av1.c
@@ -513,13 +513,15 @@ static int vk_av1_decode_slice(AVCodecContext *avctx,
 .tg_end   = s->tg_end,
 };
 
-err = ff_vk_decode_add_slice(avctx, vp, data, size, 0,
+err = ff_vk_decode_add_slice(avctx, vp,
+ data + s->tile_group_info[i].tile_offset,
+ s->tile_group_info[i].tile_size, 0,
  >tile_list.nb_tiles,
  >tile_offsets);
 if (err < 0)
 return err;
 
-//ap->tiles[ap->tile_list.nb_tiles - 1].offset = 
ap->tile_offsets[ap->tile_list.nb_tiles - 1];
+ap->tiles[ap->tile_list.nb_tiles - 1].offset = 
ap->tile_offsets[ap->tile_list.nb_tiles - 1];
 }
 
 return 0;
-- 
2.41.0

___
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".


[FFmpeg-devel] [PATCH] av1dec: handle dimension changes via get_format

2023-06-20 Thread airlied
From: Dave Airlie 

av1-1-b8-03-sizeup.ivf on vulkan causes gpu hangs as none of the
images get resized when dimensions change, this detects the dim
change and calls the get_format to reinit the context.
---
 libavcodec/av1dec.c | 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
index e7f98a6c81..1cec328563 100644
--- a/libavcodec/av1dec.c
+++ b/libavcodec/av1dec.c
@@ -721,6 +721,7 @@ static av_cold int av1_decode_free(AVCodecContext *avctx)
 }
 
 static int set_context_with_sequence(AVCodecContext *avctx,
+ int *dim_change,
  const AV1RawSequenceHeader *seq)
 {
 int width = seq->max_frame_width_minus_1 + 1;
@@ -753,6 +754,8 @@ static int set_context_with_sequence(AVCodecContext *avctx,
 int ret = ff_set_dimensions(avctx, width, height);
 if (ret < 0)
 return ret;
+if (dim_change)
+*dim_change = 1;
 }
 avctx->sample_aspect_ratio = (AVRational) { 1, 1 };
 
@@ -859,7 +862,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx)
 goto end;
 }
 
-ret = set_context_with_sequence(avctx, seq);
+ret = set_context_with_sequence(avctx, NULL, seq);
 if (ret < 0) {
 av_log(avctx, AV_LOG_WARNING, "Failed to set decoder context.\n");
 goto end;
@@ -1202,7 +1205,7 @@ static int av1_receive_frame_internal(AVCodecContext 
*avctx, AVFrame *frame)
 CodedBitstreamUnit *unit = >current_obu.units[i];
 AV1RawOBU *obu = unit->content;
 const AV1RawOBUHeader *header;
-
+int dim_change = 0;
 if (!obu)
 continue;
 
@@ -1220,7 +1223,8 @@ static int av1_receive_frame_internal(AVCodecContext 
*avctx, AVFrame *frame)
 
 s->raw_seq = >obu.sequence_header;
 
-ret = set_context_with_sequence(avctx, s->raw_seq);
+dim_change = 0;
+ret = set_context_with_sequence(avctx, _change, s->raw_seq);
 if (ret < 0) {
 av_log(avctx, AV_LOG_ERROR, "Failed to set context.\n");
 s->raw_seq = NULL;
@@ -1229,7 +1233,7 @@ static int av1_receive_frame_internal(AVCodecContext 
*avctx, AVFrame *frame)
 
 s->operating_point_idc = 
s->raw_seq->operating_point_idc[s->operating_point];
 
-if (s->pix_fmt == AV_PIX_FMT_NONE) {
+if (s->pix_fmt == AV_PIX_FMT_NONE || dim_change) {
 ret = get_pixel_format(avctx);
 if (ret < 0) {
 av_log(avctx, AV_LOG_ERROR,
-- 
2.41.0

___
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".