fix(ffmpeg): Track LCEVCdec, update patches, drop libnpp for now (#5993)

* Rebase on F42

* Empty commit I hate GitHub

Signed-off-by: Gilver <rockgrub@disroot.org>

* This URL is unreachable with the source fetching cURL params currently

* GCC14 real this time?

Signed-off-by: Gilver <rockgrub@disroot.org>

* Okay

Signed-off-by: Gilver <rockgrub@disroot.org>

* Gonna have to figure something else out

Signed-off-by: Gilver <rockgrub@disroot.org>

* Death

* I guess maybe

Signed-off-by: Gilver <rockgrub@disroot.org>

* ?

Signed-off-by: Gilver <rockgrub@disroot.org>

* Try removing Wall again I guess

Signed-off-by: Gilver <rockgrub@disroot.org>

* Oops

Signed-off-by: Gilver <rockgrub@disroot.org>

* IDK

* Update configure.patch

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* chore: Also track LCEVCdec

* chore: Change some patches

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* Update ffmpeg.spec

Signed-off-by: Gilver <rockgrub@disroot.org>

* chore: Disable libnpp because it's just BROKEN

Signed-off-by: Gilver <rockgrub@disroot.org>

* chore(update.rhai): Comment out libnpp tracking for now

Signed-off-by: Gilver <rockgrub@disroot.org>

* chore: Delete ffmpeg-nvcc.patch

Signed-off-by: Gilver <rockgrub@disroot.org>

---------

Signed-off-by: Gilver <rockgrub@disroot.org>
Co-authored-by: madomado <madonuko@outlook.com>
This commit is contained in:
Gilver
2025-09-03 13:17:47 -05:00
committed by GitHub
parent 28c4b6f211
commit 6fb5fa85eb
9 changed files with 420 additions and 29 deletions
+1
View File
@@ -0,0 +1 @@
13.0.0.50
@@ -0,0 +1 @@
4.0.1
@@ -0,0 +1,40 @@
--- a/libavcodec/lcevcdec.c
+++ b/libavcodec/lcevcdec.c
@@ -139,7 +139,7 @@ static int lcevc_send_frame(void *logctx
if (!sd)
return 1;
- res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, in->pts, 0, sd->data, sd->size);
+ res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, (uint64_t) in->pts, sd->data, sd->size);
if (res != LCEVC_Success)
return AVERROR_EXTERNAL;
@@ -147,7 +147,7 @@ static int lcevc_send_frame(void *logctx
if (ret < 0)
return ret;
- res = LCEVC_SendDecoderBase(lcevc->decoder, in->pts, 0, picture, -1, NULL);
+ res = LCEVC_SendDecoderBase(lcevc->decoder, (uint64_t) in->pts, picture, -1, NULL);
if (res != LCEVC_Success)
return AVERROR_EXTERNAL;
--- a/libavfilter/vf_lcevc.c
+++ b/libavfilter/vf_lcevc.c
@@ -139,7 +139,7 @@ static int send_frame(AVFilterLink *inlink, AVFrame *in)
return ret;
if (sd) {
- res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, in->pts, 0, sd->data, sd->size);
+ res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, (uint64_t) in->pts, sd->data, sd->size);
if (res == LCEVC_Again)
return AVERROR(EAGAIN);
else if (res != LCEVC_Success) {
@@ -148,7 +148,7 @@ static int send_frame(AVFilterLink *inlink, AVFrame *in)
}
}
- res = LCEVC_SendDecoderBase(lcevc->decoder, in->pts, 0, picture, -1, in);
+ res = LCEVC_SendDecoderBase(lcevc->decoder, (uint64_t) in->pts, picture, -1, in);
if (res != LCEVC_Success) {
av_log(ctx, AV_LOG_ERROR, "LCEVC_SendDecoderBase failed\n");
LCEVC_FreePicture(lcevc->decoder, picture);
@@ -28,3 +28,4 @@ diff -Naur ffmpeg-7.1.1.old/libavformat/utils.c ffmpeg-7.1.1/libavformat/utils.c
+
/* an arbitrarily chosen "sane" max packet size -- 50M */
#define SANE_CHUNK_SIZE (50000000)
-12
View File
@@ -1,12 +0,0 @@
diff -Naur ffmpeg-7.1.1.old/configure ffmpeg-7.1.1/configure
--- ffmpeg-7.1.1.old/configure 2025-03-24 11:04:46.377074634 +0100
+++ ffmpeg-7.1.1/configure 2025-03-24 11:04:54.615698726 +0100
@@ -6742,7 +6742,7 @@
nvccflags=$nvccflags_default
fi
-nvccflags="$nvccflags -std=c++11"
+nvccflags="$nvccflags -std=c++14"
if enabled x86_64 || enabled ppc64 || enabled aarch64; then
nvccflags="$nvccflags -m64"
+8 -17
View File
@@ -11,9 +11,9 @@
Summary: A complete solution to record, convert and stream audio and video
Name: ffmpeg
Version: 8.0
Release: 1%?dist
License: LGPL-3.0-or-later
Version: 7.1.1
Release: 5%{?dist}
License: LGPLv3+
URL: http://%{name}.org/
Epoch: 1
@@ -26,8 +26,8 @@ Patch2: %{name}-HandBrake.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2240127
# Reference: https://crbug.com/1306560
Patch3: %{name}-chromium.patch
# Fix build with recent NVCC:
Patch4: %{name}-nvcc.patch
# Support LCEVCdec 4.0+:
Patch5: https://aur.archlinux.org/cgit/aur.git/plain/080-ffmpeg-lcevcdec4.0.0-fix.patch?h=ffmpeg-full#/%{name}-LCEVCdec-4.patch
BuildRequires: AMF-devel >= 1.4.28
BuildRequires: bzip2-devel
@@ -70,6 +70,7 @@ BuildRequires: pkgconfig(dav1d) >= 0.5.0
BuildRequires: pkgconfig(davs2) >= 1.6.0
BuildRequires: pkgconfig(dvdnav) >= 6.1.1
BuildRequires: pkgconfig(fdk-aac)
BuildRequires: pkgconfig(ffnvcodec) >= 12.0.16.0
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(fribidi)
@@ -150,10 +151,6 @@ BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(zvbi-0.2) >= 0.2.28
%ifarch x86_64 aarch64
# Nvidia CUVID support and Performance Primitives based code
BuildRequires: cuda-cudart-devel
BuildRequires: cuda-nvcc
BuildRequires: libnpp-devel
BuildRequires: pkgconfig(ffnvcodec) >= 12.0.16.0
%endif
@@ -400,12 +397,6 @@ This subpackage contains the headers for FFmpeg libswscale.
#sed -i -e 's|#!/bin/sh|#!/bin/sh -x|g' configure
%build
# Work around a new GCC15 change until FFmpeg updates for it
%if 0%{?fedora} >= 42
%if "%{version}" <= "7.1.1"
export CFLAGS="%{optflags} -Wno-incompatible-pointer-types"
%endif
%endif
%set_build_flags
./configure \
@@ -422,6 +413,7 @@ export CFLAGS="%{optflags} -Wno-incompatible-pointer-types"
--enable-alsa \
--enable-bzlib \
--enable-chromaprint \
--disable-cuda-nvcc \
--enable-frei0r \
--enable-gcrypt \
--enable-gmp \
@@ -465,6 +457,7 @@ export CFLAGS="%{optflags} -Wno-incompatible-pointer-types"
--enable-libmodplug \
--enable-libmp3lame \
--enable-libmysofa \
--disable-libnpp \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--disable-libopencv \
@@ -545,10 +538,8 @@ export CFLAGS="%{optflags} -Wno-incompatible-pointer-types"
--prefix=%{_prefix} \
--shlibdir=%{_libdir} \
%ifarch x86_64 aarch64
--enable-cuda-nvcc \
--enable-cuvid \
--enable-ffnvcodec \
--enable-libnpp \
--enable-nvdec \
--enable-nvenc \
--extra-cflags="-I%{_includedir}/cuda" \
+2
View File
@@ -6,6 +6,8 @@ rpm.version(find(`<small>ffmpeg-([\d.]+?)\.tar\.xz</small>`, get("https://ffmpeg
open_file("anda/multimedia/ffmpeg/VERSION_x265.txt", "w").write(bump::madoguchi("x265", labels.branch));
open_file("anda/multimedia/ffmpeg/VERSION_tesseract.txt", "w").write(bump::bodhi("tesseract", bump::as_bodhi_ver(labels.branch)));
open_file("anda/multimedia/ffmpeg/VERSION_vvenc.txt", "w").write(bump::madoguchi("vvenc-libs", labels.branch));
// open_file("anda/multimedia/ffmpeg/VERSION_libnpp.txt", "w").write(bump::madoguchi("libnpp", labels.branch));
open_file("anda/multimedia/ffmpeg/VERSION_LCEVCdec.txt", "w").write(bump::madoguchi("LCEVCdec", labels.branch));
let dir = sub(`/[^/]+$`, "", __script_path);
if sh("[[ `git status " + dir + " --porcelain` ]] && exit 1 || exit 0", #{}).ctx.rc == 1 {
+40
View File
@@ -0,0 +1,40 @@
--- a/libavcodec/lcevcdec.c
+++ b/libavcodec/lcevcdec.c
@@ -139,7 +139,7 @@ static int lcevc_send_frame(void *logctx
if (!sd)
return 1;
- res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, in->pts, 0, sd->data, sd->size);
+ res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, (uint64_t) in->pts, sd->data, sd->size);
if (res != LCEVC_Success)
return AVERROR_EXTERNAL;
@@ -147,7 +147,7 @@ static int lcevc_send_frame(void *logctx
if (ret < 0)
return ret;
- res = LCEVC_SendDecoderBase(lcevc->decoder, in->pts, 0, picture, -1, NULL);
+ res = LCEVC_SendDecoderBase(lcevc->decoder, (uint64_t) in->pts, picture, -1, NULL);
if (res != LCEVC_Success)
return AVERROR_EXTERNAL;
--- a/libavfilter/vf_lcevc.c
+++ b/libavfilter/vf_lcevc.c
@@ -139,7 +139,7 @@ static int send_frame(AVFilterLink *inlink, AVFrame *in)
return ret;
if (sd) {
- res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, in->pts, 0, sd->data, sd->size);
+ res = LCEVC_SendDecoderEnhancementData(lcevc->decoder, (uint64_t) in->pts, sd->data, sd->size);
if (res == LCEVC_Again)
return AVERROR(EAGAIN);
else if (res != LCEVC_Success) {
@@ -148,7 +148,7 @@ static int send_frame(AVFilterLink *inlink, AVFrame *in)
}
}
- res = LCEVC_SendDecoderBase(lcevc->decoder, in->pts, 0, picture, -1, in);
+ res = LCEVC_SendDecoderBase(lcevc->decoder, (uint64_t) in->pts, picture, -1, in);
if (res != LCEVC_Success) {
av_log(ctx, AV_LOG_ERROR, "LCEVC_SendDecoderBase failed\n");
LCEVC_FreePicture(lcevc->decoder, picture);
+327
View File
@@ -0,0 +1,327 @@
From 7cdcac1a8ca650aeebda36afc695dfbe02a55ebb Mon Sep 17 00:00:00 2001
From: pabloko <pablomorpheo@gmail.com>
Date: Wed, 25 Dec 2024 04:00:35 +0100
Subject: [PATCH 1/2] SDK 14.4
---
libavdevice/decklink_common.cpp | 8 ++++----
libavdevice/decklink_common.h | 4 ++--
libavdevice/decklink_dec.cpp | 34 ++++++++++++++++++++-------------
libavdevice/decklink_enc.cpp | 22 ++++++++++++++-------
4 files changed, 42 insertions(+), 26 deletions(-)
diff --git a/libavdevice/decklink_common.cpp b/libavdevice/decklink_common.cpp
index 47de7ef6b0f7c..34cd17a129f6a 100644
--- a/libavdevice/decklink_common.cpp
+++ b/libavdevice/decklink_common.cpp
@@ -512,8 +512,8 @@ int ff_decklink_list_devices(AVFormatContext *avctx,
return AVERROR(EIO);
while (ret == 0 && iter->Next(&dl) == S_OK) {
- IDeckLinkOutput *output_config;
- IDeckLinkInput *input_config;
+ IDeckLinkOutput_v14_2_1 *output_config;
+ IDeckLinkInput_v14_2_1 *input_config;
const char *display_name = NULL;
const char *unique_name = NULL;
AVDeviceInfo *new_device = NULL;
@@ -527,14 +527,14 @@ int ff_decklink_list_devices(AVFormatContext *avctx,
goto next;
if (show_outputs) {
- if (dl->QueryInterface(IID_IDeckLinkOutput, (void **)&output_config) == S_OK) {
+ if (dl->QueryInterface(IID_IDeckLinkOutput_v14_2_1, (void **)&output_config) == S_OK) {
output_config->Release();
add = 1;
}
}
if (show_inputs) {
- if (dl->QueryInterface(IID_IDeckLinkInput, (void **)&input_config) == S_OK) {
+ if (dl->QueryInterface(IID_IDeckLinkInput_v14_2_1, (void **)&input_config) == S_OK) {
input_config->Release();
add = 1;
}
diff --git a/libavdevice/decklink_common.h b/libavdevice/decklink_common.h
index 6b32dc2d09cba..4f836aee66cd3 100644
--- a/libavdevice/decklink_common.h
+++ b/libavdevice/decklink_common.h
@@ -93,8 +93,8 @@ typedef struct DecklinkPacketQueue {
struct decklink_ctx {
/* DeckLink SDK interfaces */
IDeckLink *dl;
- IDeckLinkOutput *dlo;
- IDeckLinkInput *dli;
+ IDeckLinkOutput_v14_2_1 *dlo;
+ IDeckLinkInput_v14_2_1 *dli;
IDeckLinkConfiguration *cfg;
IDeckLinkProfileAttributes *attr;
decklink_output_callback *output_callback;
diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
index 418701e4e0c7a..a2a3ac95b8514 100644
--- a/libavdevice/decklink_dec.cpp
+++ b/libavdevice/decklink_dec.cpp
@@ -105,13 +105,13 @@ static VANCLineNumber vanc_line_numbers[] = {
{bmdModeUnknown, 0, -1, -1, -1}
};
-class decklink_allocator : public IDeckLinkMemoryAllocator
+class decklink_allocator : public IDeckLinkMemoryAllocator_v14_2_1
{
public:
decklink_allocator(): _refs(1) { }
virtual ~decklink_allocator() { }
- // IDeckLinkMemoryAllocator methods
+ // IDeckLinkMemoryAllocator_v14_2_1 methods
virtual HRESULT STDMETHODCALLTYPE AllocateBuffer(unsigned int bufferSize, void* *allocatedBuffer)
{
void *buf = av_malloc(bufferSize + AV_INPUT_BUFFER_PADDING_SIZE);
@@ -129,7 +129,11 @@ class decklink_allocator : public IDeckLinkMemoryAllocator
virtual HRESULT STDMETHODCALLTYPE Decommit() { return S_OK; }
// IUnknown methods
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) { return E_NOINTERFACE; }
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
+ {
+ if (iid == IID_IDeckLinkMemoryAllocator_v14_2_1) { *ppv = (IDeckLinkMemoryAllocator_v14_2_1*)this; AddRef(); return S_OK; }
+ return E_NOINTERFACE;
+ }
virtual ULONG STDMETHODCALLTYPE AddRef(void) { return ++_refs; }
virtual ULONG STDMETHODCALLTYPE Release(void)
{
@@ -472,7 +476,7 @@ static uint8_t *get_metadata(AVFormatContext *avctx, uint16_t *buf, size_t width
}
-static void handle_klv(AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideoInputFrame *videoFrame, int64_t pts)
+static void handle_klv(AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideoInputFrame_v14_2_1 *videoFrame, int64_t pts)
{
const uint8_t KLV_DID = 0x44;
const uint8_t KLV_IN_VANC_SDID = 0x04;
@@ -574,17 +578,21 @@ static void handle_klv(AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideo
}
}
-class decklink_input_callback : public IDeckLinkInputCallback
+class decklink_input_callback : public IDeckLinkInputCallback_v14_2_1
{
public:
explicit decklink_input_callback(AVFormatContext *_avctx);
~decklink_input_callback();
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) { return E_NOINTERFACE; }
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
+ {
+ if (iid == IID_IDeckLinkInputCallback_v14_2_1) { *ppv = (IDeckLinkInputCallback_v14_2_1*)this; AddRef(); return S_OK; }
+ return E_NOINTERFACE;
+ }
virtual ULONG STDMETHODCALLTYPE AddRef(void);
virtual ULONG STDMETHODCALLTYPE Release(void);
virtual HRESULT STDMETHODCALLTYPE VideoInputFormatChanged(BMDVideoInputFormatChangedEvents, IDeckLinkDisplayMode*, BMDDetectedVideoInputFormatFlags);
- virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame*, IDeckLinkAudioInputPacket*);
+ virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame_v14_2_1*, IDeckLinkAudioInputPacket*);
private:
std::atomic<int> _refs;
@@ -593,7 +601,7 @@ class decklink_input_callback : public IDeckLinkInputCallback
int no_video;
int64_t initial_video_pts;
int64_t initial_audio_pts;
- IDeckLinkVideoInputFrame* last_video_frame;
+ IDeckLinkVideoInputFrame_v14_2_1* last_video_frame;
};
decklink_input_callback::decklink_input_callback(AVFormatContext *_avctx) : _refs(1)
@@ -625,7 +633,7 @@ ULONG decklink_input_callback::Release(void)
return ret;
}
-static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame,
+static int64_t get_pkt_pts(IDeckLinkVideoInputFrame_v14_2_1 *videoFrame,
IDeckLinkAudioInputPacket *audioFrame,
int64_t wallclock,
int64_t abs_wallclock,
@@ -679,7 +687,7 @@ static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame,
return pts;
}
-static int get_bmd_timecode(AVFormatContext *avctx, AVTimecode *tc, AVRational frame_rate, BMDTimecodeFormat tc_format, IDeckLinkVideoInputFrame *videoFrame)
+static int get_bmd_timecode(AVFormatContext *avctx, AVTimecode *tc, AVRational frame_rate, BMDTimecodeFormat tc_format, IDeckLinkVideoInputFrame_v14_2_1 *videoFrame)
{
IDeckLinkTimecode *timecode;
int ret = AVERROR(ENOENT);
@@ -701,7 +709,7 @@ static int get_bmd_timecode(AVFormatContext *avctx, AVTimecode *tc, AVRational f
return ret;
}
-static int get_frame_timecode(AVFormatContext *avctx, decklink_ctx *ctx, AVTimecode *tc, IDeckLinkVideoInputFrame *videoFrame)
+static int get_frame_timecode(AVFormatContext *avctx, decklink_ctx *ctx, AVTimecode *tc, IDeckLinkVideoInputFrame_v14_2_1 *videoFrame)
{
AVRational frame_rate = ctx->video_st->r_frame_rate;
int ret;
@@ -726,7 +734,7 @@ static int get_frame_timecode(AVFormatContext *avctx, decklink_ctx *ctx, AVTimec
}
HRESULT decklink_input_callback::VideoInputFrameArrived(
- IDeckLinkVideoInputFrame *videoFrame, IDeckLinkAudioInputPacket *audioFrame)
+ IDeckLinkVideoInputFrame_v14_2_1 *videoFrame, IDeckLinkAudioInputPacket *audioFrame)
{
void *frameBytes;
void *audioFrameBytes;
@@ -1141,7 +1149,7 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
goto error;
/* Get input device. */
- if (ctx->dl->QueryInterface(IID_IDeckLinkInput, (void **) &ctx->dli) != S_OK) {
+ if (ctx->dl->QueryInterface(IID_IDeckLinkInput_v14_2_1, (void **) &ctx->dli) != S_OK) {
av_log(avctx, AV_LOG_ERROR, "Could not open input device from '%s'\n",
avctx->url);
ret = AVERROR(EIO);
diff --git a/libavdevice/decklink_enc.cpp b/libavdevice/decklink_enc.cpp
index cb8f91730eeb3..28da8b24f5010 100644
--- a/libavdevice/decklink_enc.cpp
+++ b/libavdevice/decklink_enc.cpp
@@ -48,7 +48,7 @@ extern "C" {
#endif
/* DeckLink callback class declaration */
-class decklink_frame : public IDeckLinkVideoFrame
+class decklink_frame : public IDeckLinkVideoFrame_v14_2_1
{
public:
decklink_frame(struct decklink_ctx *ctx, AVFrame *avframe, AVCodecID codec_id, int height, int width) :
@@ -111,7 +111,11 @@ class decklink_frame : public IDeckLinkVideoFrame
_ancillary->AddRef();
return S_OK;
}
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) { return E_NOINTERFACE; }
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
+ {
+ if (iid == IID_IDeckLinkVideoFrame_v14_2_1) { *ppv = (IDeckLinkVideoFrame_v14_2_1*)this; AddRef(); return S_OK; }
+ return E_NOINTERFACE;
+ }
virtual ULONG STDMETHODCALLTYPE AddRef(void) { return ++_refs; }
virtual ULONG STDMETHODCALLTYPE Release(void)
{
@@ -138,10 +142,10 @@ class decklink_frame : public IDeckLinkVideoFrame
std::atomic<int> _refs;
};
-class decklink_output_callback : public IDeckLinkVideoOutputCallback
+class decklink_output_callback : public IDeckLinkVideoOutputCallback_v14_2_1
{
public:
- virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted(IDeckLinkVideoFrame *_frame, BMDOutputFrameCompletionResult result)
+ virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted(IDeckLinkVideoFrame_v14_2_1 *_frame, BMDOutputFrameCompletionResult result)
{
decklink_frame *frame = static_cast<decklink_frame *>(_frame);
struct decklink_ctx *ctx = frame->_ctx;
@@ -159,7 +163,11 @@ class decklink_output_callback : public IDeckLinkVideoOutputCallback
return S_OK;
}
virtual HRESULT STDMETHODCALLTYPE ScheduledPlaybackHasStopped(void) { return S_OK; }
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) { return E_NOINTERFACE; }
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
+ {
+ if (iid == IID_IDeckLinkVideoOutputCallback_v14_2_1) { *ppv = (IDeckLinkVideoOutputCallback_v14_2_1*)this; AddRef(); return S_OK; }
+ return E_NOINTERFACE;
+ }
virtual ULONG STDMETHODCALLTYPE AddRef(void) { return 1; }
virtual ULONG STDMETHODCALLTYPE Release(void) { return 1; }
};
@@ -739,7 +747,7 @@ static int decklink_write_video_packet(AVFormatContext *avctx, AVPacket *pkt)
ctx->first_pts = pkt->pts;
/* Schedule frame for playback. */
- hr = ctx->dlo->ScheduleVideoFrame((class IDeckLinkVideoFrame *) frame,
+ hr = ctx->dlo->ScheduleVideoFrame((class IDeckLinkVideoFrame_v14_2_1 *) frame,
pkt->pts * ctx->bmd_tb_num,
ctx->bmd_tb_num, ctx->bmd_tb_den);
/* Pass ownership to DeckLink, or release on failure */
@@ -874,7 +882,7 @@ av_cold int ff_decklink_write_header(AVFormatContext *avctx)
return ret;
/* Get output device. */
- if (ctx->dl->QueryInterface(IID_IDeckLinkOutput, (void **) &ctx->dlo) != S_OK) {
+ if (ctx->dl->QueryInterface(IID_IDeckLinkOutput_v14_2_1, (void **) &ctx->dlo) != S_OK) {
av_log(avctx, AV_LOG_ERROR, "Could not open output device from '%s'\n",
avctx->url);
ret = AVERROR(EIO);
From 9b4249693423c47df7b4b876d4777e2feb972fb5 Mon Sep 17 00:00:00 2001
From: pabloko <pablomorpheo@gmail.com>
Date: Wed, 8 Jan 2025 00:59:07 +0100
Subject: [PATCH 2/2] format
---
libavdevice/decklink_dec.cpp | 14 +++++++++++---
libavdevice/decklink_enc.cpp | 16 +++++++++++++---
2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
index a2a3ac95b8514..28b523c8fd433 100644
--- a/libavdevice/decklink_dec.cpp
+++ b/libavdevice/decklink_dec.cpp
@@ -131,7 +131,11 @@ class decklink_allocator : public IDeckLinkMemoryAllocator_v14_2_1
// IUnknown methods
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
{
- if (iid == IID_IDeckLinkMemoryAllocator_v14_2_1) { *ppv = (IDeckLinkMemoryAllocator_v14_2_1*)this; AddRef(); return S_OK; }
+ if (iid == IID_IDeckLinkMemoryAllocator_v14_2_1) {
+ *ppv = (IDeckLinkMemoryAllocator_v14_2_1*)this;
+ AddRef();
+ return S_OK;
+ }
return E_NOINTERFACE;
}
virtual ULONG STDMETHODCALLTYPE AddRef(void) { return ++_refs; }
@@ -585,8 +589,12 @@ class decklink_input_callback : public IDeckLinkInputCallback_v14_2_1
~decklink_input_callback();
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
- {
- if (iid == IID_IDeckLinkInputCallback_v14_2_1) { *ppv = (IDeckLinkInputCallback_v14_2_1*)this; AddRef(); return S_OK; }
+ {
+ if (iid == IID_IDeckLinkInputCallback_v14_2_1) {
+ *ppv = (IDeckLinkInputCallback_v14_2_1*)this;
+ AddRef();
+ return S_OK;
+ }
return E_NOINTERFACE;
}
virtual ULONG STDMETHODCALLTYPE AddRef(void);
diff --git a/libavdevice/decklink_enc.cpp b/libavdevice/decklink_enc.cpp
index 28da8b24f5010..5bed55dc4fae6 100644
--- a/libavdevice/decklink_enc.cpp
+++ b/libavdevice/decklink_enc.cpp
@@ -113,7 +113,12 @@ class decklink_frame : public IDeckLinkVideoFrame_v14_2_1
}
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
{
- if (iid == IID_IDeckLinkVideoFrame_v14_2_1) { *ppv = (IDeckLinkVideoFrame_v14_2_1*)this; AddRef(); return S_OK; }
+ if (iid == IID_IDeckLinkVideoFrame_v14_2_1)
+ {
+ *ppv = (IDeckLinkVideoFrame_v14_2_1*)this;
+ AddRef();
+ return S_OK;
+ }
return E_NOINTERFACE;
}
virtual ULONG STDMETHODCALLTYPE AddRef(void) { return ++_refs; }
@@ -164,8 +169,13 @@ class decklink_output_callback : public IDeckLinkVideoOutputCallback_v14_2_1
}
virtual HRESULT STDMETHODCALLTYPE ScheduledPlaybackHasStopped(void) { return S_OK; }
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv)
- {
- if (iid == IID_IDeckLinkVideoOutputCallback_v14_2_1) { *ppv = (IDeckLinkVideoOutputCallback_v14_2_1*)this; AddRef(); return S_OK; }
+ {
+ if (iid == IID_IDeckLinkVideoOutputCallback_v14_2_1)
+ {
+ *ppv = (IDeckLinkVideoOutputCallback_v14_2_1*)this;
+ AddRef();
+ return S_OK;
+ }
return E_NOINTERFACE;
}
virtual ULONG STDMETHODCALLTYPE AddRef(void) { return 1; }