[FFmpeg-devel] [PATCH v4 4/4] avformat/flvdec: support demux av1 in Enhanced FLV

Steven Liu lq at chinaffmpeg.org
Wed Apr 12 07:27:19 EEST 2023


Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
---
 libavformat/flv.h    |  1 +
 libavformat/flvdec.c | 20 ++++++++++++++++++--
 libavformat/flvenc.c |  1 +
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/libavformat/flv.h b/libavformat/flv.h
index 44d3b04ff9..398a958e60 100644
--- a/libavformat/flv.h
+++ b/libavformat/flv.h
@@ -117,6 +117,7 @@ enum {
     FLV_CODECID_REALH263= 8,
     FLV_CODECID_MPEG4   = 9,
     FLV_CODECID_HEVC    = 10,
+    FLV_CODECID_AV1     = 11,
 };
 
 enum {
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 8060c43772..525c5b2e97 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -319,6 +319,9 @@ static int flv_same_video_codec(AVFormatContext *s, AVCodecParameters *vpar, int
             case MKBETAG('h', 'v', 'c', '1'):
                 flv_codecid = FLV_CODECID_HEVC;
                 break;
+            case MKBETAG('a', 'v', '0', '1'):
+                flv_codecid = FLV_CODECID_AV1;
+                break;
             default:
                 break;
         }
@@ -339,6 +342,8 @@ static int flv_same_video_codec(AVFormatContext *s, AVCodecParameters *vpar, int
         return vpar->codec_id == AV_CODEC_ID_H264;
     case FLV_CODECID_HEVC:
         return vpar->codec_id == AV_CODEC_ID_HEVC;
+    case FLV_CODECID_AV1:
+        return vpar->codec_id == AV_CODEC_ID_AV1;
     default:
         return vpar->codec_tag == flv_codecid;
     }
@@ -361,6 +366,9 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream,
             case MKBETAG('h', 'v', 'c', '1'):
                 flv_codecid = FLV_CODECID_HEVC;
                 break;
+            case MKBETAG('a', 'v', '0', '1'):
+                flv_codecid = FLV_CODECID_AV1;
+                break;
             default:
                 break;
         }
@@ -408,6 +416,12 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream,
         vstreami->need_parsing = AVSTREAM_PARSE_HEADERS;
         ret = 3;
         break;
+    case FLV_CODECID_AV1:
+        par->codec_id = AV_CODEC_ID_AV1;
+        vstreami->need_parsing = AVSTREAM_PARSE_HEADERS;
+        ret = 3;
+        break;
+
     default:
         avpriv_request_sample(s, "Video codec (%x)", flv_codecid);
         par->codec_tag = flv_codecid;
@@ -1285,7 +1299,8 @@ retry_duration:
     if (st->codecpar->codec_id == AV_CODEC_ID_AAC ||
         st->codecpar->codec_id == AV_CODEC_ID_H264 ||
         st->codecpar->codec_id == AV_CODEC_ID_MPEG4 ||
-        st->codecpar->codec_id == AV_CODEC_ID_HEVC) {
+        st->codecpar->codec_id == AV_CODEC_ID_HEVC ||
+        st->codecpar->codec_id == AV_CODEC_ID_AV1) {
         int type = 0;
         if (flv->exheader) {
             type = flags & 0x0F;
@@ -1316,7 +1331,8 @@ retry_duration:
             }
         }
         if (type == 0 && (!st->codecpar->extradata || st->codecpar->codec_id == AV_CODEC_ID_AAC ||
-            st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC)) {
+            st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC ||
+            st->codecpar->codec_id == AV_CODEC_ID_AV1)) {
             AVDictionaryEntry *t;
 
             if (st->codecpar->extradata) {
diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
index f58ab7a3b0..36ed55d231 100644
--- a/libavformat/flvenc.c
+++ b/libavformat/flvenc.c
@@ -29,6 +29,7 @@
 #include "avio.h"
 #include "avc.h"
 #include "hevc.h"
+#include "av1.h"
 #include "avformat.h"
 #include "flv.h"
 #include "internal.h"
-- 
2.40.0



More information about the ffmpeg-devel mailing list