-static int argo_brp_read_basf(AVFormatContext *s, AVPacket *pkt,
- ArgoBRPDemuxContext *brp, int ignorepts)
-{
- ArgoASFChunkHeader *ckhdr = &brp->basf.ckhdr;
- AVCodecParameters *par;
- int64_t ret, old;
-
- if (brp->basf.index < 0)
- return 0;
-
- par = s->streams[brp->basf.index]->codecpar;
-
- if (brp->basf.blocks_read >= ckhdr->num_blocks)
- return 0;
-
- if (!ignorepts && brp->lastpts < brp->basf.lastpts)
- return 0;
-
- if ((ret = avio_tell(s->pb)) < 0)
- return ret;
-
- old = ret;
-
- if ((ret = avio_seek(s->pb, brp->basf.offset, SEEK_SET)) < 0)
- return ret;
- else if (ret != brp->basf.offset)
- return AVERROR(EIO);
-
- if ((ret = av_get_packet(s->pb, pkt, par->block_align)) < 0)
- return ret;
-
- if ((ret = avio_seek(s->pb, old, SEEK_SET)) < 0)
- return ret;
- else if (ret != old)
- return AVERROR(EIO);
-
- pkt->stream_index = brp->basf.index;
- pkt->duration = ckhdr->num_samples;
-
- brp->basf.offset += pkt->size;
- brp->basf.blocks_read += 1;
- /* Need the ceil() because ((32 * 1000) / 44100) < 1 */
- brp->basf.lastpts += ceilf((ckhdr->num_samples * 1000.0f) / ckhdr->sample_rate);
- return 1;
-}
-