diff mbox series

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

Message ID 20230412042719.6173-4-lq@chinaffmpeg.org
State New
Headers show
Series [FFmpeg-devel,v4,1/4] avformat/flvenc: Add support for HEVC over flv in muxer | expand

Checks

Context Check Description
andriy/make_fate_x86 success Make fate finished
andriy/make_x86 warning New warnings during build

Commit Message

Liu Steven April 12, 2023, 4:27 a.m. UTC
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
---
 libavformat/flv.h    |  1 +
 libavformat/flvdec.c | 20 ++++++++++++++++++--
 libavformat/flvenc.c |  1 +
 3 files changed, 20 insertions(+), 2 deletions(-)
diff mbox series

Patch

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"