History

FFHWAccel: add buffer_ref argument to start_frame

This commit adds a reference to the buffer as an argument to start_frame, and adapts all existing code. This allows for asynchronous hardware accelerators to skip copying packet data by referencing it.

Lynne committed 1 year ago

Commit caff29d1 parent 23eb49958 files · +123 −42Browse files

Showing the changes to libavcodec (58 of 58 files). Show all

Unified · Split

58 files
  1. libavcodec/av1dec.c +2 −1
  2. libavcodec/d3d12va_av1.c +4 −1
  3. libavcodec/d3d12va_h264.c +3 −2
  4. libavcodec/d3d12va_hevc.c +4 −1
  5. libavcodec/d3d12va_mpeg2.c +4 −1
  6. libavcodec/d3d12va_vc1.c +4 −1
  7. libavcodec/d3d12va_vp9.c +4 −1
  8. libavcodec/dxva2_av1.c +1 −0
  9. libavcodec/dxva2_h264.c +1 −0
  10. libavcodec/dxva2_hevc.c +1 −0
  11. libavcodec/dxva2_mpeg2.c +1 −0
  12. libavcodec/dxva2_vc1.c +1 −0
  13. libavcodec/dxva2_vp9.c +1 −0
  14. libavcodec/ffv1dec.c +1 −1
  15. libavcodec/h263dec.c +1 −1
  16. libavcodec/h264dec.c +5 −3
  17. libavcodec/hevc/hevcdec.c +4 −1
  18. libavcodec/hwaccel_internal.h +3 −1
  19. libavcodec/mjpegdec.c +1 −1
  20. libavcodec/mpeg12dec.c +1 −1
  21. libavcodec/nvdec_av1.c +3 −1
  22. libavcodec/nvdec_h264.c +1 −0
  23. libavcodec/nvdec_hevc.c +1 −0
  24. libavcodec/nvdec_mjpeg.c +3 −1
  25. libavcodec/nvdec_mpeg12.c +3 −1
  26. libavcodec/nvdec_mpeg4.c +3 −1
  27. libavcodec/nvdec_vc1.c +3 −1
  28. libavcodec/nvdec_vp8.c +3 −1
  29. libavcodec/nvdec_vp9.c +3 −1
  30. libavcodec/proresdec.c +1 −1
  31. libavcodec/vaapi_av1.c +1 −0
  32. libavcodec/vaapi_h264.c +1 −0
  33. libavcodec/vaapi_hevc.c +1 −0
  34. libavcodec/vaapi_mjpeg.c +1 −0
  35. libavcodec/vaapi_mpeg2.c +4 −1
  36. libavcodec/vaapi_mpeg4.c +4 −1
  37. libavcodec/vaapi_vc1.c +4 −1
  38. libavcodec/vaapi_vp8.c +1 −0
  39. libavcodec/vaapi_vp9.c +1 −0
  40. libavcodec/vaapi_vvc.c +1 −0
  41. libavcodec/vc1dec.c +3 −3
  42. libavcodec/vdpau_av1.c +2 −1
  43. libavcodec/vdpau_h264.c +1 −0
  44. libavcodec/vdpau_hevc.c +1 −0
  45. libavcodec/vdpau_mpeg12.c +1 −0
  46. libavcodec/vdpau_mpeg4.c +1 −0
  47. libavcodec/vdpau_vc1.c +1 −0
  48. libavcodec/vdpau_vp9.c +2 −1
  49. libavcodec/videotoolbox.c +6 −2
  50. libavcodec/videotoolbox_av1.c +1 −0
  51. libavcodec/videotoolbox_vp9.c +1 −0
  52. libavcodec/vp8.c +1 −1
  53. libavcodec/vp9.c +1 −1
  54. libavcodec/vt_internal.h +1 −0
  55. libavcodec/vulkan_av1.c +1 −0
  56. libavcodec/vulkan_h264.c +1 −0
  57. libavcodec/vulkan_hevc.c +1 −0
  58. libavcodec/vvc/dec.c +7 −5
