X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fogg2.c;h=a3739556e4412b66596a16be5ae0b2b1f8183256;hb=87e8788680e16c51f6048af26f3f7830c35207a5;hp=9e6e1539b648d0fadad2bd835df801aab5eb16ec;hpb=191e8ca75279073699e0c0f25128b2b2088d1cbb;p=ffmpeg diff --git a/libavformat/ogg2.c b/libavformat/ogg2.c index 9e6e1539b64..a3739556e44 100644 --- a/libavformat/ogg2.c +++ b/libavformat/ogg2.c @@ -67,8 +67,8 @@ ogg_write_trailer (AVFormatContext * avfcontext) AVOutputFormat ogg_muxer = { "ogg", - "Ogg Vorbis", - "audio/x-vorbis", + "Ogg format", + "application/ogg", "ogg", sizeof (OggContext), CODEC_ID_VORBIS, @@ -90,6 +90,7 @@ ogg_save (AVFormatContext * s) ost->pos = url_ftell (&s->pb);; ost->curidx = ogg->curidx; ost->next = ogg->state; + ost->nstreams = ogg->nstreams; memcpy(ost->streams, ogg->streams, ogg->nstreams * sizeof(*ogg->streams)); for (i = 0; i < ogg->nstreams; i++){ @@ -123,8 +124,9 @@ ogg_restore (AVFormatContext * s, int discard) url_fseek (bc, ost->pos, SEEK_SET); ogg->curidx = ost->curidx; - memcpy (ogg->streams, ost->streams, - ogg->nstreams * sizeof (*ogg->streams)); + ogg->nstreams = ost->nstreams; + memcpy(ogg->streams, ost->streams, + ost->nstreams * sizeof(*ogg->streams)); } av_free (ost); @@ -482,7 +484,8 @@ ogg_get_length (AVFormatContext * s) url_fseek (&s->pb, end, SEEK_SET); while (!ogg_read_page (s, &i)){ - if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0) + if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && + ogg->streams[i].codec) idx = i; } @@ -494,7 +497,7 @@ ogg_get_length (AVFormatContext * s) ogg->size = size; ogg_restore (s, 0); ogg_save (s); - while (ogg_read_page (s, &i)) { + while (!ogg_read_page (s, &i)) { if (i == idx && ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0) break; } @@ -605,7 +608,7 @@ ogg_read_seek (AVFormatContext * s, int stream_index, int64_t target_ts, pts = ogg_gptopts (s, i, ogg->streams[i].granule); p = url_ftell (bc); - if (ABS (pts - target_ts) * st->time_base.num < st->time_base.den) + if (FFABS (pts - target_ts) * st->time_base.num < st->time_base.den) break; if (pts > target_ts){ @@ -633,7 +636,7 @@ ogg_read_seek (AVFormatContext * s, int stream_index, int64_t target_ts, } } - if (ABS (pts - target_ts) * st->time_base.num < st->time_base.den){ + if (FFABS (pts - target_ts) * st->time_base.num < st->time_base.den){ ogg_restore (s, 1); ogg_reset (ogg); }else{ @@ -673,8 +676,6 @@ ogg_read_timestamp (AVFormatContext * s, int stream_index, int64_t * pos_arg, static int ogg_probe(AVProbeData *p) { - if (p->buf_size < 6) - return 0; if (p->buf[0] == 'O' && p->buf[1] == 'g' && p->buf[2] == 'g' && p->buf[3] == 'S' && p->buf[4] == 0x0 && p->buf[5] <= 0x7 )