You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
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.
This commit is contained in:
7
ffmpeg.c
7
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);
|
||||
|
1
ffmpeg.h
1
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;
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user