- ret = process_ipmovie_chunk(ipmovie, pb, pkt);
- if (ret == CHUNK_BAD)
- ret = AVERROR_INVALIDDATA;
- else if (ret == CHUNK_EOF)
- ret = AVERROR(EIO);
- else if (ret == CHUNK_NOMEM)
- ret = AVERROR(ENOMEM);
- else if (ret == CHUNK_END || ret == CHUNK_SHUTDOWN)
- ret = AVERROR_EOF;
- else if (ret == CHUNK_VIDEO)
- ret = 0;
- else if (ret == CHUNK_INIT_VIDEO || ret == CHUNK_INIT_AUDIO)
- continue;
- else
- continue;
-
- return ret;
+ ret = process_ipmovie_chunk(ipmovie, pb, pkt);
+ /* dispatch the first of any pending packets */
+ if ((ret == CHUNK_VIDEO) || (ret == CHUNK_AUDIO_ONLY))
+ ret = load_ipmovie_packet(ipmovie, pb, pkt);
+
+ if (ret == CHUNK_BAD)
+ ret = AVERROR_INVALIDDATA;
+ else if (ret == CHUNK_EOF)
+ ret = AVERROR(EIO);
+ else if (ret == CHUNK_NOMEM)
+ ret = AVERROR(ENOMEM);
+ else if (ret == CHUNK_END || ret == CHUNK_SHUTDOWN)
+ ret = AVERROR_EOF;
+ else if (ret == CHUNK_HAVE_PACKET)
+ ret = 0;
+ else if (ret == CHUNK_INIT_VIDEO || ret == CHUNK_INIT_AUDIO)
+ continue;
+ else
+ continue;
+
+ return ret;