Commit b2fea2fd authored by wm4's avatar 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.
parent 3c18188f
...@@ -2357,13 +2357,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo ...@@ -2357,13 +2357,6 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo
ist->pts = ist->next_pts; ist->pts = ist->next_pts;
ist->dts = ist->next_dts; 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) { switch (ist->dec_ctx->codec_type) {
case AVMEDIA_TYPE_AUDIO: case AVMEDIA_TYPE_AUDIO:
ret = decode_audio (ist, &avpkt, &got_output); ret = decode_audio (ist, &avpkt, &got_output);
......
...@@ -287,7 +287,6 @@ typedef struct InputStream { ...@@ -287,7 +287,6 @@ typedef struct InputStream {
double ts_scale; double ts_scale;
int saw_first_ts; int saw_first_ts;
int showed_multi_packet_warning;
AVDictionary *decoder_opts; AVDictionary *decoder_opts;
AVRational framerate; /* framerate forced with -r */ AVRational framerate; /* framerate forced with -r */
int top_field_first; int top_field_first;
......
...@@ -173,6 +173,7 @@ typedef struct AVCodecInternal { ...@@ -173,6 +173,7 @@ typedef struct AVCodecInternal {
int buffer_pkt_valid; // encoding: packet without data can be valid int buffer_pkt_valid; // encoding: packet without data can be valid
AVFrame *buffer_frame; AVFrame *buffer_frame;
int draining_done; int draining_done;
int showed_multi_packet_warning;
} AVCodecInternal; } AVCodecInternal;
struct AVCodecDefault { struct AVCodecDefault {
......
...@@ -2461,6 +2461,12 @@ fail: ...@@ -2461,6 +2461,12 @@ fail:
av_assert0(ret <= avpkt->size); 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; return ret;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment