[FFmpeg-cvslog] ffmpeg: move subframe warning to libavcodec

wm4 git at videolan.org
Sat Oct 1 18:24:29 EEST 2016


ffmpeg | branch: master | wm4 <nfxjfg at googlemail.com> | Sat Oct  1 17:22:02 2016 +0200| [b2fea2fdee464edd736fc903ec3a4dc1e3a06e56] | committer: wm4

ffmpeg: move subframe warning to libavcodec

With the new decode API, doing this in ffmpeg.c is impractical. There
was resistance against removing the warning, so put it into libavcodec.

Not bothering with reducing the warning to verbose log level for
subsequent wanrings. The warning should be rare, and only happen when
developing new codecs for the old API.

Includes a change suggested by Michael Niedermayer.

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

 ffmpeg.c              | 7 -------
 ffmpeg.h              | 1 -
 libavcodec/internal.h | 1 +
 libavcodec/utils.c    | 6 ++++++
 4 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 9a8e65a..ff5f98b 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2357,13 +2357,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo
         ist->pts = ist->next_pts;
         ist->dts = ist->next_dts;
 
-        if (avpkt.size && avpkt.size != pkt->size &&
-            !(ist->dec->capabilities & AV_CODEC_CAP_SUBFRAMES)) {
-            av_log(NULL, ist->showed_multi_packet_warning ? AV_LOG_VERBOSE : AV_LOG_WARNING,
-                   "Multiple frames in a packet from stream %d\n", pkt->stream_index);
-            ist->showed_multi_packet_warning = 1;
-        }
-
         switch (ist->dec_ctx->codec_type) {
         case AVMEDIA_TYPE_AUDIO:
             ret = decode_audio    (ist, &avpkt, &got_output);
diff --git a/ffmpeg.h b/ffmpeg.h
index 0d01d2b..3ba62a1 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -287,7 +287,6 @@ typedef struct InputStream {
 
     double ts_scale;
     int saw_first_ts;
-    int showed_multi_packet_warning;
     AVDictionary *decoder_opts;
     AVRational framerate;               /* framerate forced with -r */
     int top_field_first;
diff --git a/libavcodec/internal.h b/libavcodec/internal.h
index 000fe26..35b9630 100644
--- a/libavcodec/internal.h
+++ b/libavcodec/internal.h
@@ -173,6 +173,7 @@ typedef struct AVCodecInternal {
     int buffer_pkt_valid; // encoding: packet without data can be valid
     AVFrame *buffer_frame;
     int draining_done;
+    int showed_multi_packet_warning;
 } AVCodecInternal;
 
 struct AVCodecDefault {
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index cf85300..ef3da65 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -2461,6 +2461,12 @@ fail:
 
     av_assert0(ret <= avpkt->size);
 
+    if (!avci->showed_multi_packet_warning &&
+        ret >= 0 && ret != avpkt->size && !(avctx->codec->capabilities & AV_CODEC_CAP_SUBFRAMES)) {
+            av_log(avctx, AV_LOG_WARNING, "Multiple frames in a packet.\n");
+        avci->showed_multi_packet_warning = 1;
+    }
+
     return ret;
 }
 



More information about the ffmpeg-cvslog mailing list