[FFmpeg-devel] [PATCH 2/2] avcodec/utils: keep CORRUPT and TRUSTED packet flags when parsing packets

Marton Balint cus at passwd.hu
Wed Oct 10 02:32:14 EEST 2018


An FF_ macro got defined in avcodec.h to store the flags which need to be
propagated when parsers split packets so this won't be forgotten when a new
packet flag is introduced.

(I wonder if DISPOSABLE also fits here, or maybe some special handling is
needed like it is done for the keyframe flag?)
---
 libavcodec/avcodec.h             | 9 ++++++++-
 libavcodec/version.h             | 2 +-
 libavformat/utils.c              | 2 +-
 tests/ref/fate/flv-demux         | 2 +-
 tests/ref/fate/iv8-demux         | 2 +-
 tests/ref/fate/segment-mp4-to-ts | 6 +++---
 tests/ref/fate/ts-demux          | 2 +-
 7 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 705a3ce4f3..9a3f9b6226 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1493,7 +1493,14 @@ typedef struct AVPacket {
  * be discarded by the decoder.  I.e. Non-reference frames.
  */
 #define AV_PKT_FLAG_DISPOSABLE 0x0010
-
+/**
+ * Packet flags which must always be kept when parsers split packets
+ */
+#define FF_PKT_FLAGS_KEEP_WHEN_PARSING (\
+    AV_PKT_FLAG_CORRUPT | \
+    AV_PKT_FLAG_DISCARD | \
+    AV_PKT_FLAG_TRUSTED | \
+    0)
 
 enum AVSideDataParamChangeFlags {
     AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 97d134851f..79c5dc6773 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
 
 #define LIBAVCODEC_VERSION_MAJOR  58
 #define LIBAVCODEC_VERSION_MINOR  32
-#define LIBAVCODEC_VERSION_MICRO 100
+#define LIBAVCODEC_VERSION_MICRO 101
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                LIBAVCODEC_VERSION_MINOR, \
diff --git a/libavformat/utils.c b/libavformat/utils.c
index a8ac90213e..351bd88fa5 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -1511,7 +1511,7 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index)
         out_pkt.pts          = st->parser->pts;
         out_pkt.dts          = st->parser->dts;
         out_pkt.pos          = st->parser->pos;
-        out_pkt.flags       |= pkt->flags & AV_PKT_FLAG_DISCARD;
+        out_pkt.flags       |= pkt->flags & FF_PKT_FLAGS_KEEP_WHEN_PARSING;
 
         if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW)
             out_pkt.pos = st->parser->frame_offset;
diff --git a/tests/ref/fate/flv-demux b/tests/ref/fate/flv-demux
index 4a791754cb..0feac7a090 100644
--- a/tests/ref/fate/flv-demux
+++ b/tests/ref/fate/flv-demux
@@ -613,4 +613,4 @@
 0,      11612,      11612,       33,     1078, 0x501d1c72, F=0x0
 0,      11645,      11645,       33,     2600, 0xdf370d24, F=0x0
 1,      11656,      11656,       46,      346, 0x8899a188
-0,      11678,      11678,       33,     1190, 0xdc1e4c99, F=0x0
+0,      11678,      11678,       33,     1190, 0xdc1e4c99, F=0x2
diff --git a/tests/ref/fate/iv8-demux b/tests/ref/fate/iv8-demux
index 518f3de974..860a287d53 100644
--- a/tests/ref/fate/iv8-demux
+++ b/tests/ref/fate/iv8-demux
@@ -27,5 +27,5 @@
 0,      72000,      72000,        0,    20891, 0x3d064fd3
 0,      75600,      75600,        0,    20834, 0xcb774dbc
 0,      79200,      79200,        0,    20870, 0xbc536589
-0,      82800,      82800,        0,    21421, 0xc99a68e4
+0,      82800,      82800,        0,    21421, 0xc99a68e4, F=0x3
 0,      86400,      86400,        0,    12869, 0x5684e304
