mmfdec: fix seeking

Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
Paul B Mahol 2012-12-03 18:26:43 +00:00
parent 1e85fd6a47
commit 3bb3cddd96
3 changed files with 43 additions and 26 deletions

View File

@ -195,7 +195,7 @@ OBJS-$(CONFIG_MJPEG_MUXER) += rawenc.o
OBJS-$(CONFIG_MLP_DEMUXER) += rawdec.o OBJS-$(CONFIG_MLP_DEMUXER) += rawdec.o
OBJS-$(CONFIG_MLP_MUXER) += rawenc.o OBJS-$(CONFIG_MLP_MUXER) += rawenc.o
OBJS-$(CONFIG_MM_DEMUXER) += mm.o OBJS-$(CONFIG_MM_DEMUXER) += mm.o
OBJS-$(CONFIG_MMF_DEMUXER) += mmf.o pcm.o OBJS-$(CONFIG_MMF_DEMUXER) += mmf.o
OBJS-$(CONFIG_MMF_MUXER) += mmf.o OBJS-$(CONFIG_MMF_MUXER) += mmf.o
OBJS-$(CONFIG_MOV_DEMUXER) += mov.o isom.o mov_chan.o OBJS-$(CONFIG_MOV_DEMUXER) += mov.o isom.o mov_chan.o
OBJS-$(CONFIG_MOV_MUXER) += movenc.o isom.o avc.o \ OBJS-$(CONFIG_MOV_MUXER) += movenc.o isom.o avc.o \

View File

@ -28,7 +28,7 @@
typedef struct { typedef struct {
int64_t atrpos, atsqpos, awapos; int64_t atrpos, atsqpos, awapos;
int64_t data_size; int64_t data_end;
} MMFContext; } MMFContext;
static const int mmf_rates[] = { 4000, 8000, 11025, 22050, 44100 }; static const int mmf_rates[] = { 4000, 8000, 11025, 22050, 44100 };
@ -241,7 +241,7 @@ static int mmf_read_header(AVFormatContext *s)
av_log(s, AV_LOG_ERROR, "Unexpected SMAF chunk %08x\n", tag); av_log(s, AV_LOG_ERROR, "Unexpected SMAF chunk %08x\n", tag);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
mmf->data_size = size; mmf->data_end = avio_tell(pb) + size;
st = avformat_new_stream(s, NULL); st = avformat_new_stream(s, NULL);
if (!st) if (!st)
@ -266,19 +266,19 @@ static int mmf_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
MMFContext *mmf = s->priv_data; MMFContext *mmf = s->priv_data;
int ret, size; int64_t left, size;
int ret;
if (url_feof(s->pb) || !mmf->data_size) left = mmf->data_end - avio_tell(s->pb);
size = FFMIN(left, MAX_SIZE);
if (url_feof(s->pb) || size <= 0)
return AVERROR_EOF; return AVERROR_EOF;
size = FFMIN(MAX_SIZE, mmf->data_size);
ret = av_get_packet(s->pb, pkt, size); ret = av_get_packet(s->pb, pkt, size);
if (ret < 0) if (ret < 0)
return ret; return ret;
pkt->stream_index = 0; pkt->stream_index = 0;
mmf->data_size -= ret;
return ret; return ret;
} }
@ -291,7 +291,7 @@ AVInputFormat ff_mmf_demuxer = {
.read_probe = mmf_probe, .read_probe = mmf_probe,
.read_header = mmf_read_header, .read_header = mmf_read_header,
.read_packet = mmf_read_packet, .read_packet = mmf_read_packet,
.read_seek = ff_pcm_read_seek, .flags = AVFMT_GENERIC_INDEX,
}; };
#endif #endif
#if CONFIG_MMF_MUXER #if CONFIG_MMF_MUXER

View File

