diff --git a/thirdparty/FFmpeg-ff4.0/HPKBUILD b/thirdparty/FFmpeg-ff4.0/HPKBUILD index 1270eae43a211a74b8a0d0872f66073ea05a2f0d..ffed831fa92de06600c4b665c1f019969c8094f6 100644 --- a/thirdparty/FFmpeg-ff4.0/HPKBUILD +++ b/thirdparty/FFmpeg-ff4.0/HPKBUILD @@ -28,6 +28,7 @@ prepare() { then cd $builddir # fix bug + patch -p1 < `pwd`/../ipv6.patch patch -p1 < `pwd`/../oh_ffmpeg-bug-fixed.patch patch -p1 < `pwd`/../oh_ffmpeg_hls_optimization.patch patchflag=false diff --git a/thirdparty/FFmpeg-ff4.0/ipv6.patch b/thirdparty/FFmpeg-ff4.0/ipv6.patch new file mode 100644 index 0000000000000000000000000000000000000000..bf99d74fc58ab4ffb582399f8f99e281af99cb17 --- /dev/null +++ b/thirdparty/FFmpeg-ff4.0/ipv6.patch @@ -0,0 +1,27 @@ +--- FFmpeg-ff4.0--ijk0.8.8--20210426--001/libavutil/dns_cache.c 2021-04-23 14:35:31 ++++ FFmpeg-ff4.0--ijk0.8.8--20210426--001-fix/libavutil/dns_cache.c 2025-02-17 11:27:04 +@@ -95,14 +95,22 @@ + + memcpy(new_entry->res, cur_ai, sizeof(struct addrinfo)); + +- new_entry->res->ai_addr = (struct sockaddr *) av_mallocz(sizeof(struct sockaddr)); ++ if (cur_ai->ai_addr->sa_family == AF_INET) { ++ new_entry->res->ai_addr = (struct sockaddr *) av_mallocz(sizeof(struct sockaddr)); ++ } else { ++ new_entry->res->ai_addr = (struct sockaddr_in6 *) av_mallocz(sizeof(struct sockaddr_in6)); ++ } + if (!new_entry->res->ai_addr) { + av_freep(&new_entry->res); + av_freep(&new_entry); + goto fail; + } + +- memcpy(new_entry->res->ai_addr, cur_ai->ai_addr, sizeof(struct sockaddr)); ++ if (cur_ai->ai_addr->sa_family == AF_INET) { ++ memcpy(new_entry->res->ai_addr, cur_ai->ai_addr, sizeof(struct sockaddr)); ++ } else { ++ memcpy(new_entry->res->ai_addr, cur_ai->ai_addr, sizeof(struct sockaddr_in6)); ++ } + new_entry->res->ai_canonname = NULL; + new_entry->res->ai_next = NULL; + new_entry->ref_count = 0;