[FFmpeg-cvslog] avformat/flvdec: add support for legacy HEVC files

Timo Rothenpieler git at videolan.org
Fri Jan 10 22:56:53 EET 2025


ffmpeg | branch: master | Timo Rothenpieler <timo at rothenpieler.org> | Fri Jan 10 21:41:55 2025 +0100| [b76053d8bf322b197a9d07bd27bbdad14fd5bc15] | committer: Timo Rothenpieler

avformat/flvdec: add support for legacy HEVC files

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b76053d8bf322b197a9d07bd27bbdad14fd5bc15
---

 libavformat/flv.h     | 3 +++
 libavformat/flvdec.c  | 6 ++++--
 libavformat/version.h | 2 +-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/libavformat/flv.h b/libavformat/flv.h
index 1ea88ff851..74d3b8de8b 100644
--- a/libavformat/flv.h
+++ b/libavformat/flv.h
@@ -117,6 +117,9 @@ enum {
     FLV_CODECID_H264    = 7,
     FLV_CODECID_REALH263= 8,
     FLV_CODECID_MPEG4   = 9,
+
+    // non-standard protocol extension that is in use in the wild
+    FLV_CODECID_X_HEVC  = 12,
 };
 
 enum {
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 7d56c3e403..2f46475d08 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -381,6 +381,7 @@ static int flv_same_video_codec(AVCodecParameters *vpar, uint32_t flv_codecid)
         return 1;
 
     switch (flv_codecid) {
+    case FLV_CODECID_X_HEVC:
     case MKBETAG('h', 'v', 'c', '1'):
         return vpar->codec_id == AV_CODEC_ID_HEVC;
     case MKBETAG('a', 'v', '0', '1'):
@@ -414,6 +415,7 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream,
     enum AVCodecID old_codec_id = vstream->codecpar->codec_id;
 
     switch (flv_codecid) {
+    case FLV_CODECID_X_HEVC:
     case MKBETAG('h', 'v', 'c', '1'):
         par->codec_id = AV_CODEC_ID_HEVC;
         vstreami->need_parsing = AVSTREAM_PARSE_HEADERS;
@@ -1660,8 +1662,8 @@ retry_duration:
             }
 
             if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4 ||
-                (st->codecpar->codec_id == AV_CODEC_ID_H264 && (!enhanced_flv || type == PacketTypeCodedFrames)) ||
-                (st->codecpar->codec_id == AV_CODEC_ID_HEVC && type == PacketTypeCodedFrames)) {
+                ((st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC) &&
+                 (!enhanced_flv || type == PacketTypeCodedFrames))) {
                 // sign extension
                 int32_t cts = (avio_rb24(s->pb) + 0xff800000) ^ 0xff800000;
                 pts = av_sat_add64(dts, cts);
diff --git a/libavformat/version.h b/libavformat/version.h
index 57d1cb0410..4a2f9ab9cb 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -32,7 +32,7 @@
 #include "version_major.h"
 
 #define LIBAVFORMAT_VERSION_MINOR   9
-#define LIBAVFORMAT_VERSION_MICRO 104
+#define LIBAVFORMAT_VERSION_MICRO 105
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \



More information about the ffmpeg-cvslog mailing list