@ -1,27 +1,44 @@
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 81 size: 4096 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 81 size: 4096
ret:-1 st:-1 flags:0 ts:-1.000000 ret: 0 st:-1 flags:0 ts:-1.000000
ret:-1 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 81 size: 4096
ret:-1 st: 0 flags:0 ts: 0.788345 ret: 0 st:-1 flags:1 ts: 1.894167
ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret: 0 st: 0 flags:0 ts: 0.788345
ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret:-1 st: 0 flags:1 ts:-0.317506 ret:-1 st: 0 flags:1 ts:-0.317506
ret:-1 st:-1 flags:0 ts: 2.576668 ret:-1 st:-1 flags:0 ts: 2.576668
ret:-1 st:-1 flags:1 ts: 1.470835 ret: 0 st:-1 flags:1 ts: 1.470835
ret:-1 st: 0 flags:0 ts: 0.365011 ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret: 0 st: 0 flags:0 ts: 0.365011
ret: 0 st: 0 flags:1 dts: 0.371519 pts: 0.371519 pos: 8273 size: 4096
ret:-1 st: 0 flags:1 ts:-0.740839 ret:-1 st: 0 flags:1 ts:-0.740839
ret:-1 st:-1 flags:0 ts: 2.153336 ret:-1 st:-1 flags:0 ts: 2.153336
ret:-1 st:-1 flags:1 ts: 1.047503 ret: 0 st:-1 flags:1 ts: 1.047503
ret:-1 st: 0 flags:0 ts:-0.058322 ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret:-1 st: 0 flags:1 ts: 2.835828 ret: 0 st: 0 flags:0 ts:-0.058322
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 81 size: 4096
ret: 0 st: 0 flags:1 ts: 2.835828
ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret:-1 st:-1 flags:0 ts: 1.730004 ret:-1 st:-1 flags:0 ts: 1.730004
ret:-1 st:-1 flags:1 ts: 0.624171 ret: 0 st:-1 flags:1 ts: 0.624171
ret:-1 st: 0 flags:0 ts:-0.481655 ret: 0 st: 0 flags:1 dts: 0.557279 pts: 0.557279 pos: 12369 size: 4096
ret:-1 st: 0 flags:1 ts: 2.412494 ret: 0 st: 0 flags:0 ts:-0.481655
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 81 size: 4096
ret: 0 st: 0 flags:1 ts: 2.412494
ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret:-1 st:-1 flags:0 ts: 1.306672 ret:-1 st:-1 flags:0 ts: 1.306672
ret:-1 st:-1 flags:1 ts: 0.200839 ret: 0 st:-1 flags:1 ts: 0.200839
ret:-1 st: 0 flags:0 ts:-0.904989 ret: 0 st: 0 flags:1 dts: 0.185760 pts: 0.185760 pos: 4177 size: 4096
ret:-1 st: 0 flags:1 ts: 1.989184 ret: 0 st: 0 flags:0 ts:-0.904989
ret:-1 st:-1 flags:0 ts: 0.883340 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 81 size: 4096
ret: 0 st: 0 flags:1 ts: 1.989184
ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret: 0 st:-1 flags:0 ts: 0.883340
ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret:-1 st:-1 flags:1 ts:-0.222493 ret:-1 st:-1 flags:1 ts:-0.222493
ret:-1 st: 0 flags:0 ts: 2.671678 ret:-1 st: 0 flags:0 ts: 2.671678
ret:-1 st: 0 flags:1 ts: 1.565850 ret: 0 st: 0 flags:1 ts: 1.565850
ret:-1 st:-1 flags:0 ts: 0.460008 ret: 0 st: 0 flags:1 dts: 0.928798 pts: 0.928798 pos: 20561 size: 2048
ret: 0 st:-1 flags:0 ts: 0.460008
ret: 0 st: 0 flags:1 dts: 0.557279 pts: 0.557279 pos: 12369 size: 4096
ret:-1 st:-1 flags:1 ts:-0.645825 ret:-1 st:-1 flags:1 ts:-0.645825