Download raw body.
ffmpeg-8.0 unable to play certain video formats
On Tue, 04 Nov 2025 09:38:41 +0100,
David Goudou <david.goudou@gmail.com> wrote:
>
> On 03 Nov 25 - 18:24, Stuart Henderson wrote:
> >
> > "So, installing ffmpeg4.4 solves my problem."
> >
> > ->
> >
> > Status: RESOLVED
> > Closed: 25 days ago
> > WORKSFORME
> >
> > *me cries*
> >
> >
>
> Not sure where to go from here. ffmpeg upstream or back to firefox bugzilla?
>
> Probably not viable for me to keep ffmpeg at 6 just for ff playback as the snapshots been built with 8Resolution: --- UNCONFIRMED
>
Here a diff which allows me to build firefox which plays a video by openning
https://justdavid.org/x3kja9d680zf1.mp4
It is a bit hacky but works.
Landry, are you ok with this way? If yes I'll backport it to firefox-esr.
Index: Makefile
===================================================================
RCS file: /home/cvs/ports/www/mozilla-firefox/Makefile,v
diff -u -p -r1.656 Makefile
--- Makefile 28 Oct 2025 14:22:02 -0000 1.656
+++ Makefile 4 Nov 2025 12:08:38 -0000
@@ -3,6 +3,7 @@ ONLY_FOR_ARCHS = amd64 aarch64 riscv64
# Don't forget to bump www/firefox-i18n after updates.
+REVISION = 0
MOZILLA_VERSION = 144.0.2
MOZILLA_BRANCH = release
MOZILLA_PROJECT = firefox
@@ -72,6 +73,17 @@ CONFIGURE_ARGS += --enable-lto=thin
# riscv64 JIT code not ready for prime time #1994624
CONFIGURE_ARGS += --disable-jit
.endif
+
+LIB_DEPENDS += graphics/ffmpeg
+
+pre-patch:
+ @mkdir -p ${WRKSRC}/dom/media/platforms/ffmpeg/ffmpeg62/include
+.for _d in libavcodec libavutil
+ @ln -s ${LOCALBASE}/include/${_d} \
+ ${WRKSRC}/dom/media/platforms/ffmpeg/ffmpeg62/include/${_d}
+.endfor
+ @ln -s ${WRKSRC}/dom/media/platforms/ffmpeg/ffmpeg61/moz.build \
+ ${WRKSRC}/dom/media/platforms/ffmpeg/ffmpeg62/moz.build
# XXX badly formed debug ?
DWZ = :
Index: patches/patch-dom_media_platforms_ffmpeg_FFmpegLibWrapper_cpp
===================================================================
RCS file: patches/patch-dom_media_platforms_ffmpeg_FFmpegLibWrapper_cpp
diff -N patches/patch-dom_media_platforms_ffmpeg_FFmpegLibWrapper_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dom_media_platforms_ffmpeg_FFmpegLibWrapper_cpp 4 Nov 2025 10:35:40 -0000
@@ -0,0 +1,247 @@
+Support of ffmpeg 8
+See: https://bugzilla.mozilla.org/show_bug.cgi?id=1962139
+
+Index: dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
+--- dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp.orig
++++ dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
+@@ -81,6 +81,7 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC_59 = 1 << 6,
+ AV_FUNC_60 = 1 << 7,
+ AV_FUNC_61 = 1 << 8,
++ AV_FUNC_62 = 1 << 9,
+ AV_FUNC_AVUTIL_53 = AV_FUNC_53 | AV_FUNC_AVUTIL_MASK,
+ AV_FUNC_AVUTIL_54 = AV_FUNC_54 | AV_FUNC_AVUTIL_MASK,
+ AV_FUNC_AVUTIL_55 = AV_FUNC_55 | AV_FUNC_AVUTIL_MASK,
+@@ -90,9 +91,10 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC_AVUTIL_59 = AV_FUNC_59 | AV_FUNC_AVUTIL_MASK,
+ AV_FUNC_AVUTIL_60 = AV_FUNC_60 | AV_FUNC_AVUTIL_MASK,
+ AV_FUNC_AVUTIL_61 = AV_FUNC_61 | AV_FUNC_AVUTIL_MASK,
++ AV_FUNC_AVUTIL_62 = AV_FUNC_62 | AV_FUNC_AVUTIL_MASK,
+ AV_FUNC_AVCODEC_ALL = AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 | AV_FUNC_56 |
+ AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 |
+- AV_FUNC_61,
++ AV_FUNC_61 | AV_FUNC_62,
+ AV_FUNC_AVUTIL_ALL = AV_FUNC_AVCODEC_ALL | AV_FUNC_AVUTIL_MASK
+ };
+
+@@ -124,6 +126,9 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ case 61:
+ version = AV_FUNC_61;
+ break;
++ case 62:
++ version = AV_FUNC_62;
++ break;
+ default:
+ FFMPEGV_LOG("Unknown avcodec version: %d", macro);
+ Unlink();
+@@ -164,17 +169,20 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC(av_lockmgr_register, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
+ AV_FUNC(avcodec_alloc_context3, AV_FUNC_AVCODEC_ALL)
+- AV_FUNC(avcodec_close, AV_FUNC_AVCODEC_ALL)
++ AV_FUNC(avcodec_close, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
++ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58 |
++ AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++
+ AV_FUNC(avcodec_decode_audio4, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
+ AV_FUNC(avcodec_decode_video2, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
+ AV_FUNC(avcodec_find_decoder, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(avcodec_find_decoder_by_name,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 | AV_FUNC_62)
+ AV_FUNC(avcodec_find_encoder, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(avcodec_find_encoder_by_name,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 | AV_FUNC_62)
+ AV_FUNC(avcodec_flush_buffers, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(avcodec_open2, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(avcodec_register_all, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+@@ -189,21 +197,25 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC(avcodec_get_frame_defaults, (AV_FUNC_53 | AV_FUNC_54))
+ AV_FUNC(avcodec_free_frame, AV_FUNC_54)
+ AV_FUNC(avcodec_send_packet,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 | AV_FUNC_62)
+ AV_FUNC(avcodec_receive_packet,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
+- AV_FUNC(avcodec_send_frame, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 | AV_FUNC_62)
++ AV_FUNC(avcodec_send_frame, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 |
++ AV_FUNC_61 | AV_FUNC_62)
+ AV_FUNC(avcodec_receive_frame,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 | AV_FUNC_62)
+ AV_FUNC(avcodec_default_get_buffer2,
+ (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 |
+- AV_FUNC_60 | AV_FUNC_61))
++ AV_FUNC_60 | AV_FUNC_61 | AV_FUNC_62))
+ AV_FUNC(av_packet_alloc,
+- (AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61))
++ (AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62))
+ AV_FUNC(av_packet_unref,
+- (AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61))
++ (AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62))
+ AV_FUNC(av_packet_free,
+- (AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61))
++ (AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62))
+ AV_FUNC(avcodec_descriptor_get, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(av_log_set_callback, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC(av_log_set_level, AV_FUNC_AVUTIL_ALL)
+@@ -212,41 +224,44 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC(av_frame_alloc,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62))
+ AV_FUNC(av_frame_clone,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62))
+ AV_FUNC(av_frame_free,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62))
+ AV_FUNC(av_frame_unref,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62))
+ AV_FUNC(av_frame_get_buffer,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62))
+ AV_FUNC(av_frame_make_writable,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62))
+ AV_FUNC(av_image_check_size, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC(av_image_get_buffer_size, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC_OPTION(av_channel_layout_default,
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION(av_channel_layout_from_mask,
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
+- AV_FUNC_OPTION(av_channel_layout_copy, AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 | AV_FUNC_AVUTIL_62)
++ AV_FUNC_OPTION(av_channel_layout_copy, AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION(av_buffer_get_opaque,
+ (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58 |
+- AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61))
++ AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62))
+ AV_FUNC(
+ av_buffer_create,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 | AV_FUNC_61))
++ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60 | AV_FUNC_61 |
++ AV_FUNC_62))
+ AV_FUNC_OPTION(av_frame_get_colorspace,
+ AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58)
+@@ -254,7 +269,8 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58)
+ AV_FUNC(av_strerror, AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC(av_get_sample_fmt_name, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC(av_dict_set, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC(av_dict_free, AV_FUNC_AVUTIL_ALL)
+@@ -262,50 +278,68 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link()
+ AV_FUNC(av_opt_set_double, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC(av_opt_set_int, AV_FUNC_AVUTIL_ALL)
+ AV_FUNC(avcodec_free_context,
+- AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(avcodec_get_hw_config,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_codec_is_decoder,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_codec_is_encoder,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_codec_iterate,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init,
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc,
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION_SILENT(av_buffer_ref, AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+ AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION_SILENT(av_buffer_unref, AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+ AV_FUNC_AVUTIL_60 |
+- AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc,
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ AV_FUNC_OPTION_SILENT(av_hwframe_ctx_init,
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+
+ #ifdef MOZ_WIDGET_GTK
+ AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_get_hwframe_constraints,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_hwframe_transfer_get_formats,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived,
+- AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 |
+- AV_FUNC_60 | AV_FUNC_61)
++ AV_FUNC_60 | AV_FUNC_61 |
++ AV_FUNC_62)
+ AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string,
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 |
+- AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61)
++ AV_FUNC_AVUTIL_60 | AV_FUNC_AVUTIL_61 |
++ AV_FUNC_AVUTIL_62)
+ #endif
+
+ AV_FUNC_OPTION(av_tx_init, AV_FUNC_AVUTIL_ALL)
Index: patches/patch-dom_media_platforms_ffmpeg_FFmpegRuntimeLinker_cpp
===================================================================
RCS file: patches/patch-dom_media_platforms_ffmpeg_FFmpegRuntimeLinker_cpp
diff -N patches/patch-dom_media_platforms_ffmpeg_FFmpegRuntimeLinker_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dom_media_platforms_ffmpeg_FFmpegRuntimeLinker_cpp 4 Nov 2025 10:58:00 -0000
@@ -0,0 +1,52 @@
+Support of ffmpeg 8
+See: https://bugzilla.mozilla.org/show_bug.cgi?id=1962139
+
+Index: dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
+--- dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp.orig
++++ dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
+@@ -35,6 +35,7 @@ static FFmpegLibWrapper sLibAV;
+ static const char* sLibs[] = {
+ // clang-format off
+ #if defined(XP_DARWIN)
++ "libavcodec.62.dylib",
+ "libavcodec.61.dylib",
+ "libavcodec.60.dylib",
+ "libavcodec.59.dylib",
+@@ -48,6 +49,7 @@ static const char* sLibs[] = {
+ "libavcodec.so", // OpenBSD hardly controls the major/minor library version
+ // of ffmpeg and update it regulary on ABI/API changes
+ #else
++ "libavcodec.so.62",
+ "libavcodec.so.61",
+ "libavcodec.so.60",
+ "libavcodec.so.59",
+@@ -120,6 +122,9 @@ bool FFmpegRuntimeLinker::Init() {
+ case 61:
+ FFmpegDecoderModule<61>::Init(&sLibAV);
+ break;
++ case 62:
++ FFmpegDecoderModule<62>::Init(&sLibAV);
++ break;
+ }
+ return true;
+ case FFmpegLibWrapper::LinkResult::NoProvidedLib:
+@@ -210,6 +215,9 @@ already_AddRefed<PlatformDecoderModule> FFmpegRuntimeL
+ case 61:
+ module = FFmpegDecoderModule<61>::Create(&sLibAV);
+ break;
++ case 62:
++ module = FFmpegDecoderModule<62>::Create(&sLibAV);
++ break;
+ default:
+ module = nullptr;
+ }
+@@ -247,6 +255,9 @@ already_AddRefed<PlatformEncoderModule> FFmpegRuntimeL
+ break;
+ case 61:
+ module = FFmpegEncoderModule<61>::Create(&sLibAV);
++ break;
++ case 62:
++ module = FFmpegEncoderModule<62>::Create(&sLibAV);
+ break;
+ default:
+ module = nullptr;
Index: patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoDecoder_cpp
===================================================================
RCS file: patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoDecoder_cpp
diff -N patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoDecoder_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoDecoder_cpp 4 Nov 2025 10:35:47 -0000
@@ -0,0 +1,183 @@
+Support of ffmpeg 8
+See: https://bugzilla.mozilla.org/show_bug.cgi?id=1962139
+
+Index: dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
+--- dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.orig
++++ dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
+@@ -1306,11 +1306,21 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::DoDecode(
+ RESULT_DETAIL("HW decoding is slow, switching back to SW decode"));
+ }
+ if (mUsingV4L2) {
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ rv = CreateImageV4L2(mFrame->pkt_pos, GetFramePts(mFrame),
+ Duration(mFrame), aResults);
++# else
++ rv = CreateImageV4L2(packet->pos, GetFramePts(mFrame),
++ Duration(mFrame), aResults);
++# endif
+ } else {
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ rv = CreateImageVAAPI(mFrame->pkt_pos, GetFramePts(mFrame),
+ Duration(mFrame), aResults);
++# else
++ rv = CreateImageVAAPI(packet->pos, GetFramePts(mFrame),
++ Duration(mFrame), aResults);
++# endif
+ }
+
+ // If VA-API/V4L2 playback failed, just quit. Decoder is going to be
+@@ -1323,15 +1333,25 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::DoDecode(
+ }
+ # elif defined(MOZ_ENABLE_D3D11VA)
+ mDecodeStats.UpdateDecodeTimes(Duration(mFrame));
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ rv = CreateImageD3D11(mFrame->pkt_pos, GetFramePts(mFrame),
+ Duration(mFrame), aResults);
++# else
++ rv = CreateImageD3D11(packet->pos, GetFramePts(mFrame),
++ Duration(mFrame), aResults);
++# endif
+ # elif defined(MOZ_WIDGET_ANDROID)
+ InputInfo info(aSample);
+ info.mTimecode = -1;
+ TakeInputInfo(mFrame, info);
+ mDecodeStats.UpdateDecodeTimes(info.mDuration);
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ rv = CreateImageMediaCodec(mFrame->pkt_pos, GetFramePts(mFrame),
+ info.mTimecode, info.mDuration, aResults);
++# else
++ rv = CreateImageMediaCodec(packet->pos, GetFramePts(mFrame),
++ info.mTimecode, info.mDuration, aResults);
++# endif
+ # else
+ mDecodeStats.UpdateDecodeTimes(Duration(mFrame));
+ return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
+@@ -1341,8 +1361,13 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::DoDecode(
+ # endif
+ {
+ mDecodeStats.UpdateDecodeTimes(Duration(mFrame));
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ rv = CreateImage(mFrame->pkt_pos, GetFramePts(mFrame), Duration(mFrame),
+ aResults);
++# else
++ rv = CreateImage(packet->pos, GetFramePts(mFrame), Duration(mFrame),
++ aResults);
++# endif
+ }
+ if (NS_FAILED(rv)) {
+ return rv;
+@@ -1670,10 +1695,17 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ mLib->av_buffer_get_opaque(mFrame->buf[0]));
+ MOZ_ASSERT(wrapper);
+ FFMPEG_LOGV("Create a video data from a shmem image=%p", wrapper.get());
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ v = VideoData::CreateFromImage(
+ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
+ TimeUnit::FromMicroseconds(aDuration), wrapper->AsImage(),
+ !!mFrame->key_frame, TimeUnit::FromMicroseconds(-1));
++# else
++ v = VideoData::CreateFromImage(
++ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
++ TimeUnit::FromMicroseconds(aDuration), wrapper->AsImage(),
++ !!(mFrame->flags & AV_FRAME_FLAG_KEY), TimeUnit::FromMicroseconds(-1));
++# endif
+ }
+ #endif
+ #if defined(MOZ_WIDGET_GTK) && defined(MOZ_USE_HWDECODE)
+@@ -1706,10 +1738,17 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ mInfo.mTransferFunction
+ ? TransferFunctionToString(mInfo.mTransferFunction.value())
+ : "unknown");
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ v = VideoData::CreateFromImage(
+ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
+ TimeUnit::FromMicroseconds(aDuration), surface->GetAsImage(),
+ !!mFrame->key_frame, TimeUnit::FromMicroseconds(-1));
++# else
++ v = VideoData::CreateFromImage(
++ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
++ TimeUnit::FromMicroseconds(aDuration), surface->GetAsImage(),
++ !!(mFrame->flags & AV_FRAME_FLAG_KEY), TimeUnit::FromMicroseconds(-1));
++# endif
+ } else {
+ FFMPEG_LOG("Failed to uploaded video data to DMABuf");
+ }
+@@ -1726,6 +1765,7 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ return ret;
+ }
+ }
++#if LIBAVCODEC_VERSION_MAJOR < 62
+ Result<already_AddRefed<VideoData>, MediaResult> r =
+ VideoData::CreateAndCopyData(
+ mInfo, mImageContainer, aOffset, TimeUnit::FromMicroseconds(aPts),
+@@ -1733,6 +1773,15 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ TimeUnit::FromMicroseconds(mFrame->pkt_dts),
+ mInfo.ScaledImageRect(mFrame->width, mFrame->height),
+ mImageAllocator);
++#else
++ Result<already_AddRefed<VideoData>, MediaResult> r =
++ VideoData::CreateAndCopyData(
++ mInfo, mImageContainer, aOffset, TimeUnit::FromMicroseconds(aPts),
++ TimeUnit::FromMicroseconds(aDuration), b, !!(mFrame->flags & AV_FRAME_FLAG_KEY),
++ TimeUnit::FromMicroseconds(mFrame->pkt_dts),
++ mInfo.ScaledImageRect(mFrame->width, mFrame->height),
++ mImageAllocator);
++#endif
+ if (r.isErr()) {
+ return r.unwrapErr();
+ }
+@@ -1807,11 +1856,17 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ mInfo.mTransferFunction
+ ? TransferFunctionToString(mInfo.mTransferFunction.value())
+ : "unknown");
+-
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ RefPtr<VideoData> vp = VideoData::CreateFromImage(
+ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
+ TimeUnit::FromMicroseconds(aDuration), surface->GetAsImage(),
+ !!mFrame->key_frame, TimeUnit::FromMicroseconds(mFrame->pkt_dts));
++# else
++ RefPtr<VideoData> vp = VideoData::CreateFromImage(
++ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
++ TimeUnit::FromMicroseconds(aDuration), surface->GetAsImage(),
++ !!(mFrame->flags & AV_FRAME_FLAG_KEY), TimeUnit::FromMicroseconds(mFrame->pkt_dts));
++# endif
+
+ if (!vp) {
+ return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
+@@ -1857,10 +1912,17 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ surface->SetYUVColorSpace(GetFrameColorSpace());
+ surface->SetColorRange(GetFrameColorRange());
+
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ RefPtr<VideoData> vp = VideoData::CreateFromImage(
+ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
+ TimeUnit::FromMicroseconds(aDuration), surface->GetAsImage(),
+ !!mFrame->key_frame, TimeUnit::FromMicroseconds(mFrame->pkt_dts));
++# else
++ RefPtr<VideoData> vp = VideoData::CreateFromImage(
++ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
++ TimeUnit::FromMicroseconds(aDuration), surface->GetAsImage(),
++ !!(mFrame->flags & AV_FRAME_FLAG_KEY), TimeUnit::FromMicroseconds(mFrame->pkt_dts));
++# endif
+
+ if (!vp) {
+ return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
+@@ -2298,10 +2360,17 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER>::CreateImage
+ }
+ MOZ_ASSERT(image);
+
++# if LIBAVCODEC_VERSION_MAJOR < 62
+ RefPtr<VideoData> v = VideoData::CreateFromImage(
+ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
+ TimeUnit::FromMicroseconds(aDuration), image, !!mFrame->key_frame,
+ TimeUnit::FromMicroseconds(mFrame->pkt_dts));
++# else
++ RefPtr<VideoData> v = VideoData::CreateFromImage(
++ mInfo.mDisplay, aOffset, TimeUnit::FromMicroseconds(aPts),
++ TimeUnit::FromMicroseconds(aDuration), image, !!(mFrame->flags & AV_FRAME_FLAG_KEY),
++ TimeUnit::FromMicroseconds(mFrame->pkt_dts));
++# endif
+ if (!v) {
+ nsPrintfCString msg("D3D image allocation error");
+ FFMPEG_LOG("%s", msg.get());
Index: patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoEncoder_cpp
===================================================================
RCS file: patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoEncoder_cpp
diff -N patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoEncoder_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dom_media_platforms_ffmpeg_FFmpegVideoEncoder_cpp 4 Nov 2025 10:35:53 -0000
@@ -0,0 +1,26 @@
+Support of ffmpeg 8
+See: https://bugzilla.mozilla.org/show_bug.cgi?id=1962139
+
+Index: dom/media/platforms/ffmpeg/FFmpegVideoEncoder.cpp
+--- dom/media/platforms/ffmpeg/FFmpegVideoEncoder.cpp.orig
++++ dom/media/platforms/ffmpeg/FFmpegVideoEncoder.cpp
+@@ -118,11 +118,19 @@ struct H264LiteralSetting {
+ H264Setting get() const { return {mValue, mString.AsString()}; }
+ };
+
++#if LIBAVCODEC_VERSION_MAJOR < 62
+ static constexpr H264LiteralSetting H264Profiles[]{
+ {FF_PROFILE_H264_BASELINE, "baseline"_ns},
+ {FF_PROFILE_H264_MAIN, "main"_ns},
+ {FF_PROFILE_H264_EXTENDED, ""_ns},
+ {FF_PROFILE_H264_HIGH, "high"_ns}};
++#else
++static constexpr H264LiteralSetting H264Profiles[]{
++ {AV_PROFILE_H264_BASELINE, "baseline"_ns},
++ {AV_PROFILE_H264_MAIN, "main"_ns},
++ {AV_PROFILE_H264_EXTENDED, ""_ns},
++ {AV_PROFILE_H264_HIGH, "high"_ns}};
++#endif
+
+ static Maybe<H264Setting> GetH264Profile(const H264_PROFILE& aProfile) {
+ switch (aProfile) {
Index: patches/patch-dom_media_platforms_ffmpeg_moz_build
===================================================================
RCS file: patches/patch-dom_media_platforms_ffmpeg_moz_build
diff -N patches/patch-dom_media_platforms_ffmpeg_moz_build
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-dom_media_platforms_ffmpeg_moz_build 4 Nov 2025 11:27:04 -0000
@@ -0,0 +1,14 @@
+Support of ffmpeg 8
+See: https://bugzilla.mozilla.org/show_bug.cgi?id=1962139
+
+Index: dom/media/platforms/ffmpeg/moz.build
+--- dom/media/platforms/ffmpeg/moz.build.orig
++++ dom/media/platforms/ffmpeg/moz.build
+@@ -17,6 +17,7 @@ DIRS += [
+ "ffmpeg59",
+ "ffmpeg60",
+ "ffmpeg61",
++ "ffmpeg62",
+ ]
+
+ UNIFIED_SOURCES += ["FFmpegRuntimeLinker.cpp"]
--
wbr, Kirill
ffmpeg-8.0 unable to play certain video formats