libavcodec/av1dec.c+2−1
@@ -1389,7 +1389,8 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) · 1388 unmodified lines
1389 s->cur_frame.temporal_id = header->temporal_id;1389 s->cur_frame.temporal_id = header->temporal_id;
1390 1390
1391 if (avctx->hwaccel && s->cur_frame.f) {1391 if (avctx->hwaccel && s->cur_frame.f) {
1392 ret = FF_HW_CALL(avctx, start_frame, unit->data, unit->data_size);1392 ret = FF_HW_CALL(avctx, start_frame, s->pkt->buf,
1393 unit->data, unit->data_size);
1393 if (ret < 0) {1394 if (ret < 0) {
1394 av_log(avctx, AV_LOG_ERROR, "HW accel start frame fail.\n");1395 av_log(avctx, AV_LOG_ERROR, "HW accel start frame fail.\n");
1395 goto end;1396 goto end;
libavcodec/d3d12va_av1.c+4−1
@@ -45,7 +45,10 @@ typedef struct AV1DecodePictureContext { · 44 unmodified lines
45 unsigned bitstream_size;45 unsigned bitstream_size;
46} AV1DecodePictureContext;46} AV1DecodePictureContext;
47 47
48static int d3d12va_av1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)48static int d3d12va_av1_start_frame(AVCodecContext *avctx,
49 av_unused const AVBufferRef *buffer_ref,
50 av_unused const uint8_t *buffer,
51 av_unused uint32_t size)
49{52{
50 const AV1DecContext *h = avctx->priv_data;53 const AV1DecContext *h = avctx->priv_data;
51 AV1DecodePictureContext *ctx_pic = h->cur_frame.hwaccel_picture_private;54 AV1DecodePictureContext *ctx_pic = h->cur_frame.hwaccel_picture_private;
libavcodec/d3d12va_h264.c+3−2
@@ -50,8 +50,9 @@ static void fill_slice_short(DXVA_Slice_H264_Short *slice, · 49 unmodified lines
50}50}
51 51
52static int d3d12va_h264_start_frame(AVCodecContext *avctx,52static int d3d12va_h264_start_frame(AVCodecContext *avctx,
53 av_unused const uint8_t *buffer,53 av_unused const AVBufferRef *buffer_ref,
54 av_unused uint32_t size)54 av_unused const uint8_t *buffer,
55 av_unused uint32_t size)
55{56{
56 const H264Context *h = avctx->priv_data;57 const H264Context *h = avctx->priv_data;
57 H264DecodePictureContext *ctx_pic = h->cur_pic_ptr->hwaccel_picture_private;58 H264DecodePictureContext *ctx_pic = h->cur_pic_ptr->hwaccel_picture_private;
libavcodec/d3d12va_hevc.c+4−1
@@ -49,7 +49,10 @@ static void fill_slice_short(DXVA_Slice_HEVC_Short *slice, unsigned position, un · 48 unmodified lines
49 slice->wBadSliceChopping = 0;49 slice->wBadSliceChopping = 0;
50}50}
51 51
52static int d3d12va_hevc_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)52static int d3d12va_hevc_start_frame(AVCodecContext *avctx,
53 av_unused const AVBufferRef *buffer_ref,
54 av_unused const uint8_t *buffer,
55 av_unused uint32_t size)
53{56{
54 const HEVCContext *h = avctx->priv_data;57 const HEVCContext *h = avctx->priv_data;
55 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);58 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);
libavcodec/d3d12va_mpeg2.c+4−1
@@ -40,7 +40,10 @@ typedef struct D3D12DecodePictureContext { · 39 unmodified lines
40 unsigned bitstream_size;40 unsigned bitstream_size;
41} D3D12DecodePictureContext;41} D3D12DecodePictureContext;
42 42
43static int d3d12va_mpeg2_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)43static int d3d12va_mpeg2_start_frame(AVCodecContext *avctx,
44 av_unused const AVBufferRef *buffer_ref,
45 av_unused const uint8_t *buffer,
46 av_unused uint32_t size)
44{47{
45 const MpegEncContext *s = avctx->priv_data;48 const MpegEncContext *s = avctx->priv_data;
46 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);49 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);
libavcodec/d3d12va_vc1.c+4−1
@@ -41,7 +41,10 @@ typedef struct D3D12DecodePictureContext { · 40 unmodified lines
41 unsigned bitstream_size;41 unsigned bitstream_size;
42} D3D12DecodePictureContext;42} D3D12DecodePictureContext;
43 43
44static int d3d12va_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)44static int d3d12va_vc1_start_frame(AVCodecContext *avctx,
45 av_unused const AVBufferRef *buffer_ref,
46 av_unused const uint8_t *buffer,
47 av_unused uint32_t size)
45{48{
46 const VC1Context *v = avctx->priv_data;49 const VC1Context *v = avctx->priv_data;
47 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);50 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);
libavcodec/d3d12va_vp9.c+4−1
@@ -45,7 +45,10 @@ static void fill_slice_short(DXVA_Slice_VPx_Short *slice, unsigned position, uns · 44 unmodified lines
45 slice->wBadSliceChopping = 0;45 slice->wBadSliceChopping = 0;
46}46}
47 47
48static int d3d12va_vp9_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)48static int d3d12va_vp9_start_frame(AVCodecContext *avctx,
49 av_unused const AVBufferRef *buffer_ref,
50 av_unused const uint8_t *buffer,
51 av_unused uint32_t size)
49{52{
50 const VP9SharedContext *h = avctx->priv_data;53 const VP9SharedContext *h = avctx->priv_data;
51 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);54 D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx);
libavcodec/dxva2_av1.c+1−0
@@ -272,6 +272,7 @@ int ff_dxva2_av1_fill_picture_parameters(const AVCodecContext *avctx, AVDXVACont · 271 unmodified lines
272}272}
273 273
274static int dxva2_av1_start_frame(AVCodecContext *avctx,274static int dxva2_av1_start_frame(AVCodecContext *avctx,
275 av_unused const AVBufferRef *buffer_ref,
275 av_unused const uint8_t *buffer,276 av_unused const uint8_t *buffer,
276 av_unused uint32_t size)277 av_unused uint32_t size)
277{278{
libavcodec/dxva2_h264.c+1−0
@@ -444,6 +444,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, · 443 unmodified lines
444 444
445 445
446static int dxva2_h264_start_frame(AVCodecContext *avctx,446static int dxva2_h264_start_frame(AVCodecContext *avctx,
447 av_unused const AVBufferRef *buffer_ref,
447 av_unused const uint8_t *buffer,448 av_unused const uint8_t *buffer,
448 av_unused uint32_t size)449 av_unused uint32_t size)
449{450{
libavcodec/dxva2_hevc.c+1−0
@@ -363,6 +363,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, · 362 unmodified lines
363 363
364 364
365static int dxva2_hevc_start_frame(AVCodecContext *avctx,365static int dxva2_hevc_start_frame(AVCodecContext *avctx,
366 av_unused const AVBufferRef *buffer_ref,
366 av_unused const uint8_t *buffer,367 av_unused const uint8_t *buffer,
367 av_unused uint32_t size)368 av_unused uint32_t size)
368{369{
libavcodec/dxva2_mpeg2.c+1−0
@@ -257,6 +257,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, · 256 unmodified lines
257}257}
258 258
259static int dxva2_mpeg2_start_frame(AVCodecContext *avctx,259static int dxva2_mpeg2_start_frame(AVCodecContext *avctx,
260 av_unused const AVBufferRef *buffer_ref,
260 av_unused const uint8_t *buffer,261 av_unused const uint8_t *buffer,
261 av_unused uint32_t size)262 av_unused uint32_t size)
262{263{
libavcodec/dxva2_vc1.c+1−0
@@ -315,6 +315,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, · 314 unmodified lines
315}315}
316 316
317static int dxva2_vc1_start_frame(AVCodecContext *avctx,317static int dxva2_vc1_start_frame(AVCodecContext *avctx,
318 av_unused const AVBufferRef *buffer_ref,
318 av_unused const uint8_t *buffer,319 av_unused const uint8_t *buffer,
319 av_unused uint32_t size)320 av_unused uint32_t size)
320{321{
libavcodec/dxva2_vp9.c+1−0
@@ -254,6 +254,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx, · 253 unmodified lines
254 254
255 255
256static int dxva2_vp9_start_frame(AVCodecContext *avctx,256static int dxva2_vp9_start_frame(AVCodecContext *avctx,
257 av_unused const AVBufferRef *buffer_ref,
257 av_unused const uint8_t *buffer,258 av_unused const uint8_t *buffer,
258 av_unused uint32_t size)259 av_unused uint32_t size)
259{260{
libavcodec/ffv1dec.c+1−1
@@ -742,7 +742,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, · 741 unmodified lines
742 742
743 /* Start */743 /* Start */
744 if (hwaccel) {744 if (hwaccel) {
745 ret = hwaccel->start_frame(avctx, avpkt->data, avpkt->size);745 ret = hwaccel->start_frame(avctx, avpkt->buf, avpkt->data, avpkt->size);
746 if (ret < 0)746 if (ret < 0)
747 return ret;747 return ret;
748 }748 }
libavcodec/h263dec.c+1−1
@@ -561,7 +561,7 @@ retry: · 560 unmodified lines
561 ff_thread_finish_setup(avctx);561 ff_thread_finish_setup(avctx);
562 562
563 if (avctx->hwaccel) {563 if (avctx->hwaccel) {
564 ret = FF_HW_CALL(avctx, start_frame,564 ret = FF_HW_CALL(avctx, start_frame, NULL,
565 s->gb.buffer, s->gb.buffer_end - s->gb.buffer);565 s->gb.buffer, s->gb.buffer_end - s->gb.buffer);
566 if (ret < 0 )566 if (ret < 0 )
567 return ret;567 return ret;
libavcodec/h264dec.c+5−3
@@ -587,7 +587,8 @@ static void debug_green_metadata(const H264SEIGreenMetaData *gm, void *logctx) · 586 unmodified lines
587 }587 }
588}588}
589 589
590static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)590static int decode_nal_units(H264Context *h, AVBufferRef *buf_ref,
591 const uint8_t *buf, int buf_size)
591{592{
592 AVCodecContext *const avctx = h->avctx;593 AVCodecContext *const avctx = h->avctx;
593 int nals_needed = 0; ///< number of NALs that need decoding before the next frame thread starts594 int nals_needed = 0; ///< number of NALs that need decoding before the next frame thread starts
@@ -668,7 +669,8 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size) · 74 unmodified lines
668 }669 }
669 670
670 if (h->avctx->hwaccel &&671 if (h->avctx->hwaccel &&
671 (ret = FF_HW_CALL(h->avctx, start_frame, buf, buf_size)) < 0)672 (ret = FF_HW_CALL(h->avctx, start_frame, buf_ref,
673 buf, buf_size)) < 0)
672 goto end;674 goto end;
673 }675 }
674 676
@@ -1053,7 +1055,7 @@ static int h264_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 378 unmodified lines
1053 avctx->err_recognition, avctx);1055 avctx->err_recognition, avctx);
1054 }1056 }
1055 1057
1056 buf_index = decode_nal_units(h, buf, buf_size);1058 buf_index = decode_nal_units(h, avpkt->buf, buf, buf_size);
1057 if (buf_index < 0)1059 if (buf_index < 0)
1058 return AVERROR_INVALIDDATA;1060 return AVERROR_INVALIDDATA;
1059 1061
libavcodec/hevc/hevcdec.c+4−1
@@ -3401,7 +3401,10 @@ static int hevc_frame_start(HEVCContext *s, HEVCLayerContext *l, · 3400 unmodified lines
3401 goto fail;3401 goto fail;
3402 3402
3403 if (s->avctx->hwaccel) {3403 if (s->avctx->hwaccel) {
3404 ret = FF_HW_CALL(s->avctx, start_frame, NULL, 0);3404 AVCodecInternal *avci = s->avctx->internal;
3405 AVPacket *avpkt = avci->in_pkt;
3406 ret = FF_HW_CALL(s->avctx, start_frame,
3407 avpkt->buf, NULL, 0);
3405 if (ret < 0)3408 if (ret < 0)
3406 goto fail;3409 goto fail;
3407 }3410 }
libavcodec/hwaccel_internal.h+3−1
@@ -52,11 +52,13 @@ typedef struct FFHWAccel { · 51 unmodified lines
52 * Otherwise, this means the whole frame is available at this point.52 * Otherwise, this means the whole frame is available at this point.
53 *53 *
54 * @param avctx the codec context54 * @param avctx the codec context
55 * @param buf_ref the frame data buffer reference (optional)
55 * @param buf the frame data buffer base56 * @param buf the frame data buffer base
56 * @param buf_size the size of the frame in bytes57 * @param buf_size the size of the frame in bytes
57 * @return zero if successful, a negative value otherwise58 * @return zero if successful, a negative value otherwise
58 */59 */
59 int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);60 int (*start_frame)(AVCodecContext *avctx, const AVBufferRef *buf_ref,
61 const uint8_t *buf, uint32_t buf_size);
60 62
61 /**63 /**
62 * Callback for parameter data (SPS/PPS/VPS etc).64 * Callback for parameter data (SPS/PPS/VPS etc).
libavcodec/mjpegdec.c+1−1
@@ -808,7 +808,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) · 807 unmodified lines
808 if (!s->hwaccel_picture_private)808 if (!s->hwaccel_picture_private)
809 return AVERROR(ENOMEM);809 return AVERROR(ENOMEM);
810 810
811 ret = hwaccel->start_frame(s->avctx, s->raw_image_buffer,811 ret = hwaccel->start_frame(s->avctx, NULL, s->raw_image_buffer,
812 s->raw_image_buffer_size);812 s->raw_image_buffer_size);
813 if (ret < 0)813 if (ret < 0)
814 return ret;814 return ret;
libavcodec/mpeg12dec.c+1−1
@@ -1361,7 +1361,7 @@ static int mpeg_field_start(Mpeg1Context *s1, const uint8_t *buf, int buf_size) · 1360 unmodified lines
1361 }1361 }
1362 1362
1363 if (avctx->hwaccel) {1363 if (avctx->hwaccel) {
1364 if ((ret = FF_HW_CALL(avctx, start_frame, buf, buf_size)) < 0)1364 if ((ret = FF_HW_CALL(avctx, start_frame, NULL, buf, buf_size)) < 0)
1365 return ret;1365 return ret;
1366 } else if (s->codec_tag == MKTAG('V', 'C', 'R', '2')) {1366 } else if (s->codec_tag == MKTAG('V', 'C', 'R', '2')) {
1367 // Exchange UV1367 // Exchange UV
libavcodec/nvdec_av1.c+3−1
@@ -39,7 +39,9 @@ static int get_bit_depth_from_seq(const AV1RawSequenceHeader *seq) · 38 unmodified lines
39 return 8;39 return 8;
40}40}
41 41
42static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)42static int nvdec_av1_start_frame(AVCodecContext *avctx,
43 const AVBufferRef *buffer_ref,
44 const uint8_t *buffer, uint32_t size)
43{45{
44 const AV1DecContext *s = avctx->priv_data;46 const AV1DecContext *s = avctx->priv_data;
45 const AV1RawSequenceHeader *seq = s->raw_seq;47 const AV1RawSequenceHeader *seq = s->raw_seq;
libavcodec/nvdec_h264.c+1−0
@@ -47,6 +47,7 @@ static void dpb_add(const H264Context *h, CUVIDH264DPBENTRY *dst, const H264Pict · 46 unmodified lines
47}47}
48 48
49static int nvdec_h264_start_frame(AVCodecContext *avctx,49static int nvdec_h264_start_frame(AVCodecContext *avctx,
50 const AVBufferRef *buffer_ref,
50 const uint8_t *buffer, uint32_t size)51 const uint8_t *buffer, uint32_t size)
51{52{
52 const H264Context *h = avctx->priv_data;53 const H264Context *h = avctx->priv_data;
libavcodec/nvdec_hevc.c+1−0
@@ -70,6 +70,7 @@ static void fill_scaling_lists(CUVIDHEVCPICPARAMS *ppc, const HEVCContext *s) · 69 unmodified lines
70}70}
71 71
72static int nvdec_hevc_start_frame(AVCodecContext *avctx,72static int nvdec_hevc_start_frame(AVCodecContext *avctx,
73 const AVBufferRef *buffer_ref,
73 const uint8_t *buffer, uint32_t size)74 const uint8_t *buffer, uint32_t size)
74{75{
75 const HEVCContext *s = avctx->priv_data;76 const HEVCContext *s = avctx->priv_data;
libavcodec/nvdec_mjpeg.c+3−1
@@ -27,7 +27,9 @@ · 26 unmodified lines
27#include "decode.h"27#include "decode.h"
28#include "hwaccel_internal.h"28#include "hwaccel_internal.h"
29 29
30static int nvdec_mjpeg_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)30static int nvdec_mjpeg_start_frame(AVCodecContext *avctx,
31 const AVBufferRef *buffer_ref,
32 const uint8_t *buffer, uint32_t size)
31{33{
32 MJpegDecodeContext *s = avctx->priv_data;34 MJpegDecodeContext *s = avctx->priv_data;
33 35
libavcodec/nvdec_mpeg12.c+3−1
@@ -30,7 +30,9 @@ · 29 unmodified lines
30#include "nvdec.h"30#include "nvdec.h"
31#include "decode.h"31#include "decode.h"
32 32
33static int nvdec_mpeg12_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)33static int nvdec_mpeg12_start_frame(AVCodecContext *avctx,
34 const AVBufferRef *buffer_ref,
35 const uint8_t *buffer, uint32_t size)
34{36{
35 MpegEncContext *s = avctx->priv_data;37 MpegEncContext *s = avctx->priv_data;
36 38
libavcodec/nvdec_mpeg4.c+3−1
@@ -28,7 +28,9 @@ · 27 unmodified lines
28#include "decode.h"28#include "decode.h"
29#include "hwaccel_internal.h"29#include "hwaccel_internal.h"
30 30
31static int nvdec_mpeg4_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)31static int nvdec_mpeg4_start_frame(AVCodecContext *avctx,
32 const AVBufferRef *buffer_ref,
33 const uint8_t *buffer, uint32_t size)
32{34{
33 Mpeg4DecContext *m = avctx->priv_data;35 Mpeg4DecContext *m = avctx->priv_data;
34 MpegEncContext *s = &m->m;36 MpegEncContext *s = &m->m;
libavcodec/nvdec_vc1.c+3−1
@@ -29,7 +29,9 @@ · 28 unmodified lines
29#include "decode.h"29#include "decode.h"
30#include "vc1.h"30#include "vc1.h"
31 31
32static int nvdec_vc1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)32static int nvdec_vc1_start_frame(AVCodecContext *avctx,
33 const AVBufferRef *buffer_ref,
34 const uint8_t *buffer, uint32_t size)
33{35{
34 VC1Context *v = avctx->priv_data;36 VC1Context *v = avctx->priv_data;
35 MpegEncContext *s = &v->s;37 MpegEncContext *s = &v->s;
libavcodec/nvdec_vp8.c+3−1
@@ -32,7 +32,9 @@ static unsigned char safe_get_ref_idx(VP8Frame *frame) · 31 unmodified lines
32 return frame ? ff_nvdec_get_ref_idx(frame->tf.f) : 255;32 return frame ? ff_nvdec_get_ref_idx(frame->tf.f) : 255;
33}33}
34 34
35static int nvdec_vp8_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)35static int nvdec_vp8_start_frame(AVCodecContext *avctx,
36 const AVBufferRef *buffer_ref,
37 const uint8_t *buffer, uint32_t size)
36{38{
37 VP8Context *h = avctx->priv_data;39 VP8Context *h = avctx->priv_data;
38 40
libavcodec/nvdec_vp9.c+3−1
@@ -29,7 +29,9 @@ · 28 unmodified lines
29#include "internal.h"29#include "internal.h"
30#include "vp9shared.h"30#include "vp9shared.h"
31 31
32static int nvdec_vp9_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)32static int nvdec_vp9_start_frame(AVCodecContext *avctx,
33 const AVBufferRef *buffer_ref,
34 const uint8_t *buffer, uint32_t size)
33{35{
34 VP9SharedContext *h = avctx->priv_data;36 VP9SharedContext *h = avctx->priv_data;
35 const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->sw_pix_fmt);37 const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->sw_pix_fmt);
libavcodec/proresdec.c+1−1
@@ -793,7 +793,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, · 792 unmodified lines
793 793
794 if (HWACCEL_MAX && avctx->hwaccel) {794 if (HWACCEL_MAX && avctx->hwaccel) {
795 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);795 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);
796 ret = hwaccel->start_frame(avctx, NULL, 0);796 ret = hwaccel->start_frame(avctx, avpkt->buf, avpkt->data, avpkt->size);
797 if (ret < 0)797 if (ret < 0)
798 return ret;798 return ret;
799 ret = hwaccel->decode_slice(avctx, avpkt->data, avpkt->size);799 ret = hwaccel->decode_slice(avctx, avpkt->data, avpkt->size);
libavcodec/vaapi_av1.c+1−0
@@ -108,6 +108,7 @@ static av_cold int vaapi_av1_decode_uninit(AVCodecContext *avctx) · 107 unmodified lines
108 108
109 109
110static int vaapi_av1_start_frame(AVCodecContext *avctx,110static int vaapi_av1_start_frame(AVCodecContext *avctx,
111 av_unused const AVBufferRef *buffer_ref,
111 av_unused const uint8_t *buffer,112 av_unused const uint8_t *buffer,
112 av_unused uint32_t size)113 av_unused uint32_t size)
113{114{
libavcodec/vaapi_h264.c+1−0
@@ -232,6 +232,7 @@ static void fill_vaapi_plain_pred_weight_table(const H264Context *h, · 231 unmodified lines
232 232
233/** Initialize and start decoding a frame with VA API. */233/** Initialize and start decoding a frame with VA API. */
234static int vaapi_h264_start_frame(AVCodecContext *avctx,234static int vaapi_h264_start_frame(AVCodecContext *avctx,
235 av_unused const AVBufferRef *buffer_ref,
235 av_unused const uint8_t *buffer,236 av_unused const uint8_t *buffer,
236 av_unused uint32_t size)237 av_unused uint32_t size)
237{238{
libavcodec/vaapi_hevc.c+1−0
@@ -122,6 +122,7 @@ static void fill_vaapi_reference_frames(const HEVCContext *h, const HEVCLayerCon · 121 unmodified lines
122}122}
123 123
124static int vaapi_hevc_start_frame(AVCodecContext *avctx,124static int vaapi_hevc_start_frame(AVCodecContext *avctx,
125 av_unused const AVBufferRef *buffer_ref,
125 av_unused const uint8_t *buffer,126 av_unused const uint8_t *buffer,
126 av_unused uint32_t size)127 av_unused uint32_t size)
127{128{
libavcodec/vaapi_mjpeg.c+1−0
@@ -24,6 +24,7 @@ · 23 unmodified lines
24#include "mjpegdec.h"24#include "mjpegdec.h"
25 25
26static int vaapi_mjpeg_start_frame(AVCodecContext *avctx,26static int vaapi_mjpeg_start_frame(AVCodecContext *avctx,
27 av_unused const AVBufferRef *buffer_ref,
27 av_unused const uint8_t *buffer,28 av_unused const uint8_t *buffer,
28 av_unused uint32_t size)29 av_unused uint32_t size)
29{30{
libavcodec/vaapi_mpeg2.c+4−1
@@ -39,7 +39,10 @@ static inline int mpeg2_get_is_frame_start(const MpegEncContext *s) · 38 unmodified lines
39 return s->first_field || s->picture_structure == PICT_FRAME;39 return s->first_field || s->picture_structure == PICT_FRAME;
40}40}
41 41
42static int vaapi_mpeg2_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)42static int vaapi_mpeg2_start_frame(AVCodecContext *avctx,
43 av_unused const AVBufferRef *buffer_ref,
44 av_unused const uint8_t *buffer,
45 av_unused uint32_t size)
43{46{
44 const MpegEncContext *s = avctx->priv_data;47 const MpegEncContext *s = avctx->priv_data;
45 VAAPIDecodePicture *pic = s->cur_pic.ptr->hwaccel_picture_private;48 VAAPIDecodePicture *pic = s->cur_pic.ptr->hwaccel_picture_private;
libavcodec/vaapi_mpeg4.c+4−1
@@ -45,7 +45,10 @@ static int mpeg4_get_intra_dc_vlc_thr(Mpeg4DecContext *s) · 44 unmodified lines
45 return 0;45 return 0;
46}46}
47 47
48static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)48static int vaapi_mpeg4_start_frame(AVCodecContext *avctx,
49 av_unused const AVBufferRef *buffer_ref,
50 av_unused const uint8_t *buffer,
51 av_unused uint32_t size)
49{52{
50 Mpeg4DecContext *ctx = avctx->priv_data;53 Mpeg4DecContext *ctx = avctx->priv_data;
51 MpegEncContext *s = &ctx->m;54 MpegEncContext *s = &ctx->m;
libavcodec/vaapi_vc1.c+4−1
@@ -249,7 +249,10 @@ static inline void vc1_pack_bitplanes(uint8_t *bitplane, int n, const uint8_t *f · 248 unmodified lines
249 bitplane[bitplane_index] = (bitplane[bitplane_index] << 4) | v;249 bitplane[bitplane_index] = (bitplane[bitplane_index] << 4) | v;
250}250}
251 251
252static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)252static int vaapi_vc1_start_frame(AVCodecContext *avctx,
253 av_unused const AVBufferRef *buffer_ref,
254 av_unused const uint8_t *buffer,
255 av_unused uint32_t size)
253{256{
254 const VC1Context *v = avctx->priv_data;257 const VC1Context *v = avctx->priv_data;
255 const MpegEncContext *s = &v->s;258 const MpegEncContext *s = &v->s;
libavcodec/vaapi_vp8.c+1−0
@@ -32,6 +32,7 @@ static VASurfaceID vaapi_vp8_surface_id(VP8Frame *vf) · 31 unmodified lines
32}32}
33 33
34static int vaapi_vp8_start_frame(AVCodecContext *avctx,34static int vaapi_vp8_start_frame(AVCodecContext *avctx,
35 av_unused const AVBufferRef *buffer_ref,
35 av_unused const uint8_t *buffer,36 av_unused const uint8_t *buffer,
36 av_unused uint32_t size)37 av_unused uint32_t size)
37{38{
libavcodec/vaapi_vp9.c+1−0
@@ -35,6 +35,7 @@ static VASurfaceID vaapi_vp9_surface_id(const VP9Frame *vf) · 34 unmodified lines
35}35}
36 36
37static int vaapi_vp9_start_frame(AVCodecContext *avctx,37static int vaapi_vp9_start_frame(AVCodecContext *avctx,
38 av_unused const AVBufferRef *buffer_ref,
38 av_unused const uint8_t *buffer,39 av_unused const uint8_t *buffer,
39 av_unused uint32_t size)40 av_unused uint32_t size)
40{41{
libavcodec/vaapi_vvc.c+1−0
@@ -80,6 +80,7 @@ static void fill_vaapi_reference_frames(const VVCFrameContext *h, VAPictureParam · 79 unmodified lines
80}80}
81 81
82static int vaapi_vvc_start_frame(AVCodecContext *avctx,82static int vaapi_vvc_start_frame(AVCodecContext *avctx,
83 av_unused const AVBufferRef *buffer_ref,
83 av_unused const uint8_t *buffer,84 av_unused const uint8_t *buffer,
84 av_unused uint32_t size)85 av_unused uint32_t size)
85{86{
libavcodec/vc1dec.c+3−3
@@ -1087,7 +1087,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 1086 unmodified lines
1087 if (v->field_mode && buf_start_second_field) {1087 if (v->field_mode && buf_start_second_field) {
1088 // decode first field1088 // decode first field
1089 s->picture_structure = PICT_BOTTOM_FIELD - v->tff;1089 s->picture_structure = PICT_BOTTOM_FIELD - v->tff;
1090 ret = hwaccel->start_frame(avctx, buf_start,1090 ret = hwaccel->start_frame(avctx, avpkt->buf, buf_start,
1091 buf_start_second_field - buf_start);1091 buf_start_second_field - buf_start);
1092 if (ret < 0)1092 if (ret < 0)
1093 goto err;1093 goto err;
@@ -1142,7 +1142,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 48 unmodified lines
1142 }1142 }
1143 v->s.cur_pic.ptr->f->pict_type = v->s.pict_type;1143 v->s.cur_pic.ptr->f->pict_type = v->s.pict_type;
1144 1144
1145 ret = hwaccel->start_frame(avctx, buf_start_second_field,1145 ret = hwaccel->start_frame(avctx, avpkt->buf, buf_start_second_field,
1146 (buf + buf_size) - buf_start_second_field);1146 (buf + buf_size) - buf_start_second_field);
1147 if (ret < 0)1147 if (ret < 0)
1148 goto err;1148 goto err;
@@ -1185,7 +1185,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 36 unmodified lines
1185 goto err;1185 goto err;
1186 } else {1186 } else {
1187 s->picture_structure = PICT_FRAME;1187 s->picture_structure = PICT_FRAME;
1188 ret = hwaccel->start_frame(avctx, buf_start,1188 ret = hwaccel->start_frame(avctx, avpkt->buf, buf_start,
1189 (buf + buf_size) - buf_start);1189 (buf + buf_size) - buf_start);
1190 if (ret < 0)1190 if (ret < 0)
1191 goto err;1191 goto err;
libavcodec/vdpau_av1.c+2−1
@@ -41,7 +41,8 @@ static int get_bit_depth_from_seq(const AV1RawSequenceHeader *seq) · 40 unmodified lines
41}41}
42 42
43static int vdpau_av1_start_frame(AVCodecContext *avctx,43static int vdpau_av1_start_frame(AVCodecContext *avctx,
44 const uint8_t *buffer, uint32_t size)44 const AVBufferRef *buffer_ref,
45 const uint8_t *buffer, uint32_t size)
45{46{
46 AV1DecContext *s = avctx->priv_data;47 AV1DecContext *s = avctx->priv_data;
47 const AV1RawSequenceHeader *seq = s->raw_seq;48 const AV1RawSequenceHeader *seq = s->raw_seq;
libavcodec/vdpau_h264.c+1−0
@@ -118,6 +118,7 @@ static void vdpau_h264_set_reference_frames(AVCodecContext *avctx) · 117 unmodified lines
118}118}
119 119
120static int vdpau_h264_start_frame(AVCodecContext *avctx,120static int vdpau_h264_start_frame(AVCodecContext *avctx,
121 const AVBufferRef *buffer_ref,
121 const uint8_t *buffer, uint32_t size)122 const uint8_t *buffer, uint32_t size)
122{123{
123 H264Context * const h = avctx->priv_data;124 H264Context * const h = avctx->priv_data;
libavcodec/vdpau_hevc.c+1−0
@@ -32,6 +32,7 @@ · 31 unmodified lines
32 32
33 33
34static int vdpau_hevc_start_frame(AVCodecContext *avctx,34static int vdpau_hevc_start_frame(AVCodecContext *avctx,
35 const AVBufferRef *buffer_ref,
35 const uint8_t *buffer, uint32_t size)36 const uint8_t *buffer, uint32_t size)
36{37{
37 HEVCContext *h = avctx->priv_data;38 HEVCContext *h = avctx->priv_data;
libavcodec/vdpau_mpeg12.c+1−0
@@ -32,6 +32,7 @@ · 31 unmodified lines
32#include "vdpau_internal.h"32#include "vdpau_internal.h"
33 33
34static int vdpau_mpeg_start_frame(AVCodecContext *avctx,34static int vdpau_mpeg_start_frame(AVCodecContext *avctx,
35 const AVBufferRef *buffer_ref,
35 const uint8_t *buffer, uint32_t size)36 const uint8_t *buffer, uint32_t size)
36{37{
37 MpegEncContext * const s = avctx->priv_data;38 MpegEncContext * const s = avctx->priv_data;
libavcodec/vdpau_mpeg4.c+1−0
@@ -30,6 +30,7 @@ · 29 unmodified lines
30#include "vdpau_internal.h"30#include "vdpau_internal.h"
31 31
32static int vdpau_mpeg4_start_frame(AVCodecContext *avctx,32static int vdpau_mpeg4_start_frame(AVCodecContext *avctx,
33 const AVBufferRef *buffer_ref,
33 const uint8_t *buffer, uint32_t size)34 const uint8_t *buffer, uint32_t size)
34{35{
35 Mpeg4DecContext *ctx = avctx->priv_data;36 Mpeg4DecContext *ctx = avctx->priv_data;
libavcodec/vdpau_vc1.c+1−0
@@ -32,6 +32,7 @@ · 31 unmodified lines
32#include "vdpau_internal.h"32#include "vdpau_internal.h"
33 33
34static int vdpau_vc1_start_frame(AVCodecContext *avctx,34static int vdpau_vc1_start_frame(AVCodecContext *avctx,
35 const AVBufferRef *buffer_ref,
35 const uint8_t *buffer, uint32_t size)36 const uint8_t *buffer, uint32_t size)
36{37{
37 VC1Context * const v = avctx->priv_data;38 VC1Context * const v = avctx->priv_data;
libavcodec/vdpau_vp9.c+2−1
@@ -29,7 +29,8 @@ · 28 unmodified lines
29#include "vdpau_internal.h"29#include "vdpau_internal.h"
30 30
31static int vdpau_vp9_start_frame(AVCodecContext *avctx,31static int vdpau_vp9_start_frame(AVCodecContext *avctx,
32 const uint8_t *buffer, uint32_t size)32 const AVBufferRef *buffer_ref,
33 const uint8_t *buffer, uint32_t size)
33{34{
34 VP9Context *s = avctx->priv_data;35 VP9Context *s = avctx->priv_data;
35 VP9SharedContext *h = &(s->s);36 VP9SharedContext *h = &(s->s);
libavcodec/videotoolbox.c+6−2
@@ -415,6 +415,7 @@ CFDataRef ff_videotoolbox_hvcc_extradata_create(AVCodecContext *avctx) · 414 unmodified lines
415}415}
416 416
417int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx,417int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx,
418 const AVBufferRef *buffer_ref,
418 const uint8_t *buffer,419 const uint8_t *buffer,
419 uint32_t size)420 uint32_t size)
420{421{
@@ -1084,6 +1085,7 @@ static int videotoolbox_h264_end_frame(AVCodecContext *avctx) · 663 unmodified lines
1084}1085}
1085 1086
1086static int videotoolbox_hevc_start_frame(AVCodecContext *avctx,1087static int videotoolbox_hevc_start_frame(AVCodecContext *avctx,
1088 const AVBufferRef *buffer_ref,
1087 const uint8_t *buffer,1089 const uint8_t *buffer,
1088 uint32_t size)1090 uint32_t size)
1089{1091{
@@ -1127,6 +1129,7 @@ static int videotoolbox_hevc_end_frame(AVCodecContext *avctx) · 37 unmodified lines
1127}1129}
1128 1130
1129static int videotoolbox_mpeg_start_frame(AVCodecContext *avctx,1131static int videotoolbox_mpeg_start_frame(AVCodecContext *avctx,
1132 const AVBufferRef *buffer_ref,
1130 const uint8_t *buffer,1133 const uint8_t *buffer,
1131 uint32_t size)1134 uint32_t size)
1132{1135{
@@ -1151,8 +1154,9 @@ static int videotoolbox_mpeg_end_frame(AVCodecContext *avctx) · 18 unmodified lines
1151}1154}
1152 1155
1153static int videotoolbox_prores_start_frame(AVCodecContext *avctx,1156static int videotoolbox_prores_start_frame(AVCodecContext *avctx,
1154 const uint8_t *buffer,1157 const AVBufferRef *buffer_ref,
1155 uint32_t size)1158 const uint8_t *buffer,
1159 uint32_t size)
1156{1160{
1157 return 0;1161 return 0;
1158}1162}
libavcodec/videotoolbox_av1.c+1−0
@@ -63,6 +63,7 @@ CFDataRef ff_videotoolbox_av1c_extradata_create(AVCodecContext *avctx) · 62 unmodified lines
63 63
64 64
65static int videotoolbox_av1_start_frame(AVCodecContext *avctx,65static int videotoolbox_av1_start_frame(AVCodecContext *avctx,
66 const AVBufferRef *buffer_ref,
66 const uint8_t *buffer,67 const uint8_t *buffer,
67 uint32_t size)68 uint32_t size)
68{69{
libavcodec/videotoolbox_vp9.c+1−0
@@ -104,6 +104,7 @@ CFDataRef ff_videotoolbox_vpcc_extradata_create(AVCodecContext *avctx) · 103 unmodified lines
104}104}
105 105
106static int videotoolbox_vp9_start_frame(AVCodecContext *avctx,106static int videotoolbox_vp9_start_frame(AVCodecContext *avctx,
107 const AVBufferRef *buffer_ref,
107 const uint8_t *buffer,108 const uint8_t *buffer,
108 uint32_t size)109 uint32_t size)
109{110{
libavcodec/vp8.c+1−1
@@ -2729,7 +2729,7 @@ int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, · 2728 unmodified lines
2729 2729
2730 if (!is_vp7 && avctx->hwaccel) {2730 if (!is_vp7 && avctx->hwaccel) {
2731 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);2731 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);
2732 ret = hwaccel->start_frame(avctx, avpkt->data, avpkt->size);2732 ret = hwaccel->start_frame(avctx, avpkt->buf, avpkt->data, avpkt->size);
2733 if (ret < 0)2733 if (ret < 0)
2734 goto err;2734 goto err;
2735 2735
libavcodec/vp9.c+1−1
@@ -1618,7 +1618,7 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, · 1617 unmodified lines
1618 1618
1619 if (avctx->hwaccel) {1619 if (avctx->hwaccel) {
1620 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);1620 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);
1621 ret = hwaccel->start_frame(avctx, NULL, 0);1621 ret = hwaccel->start_frame(avctx, pkt->buf, pkt->data, pkt->size);
1622 if (ret < 0)1622 if (ret < 0)
1623 return ret;1623 return ret;
1624 ret = hwaccel->decode_slice(avctx, pkt->data, pkt->size);1624 ret = hwaccel->decode_slice(avctx, pkt->data, pkt->size);
libavcodec/vt_internal.h+1−0
@@ -61,6 +61,7 @@ int ff_videotoolbox_buffer_append(VTContext *vtctx, · 60 unmodified lines
61 uint32_t size);61 uint32_t size);
62int ff_videotoolbox_uninit(AVCodecContext *avctx);62int ff_videotoolbox_uninit(AVCodecContext *avctx);
63int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx,63int ff_videotoolbox_h264_start_frame(AVCodecContext *avctx,
64 const AVBufferRef *buffer_ref,
64 const uint8_t *buffer,65 const uint8_t *buffer,
65 uint32_t size);66 uint32_t size);
66int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx,67int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx,
libavcodec/vulkan_av1.c+1−0
@@ -245,6 +245,7 @@ static int vk_av1_create_params(AVCodecContext *avctx, AVBufferRef **buf, · 244 unmodified lines
245}245}
246 246
247static int vk_av1_start_frame(AVCodecContext *avctx,247static int vk_av1_start_frame(AVCodecContext *avctx,
248 av_unused const AVBufferRef *buffer_ref,
248 av_unused const uint8_t *buffer,249 av_unused const uint8_t *buffer,
249 av_unused uint32_t size)250 av_unused uint32_t size)
250{251{
libavcodec/vulkan_h264.c+1−0
@@ -359,6 +359,7 @@ static int vk_h264_create_params(AVCodecContext *avctx, AVBufferRef **buf) · 358 unmodified lines
359}359}
360 360
361static int vk_h264_start_frame(AVCodecContext *avctx,361static int vk_h264_start_frame(AVCodecContext *avctx,
362 av_unused const AVBufferRef *buffer_ref,
362 av_unused const uint8_t *buffer,363 av_unused const uint8_t *buffer,
363 av_unused uint32_t size)364 av_unused uint32_t size)
364{365{
libavcodec/vulkan_hevc.c+1−0
@@ -709,6 +709,7 @@ static int vk_hevc_create_params(AVCodecContext *avctx, AVBufferRef **buf) · 708 unmodified lines
709}709}
710 710
711static int vk_hevc_start_frame(AVCodecContext *avctx,711static int vk_hevc_start_frame(AVCodecContext *avctx,
712 av_unused const AVBufferRef *buffer_ref,
712 av_unused const uint8_t *buffer,713 av_unused const uint8_t *buffer,
713 av_unused uint32_t size)714 av_unused uint32_t size)
714{715{
libavcodec/vvc/dec.c+7−5
@@ -831,7 +831,8 @@ static int frame_setup(VVCFrameContext *fc, VVCContext *s) · 830 unmodified lines
831 return 0;831 return 0;
832}832}
833 833
834static int decode_slice(VVCContext *s, VVCFrameContext *fc, const H2645NAL *nal, const CodedBitstreamUnit *unit)834static int decode_slice(VVCContext *s, VVCFrameContext *fc, AVBufferRef *buf_ref,
835 const H2645NAL *nal, const CodedBitstreamUnit *unit)
835{836{
836 int ret;837 int ret;
837 SliceContext *sc;838 SliceContext *sc;
@@ -860,7 +861,7 @@ static int decode_slice(VVCContext *s, VVCFrameContext *fc, const H2645NAL *nal, · 22 unmodified lines
860 861
861 if (s->avctx->hwaccel) {862 if (s->avctx->hwaccel) {
862 if (is_first_slice) {863 if (is_first_slice) {
863 ret = FF_HW_CALL(s->avctx, start_frame, NULL, 0);864 ret = FF_HW_CALL(s->avctx, start_frame, buf_ref, NULL, 0);
864 if (ret < 0)865 if (ret < 0)
865 return ret;866 return ret;
866 }867 }
@@ -876,7 +877,8 @@ static int decode_slice(VVCContext *s, VVCFrameContext *fc, const H2645NAL *nal, · 9 unmodified lines
876 return 0;877 return 0;
877}878}
878 879
879static int decode_nal_unit(VVCContext *s, VVCFrameContext *fc, const H2645NAL *nal, const CodedBitstreamUnit *unit)880static int decode_nal_unit(VVCContext *s, VVCFrameContext *fc, AVBufferRef *buf_ref,
881 const H2645NAL *nal, const CodedBitstreamUnit *unit)
880{882{
881 int ret;883 int ret;
882 884
@@ -902,7 +904,7 @@ static int decode_nal_unit(VVCContext *s, VVCFrameContext *fc, const H2645NAL *n · 19 unmodified lines
902 case VVC_IDR_N_LP:904 case VVC_IDR_N_LP:
903 case VVC_CRA_NUT:905 case VVC_CRA_NUT:
904 case VVC_GDR_NUT:906 case VVC_GDR_NUT:
905 ret = decode_slice(s, fc, nal, unit);907 ret = decode_slice(s, fc, buf_ref, nal, unit);
906 if (ret < 0)908 if (ret < 0)
907 return ret;909 return ret;
908 break;910 break;
@@ -940,7 +942,7 @@ static int decode_nal_units(VVCContext *s, VVCFrameContext *fc, AVPacket *avpkt) · 31 unmodified lines
940 if (unit->type == VVC_EOB_NUT || unit->type == VVC_EOS_NUT) {942 if (unit->type == VVC_EOB_NUT || unit->type == VVC_EOS_NUT) {
941 s->last_eos = 1;943 s->last_eos = 1;
942 } else {944 } else {
943 ret = decode_nal_unit(s, fc, nal, unit);945 ret = decode_nal_unit(s, fc, avpkt->buf, nal, unit);
944 if (ret < 0) {946 if (ret < 0) {
945 av_log(s->avctx, AV_LOG_WARNING,947 av_log(s->avctx, AV_LOG_WARNING,
946 "Error parsing NAL unit #%d.\n", i);948 "Error parsing NAL unit #%d.\n", i);

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