diff --git a/tests/ref/fate/segment-mp4-to-ts b/tests/ref/fate/segment-mp4-to-ts
index b5accb60f7..f54871b8a1 100644
--- a/tests/ref/fate/segment-mp4-to-ts
+++ b/tests/ref/fate/segment-mp4-to-ts
@@ -23,7 +23,7 @@
 0,      50400,      54000,        0,      607, 0xc53c2339, F=0x0, S=1,        1, 0x00e000e0
 0,      54000,      72000,        0,     4755, 0x2f642b58, F=0x0, S=1,        1, 0x00e000e0
 0,      57600,      64800,        0,     1182, 0xbe1a4847, F=0x0, S=1,        1, 0x00e000e0
-0,      61200,      61200,        0,      809, 0x8d948a4e, F=0x0, S=1,        1, 0x00e000e0
+0,      61200,      61200,        0,      809, 0x8d948a4e, F=0x2, S=1,        1, 0x00e000e0
 0,      64800,      68400,        0,      656, 0x4fa03c2b, F=0x0, S=1,        1, 0x00e000e0
 0,      68400,      86400,        0,    26555, 0x5629b584, S=1,        1, 0x00e000e0
 0,      72000,      79200,        0,     1141, 0x761b31e8, F=0x0, S=1,        1, 0x00e000e0
@@ -95,7 +95,7 @@
 0,     309600,     313200,     3600,      829, 0xffd795cd, F=0x0, S=1,        1, 0x00e000e0
 0,     313200,     331200,     3600,     5352, 0x59997996, F=0x0, S=1,        1, 0x00e000e0
 0,     316800,     324000,     3600,     1501, 0xb3b8f001, F=0x0, S=1,        1, 0x00e000e0
-0,     320400,     320400,     3600,      941, 0x92b0cb18, F=0x0, S=1,        1, 0x00e000e0
+0,     320400,     320400,     3600,      941, 0x92b0cb18, F=0x2, S=1,        1, 0x00e000e0
 0,     324000,     327600,     3600,      823, 0x3d548355, F=0x0, S=1,        1, 0x00e000e0
 0,     327600,     345600,     3600,    24042, 0x441e94fb, S=1,        1, 0x00e000e0
 0,     331200,     338400,     3600,     1582, 0x4f5d1049, F=0x0, S=1,        1, 0x00e000e0
@@ -119,7 +119,7 @@
 0,     396000,     399600,     3600,      199, 0x79b06355, F=0x0, S=1,        1, 0x00e000e0
 0,     399600,     417600,     3600,     1862, 0x22a2a06c, F=0x0, S=1,        1, 0x00e000e0
 0,     403200,     410400,     3600,      359, 0x11bdae52, F=0x0, S=1,        1, 0x00e000e0
-0,     406800,     406800,     3600,      235, 0xbec26964, F=0x0, S=1,        1, 0x00e000e0
+0,     406800,     406800,     3600,      235, 0xbec26964, F=0x2, S=1,        1, 0x00e000e0
 0,     410400,     414000,     3600,      221, 0x8380682c, F=0x0, S=1,        1, 0x00e000e0
 0,     414000,     432000,     3600,    22588, 0xf0ecf072, S=1,        1, 0x00e000e0
 0,     417600,     424800,     3600,      383, 0x4f3bb571, F=0x0, S=1,        1, 0x00e000e0
diff --git a/tests/ref/fate/ts-demux b/tests/ref/fate/ts-demux
index eb13ecc684..cc455118d6 100644
--- a/tests/ref/fate/ts-demux
+++ b/tests/ref/fate/ts-demux
@@ -13,7 +13,7 @@
 1,          0,          0,     2880,     1536, 0x773ffeea, S=1,        1, 0x00bd00bd
 1,       2880,       2880,     2880,     1536, 0x6dc10748
 1,       5760,       5760,     2880,     1536, 0xbab5129c
-1,       8640,       8640,     2880,     1536, 0x602f034b, S=1,        1, 0x00bd00bd
+1,       8640,       8640,     2880,     1536, 0x602f034b, F=0x3, S=1,        1, 0x00bd00bd
 1,      11520,      11520,     2880,      906, 0x69cdcbcd
 0,      32037,      36541,     1501,   114336, 0x37a215a8, S=1,        1, 0x00e000e0
 0,      33538,      33538,     1501,    12560, 0xb559a3d4, F=0x0, S=1,        1, 0x00e000e0
-- 
2.16.4



More information about the ffmpeg-devel mailing list