Improve hls VOD mode hls performance problem.
[ffmpeg.git] / libavformat / act.c
index a89fae7..fe67411 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * ACT file format muxer/demuxer
+ * ACT file format demuxer
  * Copyright (c) 2007-2008 Vladimir Voroshilov
  *
  * This file is part of FFmpeg.
@@ -20,6 +20,7 @@
  */
 #include "avformat.h"
 #include "riff.h"
+#include "internal.h"
 #include "libavcodec/get_bits.h"
 
 #define CHUNK_SIZE 512
@@ -41,7 +42,7 @@ static int probe(AVProbeData *p)
         (AV_RL32(&p->buf[16]) != 16))
     return 0;
 
-    //We cant be sure that this is ACT and not regular WAV
+    //We can't be sure that this is ACT and not regular WAV
     if (p->buf_size<512)
         return 0;
 
@@ -59,49 +60,48 @@ static int probe(AVProbeData *p)
     return AVPROBE_SCORE_MAX;
 }
 
-static int read_header(AVFormatContext *s,
-                           AVFormatParameters *ap)
+static int read_header(AVFormatContext *s)
 {
     ACTContext* ctx = s->priv_data;
-    ByteIOContext *pb = s->pb;
+    AVIOContext *pb = s->pb;
     int size;
     AVStream* st;
 
     int min,sec,msec;
 
-    st=av_new_stream(s, 0);
+    st = avformat_new_stream(s, NULL);
     if (!st)
         return AVERROR(ENOMEM);
 
-    url_fskip(pb, 16);
-    size=get_le32(pb);
-    ff_get_wav_header(pb, st->codec, size);
+    avio_skip(pb, 16);
+    size=avio_rl32(pb);
+    ff_get_wav_header(s, pb, st->codecpar, size, 0);
 
     /*
       8000Hz (Fine-rec) file format has 10 bytes long
       packets with 10ms of sound data in them
     */
-    if (st->codec->sample_rate != 8000) {
-        av_log(s, AV_LOG_ERROR, "Sample rate %d is not supported.\n", st->codec->sample_rate);
-        return AVERROR_NOFMT;
+    if (st->codecpar->sample_rate != 8000) {
+        av_log(s, AV_LOG_ERROR, "Sample rate %d is not supported.\n", st->codecpar->sample_rate);
+        return AVERROR_INVALIDDATA;
     }
 
-    st->codec->frame_size=80;
-    st->codec->channels=1;
-    av_set_pts_info(st, 64, 1, 100);
+    st->codecpar->frame_size=80;
+    st->codecpar->channels=1;
+    avpriv_set_pts_info(st, 64, 1, 100);
 
-    st->codec->codec_id=CODEC_ID_G729;
+    st->codecpar->codec_id=AV_CODEC_ID_G729;
 
-    url_fseek(pb, 257, SEEK_SET);
-    msec=get_le16(pb);
-    sec=get_byte(pb);
-    min=get_le32(pb);
+    avio_seek(pb, 257, SEEK_SET);
+    msec=avio_rl16(pb);
+    sec=avio_r8(pb);
+    min=avio_rl32(pb);
 
-    st->duration = av_rescale(1000*(min*60+sec)+msec, st->codec->sample_rate, 1000 * st->codec->frame_size);
+    st->duration = av_rescale(1000*(min*60+sec)+msec, st->codecpar->sample_rate, 1000 * st->codecpar->frame_size);
 
     ctx->bytes_left_in_chunk=CHUNK_SIZE;
 
-    url_fseek(pb, 512, SEEK_SET);
+    avio_seek(pb, 512, SEEK_SET);
 
     return 0;
 }
@@ -111,12 +111,12 @@ static int read_packet(AVFormatContext *s,
                           AVPacket *pkt)
 {
     ACTContext *ctx = s->priv_data;
-    ByteIOContext *pb = s->pb;
+    AVIOContext *pb = s->pb;
     int ret;
-    int frame_size=s->streams[0]->codec->sample_rate==8000?10:22;
+    int frame_size=s->streams[0]->codecpar->sample_rate==8000?10:22;
 
 
-    if(s->streams[0]->codec->sample_rate==8000)
+    if(s->streams[0]->codecpar->sample_rate==8000)
         ret=av_new_packet(pkt, 10);
     else
         ret=av_new_packet(pkt, 11);
@@ -124,9 +124,9 @@ static int read_packet(AVFormatContext *s,
     if(ret)
         return ret;
 
-    if(s->streams[0]->codec->sample_rate==4400 && !ctx->second_packet)
+    if(s->streams[0]->codecpar->sample_rate==4400 && !ctx->second_packet)
     {
-        ret = get_buffer(pb, ctx->audio_buffer, frame_size);
+        ret = avio_read(pb, ctx->audio_buffer, frame_size);
 
         if(ret<0)
             return ret;
@@ -147,7 +147,7 @@ static int read_packet(AVFormatContext *s,
 
         ctx->second_packet=1;
     }
-    else if(s->streams[0]->codec->sample_rate==4400 && ctx->second_packet)
+    else if(s->streams[0]->codecpar->sample_rate==4400 && ctx->second_packet)
     {
         pkt->data[0]=ctx->audio_buffer[5];
         pkt->data[1]=ctx->audio_buffer[17];
@@ -165,7 +165,7 @@ static int read_packet(AVFormatContext *s,
     }
     else // 8000 Hz
     {
-        ret = get_buffer(pb, ctx->audio_buffer, frame_size);
+        ret = avio_read(pb, ctx->audio_buffer, frame_size);
 
         if(ret<0)
             return ret;
@@ -188,7 +188,7 @@ static int read_packet(AVFormatContext *s,
 
     if(ctx->bytes_left_in_chunk < frame_size)
     {
-        url_fskip(pb, ctx->bytes_left_in_chunk);
+        avio_skip(pb, ctx->bytes_left_in_chunk);
         ctx->bytes_left_in_chunk=CHUNK_SIZE;
     }
 
@@ -198,10 +198,10 @@ static int read_packet(AVFormatContext *s,
 }
 
 AVInputFormat ff_act_demuxer = {
-    "act",
-    "ACT Voice file format",
-    sizeof(ACTContext),
-    probe,
-    read_header,
-    read_packet
+    .name           = "act",
+    .long_name      = "ACT Voice file format",
+    .priv_data_size = sizeof(ACTContext),
+    .read_probe     = probe,
+    .read_header    = read_header,
+    .read_packet    = read_packet,
 };