From 2a26520a97cffeab6b803ce2742ece827e003781 Mon Sep 17 00:00:00 2001 From: Tobias Bindhammer Date: Tue, 5 Oct 2010 12:14:30 +0000 Subject: Cosmetics, lots of. Originally committed as revision 25348 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/a64.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'libavformat/a64.c') diff --git a/libavformat/a64.c b/libavformat/a64.c index 66fbcaee40..2dc475cd5f 100644 --- a/libavformat/a64.c +++ b/libavformat/a64.c @@ -86,7 +86,7 @@ static int a64_write_packet(struct AVFormatContext *s, AVPacket *pkt) * the data for colram from/to ram first and waste too much time. If we interleave and send the * charset beforehand, we assemble a new charset chunk by chunk, write current screen data to * screen-ram to be displayed and decode the colram directly to colram-location $d800 during - * the overscan, while reading directly from source + * the overscan, while reading directly from source. * This is the only way so far, to achieve 25fps on c64 */ if(avctx->extradata) { /* fetch values from extradata */ @@ -96,33 +96,35 @@ static int a64_write_packet(struct AVFormatContext *s, AVPacket *pkt) frame_size = AV_RB32(avctx->extradata + 12); /* TODO: sanity checks? */ - } - else { + } else { av_log(avctx, AV_LOG_ERROR, "extradata not set\n"); return AVERROR(EINVAL); } + ch_chunksize=charset_size/lifetime; /* TODO: check if charset/size is % lifetime, but maybe check in codec */ + if(pkt->data) num_frames = lifetime; else num_frames = c->prev_frame_count; + for(i = 0; i < num_frames; i++) { if(pkt->data) { /* if available, put newest charset chunk into buffer */ put_buffer(s->pb, pkt->data + ch_chunksize * i, ch_chunksize); - } - else { + } else { /* a bit ugly, but is there an alternative to put many zeros? */ for(j = 0; j < ch_chunksize; j++) put_byte(s->pb, 0); } + if(c->prev_pkt.data) { /* put frame (screen + colram) from last packet into buffer */ put_buffer(s->pb, c->prev_pkt.data + charset_size + frame_size * i, frame_size); - } - else { + } else { /* a bit ugly, but is there an alternative to put many zeros? */ for(j = 0; j < frame_size; j++) put_byte(s->pb, 0); } } + /* backup current packet for next turn */ if(pkt->data) { /* no backup packet yet? create one! */ @@ -136,6 +138,7 @@ static int a64_write_packet(struct AVFormatContext *s, AVPacket *pkt) return AVERROR(ENOMEM); } } + c->prev_frame_count = frame_count; break; } -- cgit v1.2.3