| @@ -130,6 +130,7 @@ static int dsf_read_header(AVFormatContext *s) | |||||
| } | } | ||||
| st->codecpar->block_align *= st->codecpar->channels; | st->codecpar->block_align *= st->codecpar->channels; | ||||
| st->codecpar->bit_rate = st->codecpar->channels * st->codecpar->sample_rate * 8LL; | st->codecpar->bit_rate = st->codecpar->channels * st->codecpar->sample_rate * 8LL; | ||||
| avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||||
| avio_skip(pb, 4); | avio_skip(pb, 4); | ||||
| /* data chunk */ | /* data chunk */ | ||||
| @@ -150,11 +151,11 @@ static int dsf_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| AVIOContext *pb = s->pb; | AVIOContext *pb = s->pb; | ||||
| AVStream *st = s->streams[0]; | AVStream *st = s->streams[0]; | ||||
| int64_t pos = avio_tell(pb); | int64_t pos = avio_tell(pb); | ||||
| int ret; | |||||
| if (pos >= dsf->data_end) | if (pos >= dsf->data_end) | ||||
| return AVERROR_EOF; | return AVERROR_EOF; | ||||
| pkt->stream_index = 0; | |||||
| if (dsf->data_size > dsf->audio_size) { | if (dsf->data_size > dsf->audio_size) { | ||||
| int last_packet = pos == (dsf->data_end - st->codecpar->block_align); | int last_packet = pos == (dsf->data_end - st->codecpar->block_align); | ||||
| @@ -180,10 +181,22 @@ static int dsf_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| avio_skip(pb, skip_size / st->codecpar->channels); | avio_skip(pb, skip_size / st->codecpar->channels); | ||||
| } | } | ||||
| pkt->pos = pos; | |||||
| pkt->stream_index = 0; | |||||
| pkt->pts = (pos - s->internal->data_offset) / st->codecpar->channels; | |||||
| pkt->duration = packet_size / st->codecpar->channels; | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| } | } | ||||
| return av_get_packet(pb, pkt, FFMIN(dsf->data_end - pos, st->codecpar->block_align)); | |||||
| ret = av_get_packet(pb, pkt, FFMIN(dsf->data_end - pos, st->codecpar->block_align)); | |||||
| if (ret < 0) | |||||
| return ret; | |||||
| pkt->stream_index = 0; | |||||
| pkt->pts = (pos - s->internal->data_offset) / st->codecpar->channels; | |||||
| pkt->duration = st->codecpar->block_align / st->codecpar->channels; | |||||
| return 0; | |||||
| } | } | ||||
| AVInputFormat ff_dsf_demuxer = { | AVInputFormat ff_dsf_demuxer = { | ||||