mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Fix playback with invalid files that don't set the continuation flag for
pages that continue packets started in prior pages. Fixes issue1248 Originally committed as revision 21688 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
55a7e946f6
commit
ecc0027bc6
@ -122,6 +122,7 @@ ogg_reset (struct ogg * ogg)
|
||||
os->lastdts = AV_NOPTS_VALUE;
|
||||
os->nsegs = 0;
|
||||
os->segp = 0;
|
||||
os->incomplete = 0;
|
||||
}
|
||||
|
||||
ogg->curidx = -1;
|
||||
@ -268,7 +269,7 @@ ogg_read_page (AVFormatContext * s, int *str)
|
||||
for (i = 0; i < nsegs; i++)
|
||||
size += os->segments[i];
|
||||
|
||||
if (flags & OGG_FLAG_CONT){
|
||||
if (flags & OGG_FLAG_CONT || os->incomplete){
|
||||
if (!os->psize){
|
||||
while (os->segp < os->nsegs){
|
||||
int seg = os->segments[os->segp++];
|
||||
@ -356,6 +357,7 @@ ogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize)
|
||||
|
||||
if (!complete && os->segp == os->nsegs){
|
||||
ogg->curidx = -1;
|
||||
os->incomplete = 1;
|
||||
}
|
||||
}while (!complete);
|
||||
|
||||
@ -366,6 +368,7 @@ ogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize)
|
||||
#endif
|
||||
|
||||
ogg->curidx = idx;
|
||||
os->incomplete = 0;
|
||||
|
||||
if (os->header < 0){
|
||||
int hdr = os->codec->header (s, idx);
|
||||
|
@ -71,6 +71,7 @@ struct ogg_stream {
|
||||
int header;
|
||||
int nsegs, segp;
|
||||
uint8_t segments[255];
|
||||
int incomplete; ///< whether we're expecting a continuation in the next page
|
||||
int page_end; ///< current packet is the last one completed in the page
|
||||
void *private;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user