diff options
-rw-r--r-- | libavcodec/bethsoftvideo.c | 8 | ||||
-rw-r--r-- | libavcodec/bethsoftvideo.h | 10 | ||||
-rw-r--r-- | libavformat/bethsoftvid.c | 16 |
3 files changed, 16 insertions, 18 deletions
diff --git a/libavcodec/bethsoftvideo.c b/libavcodec/bethsoftvideo.c index a59743789a..f2d332b1a3 100644 --- a/libavcodec/bethsoftvideo.c +++ b/libavcodec/bethsoftvideo.c @@ -51,7 +51,7 @@ static void set_palette(AVFrame * frame, uint8_t * palette_buffer) { uint32_t * palette = (uint32_t *)frame->data[1]; int a; - for(a = 0; a < VID_PALETTE_NUMCOLORS; a++) + for(a = 0; a < 256; a++) { palette[a] = AV_RB24(&palette_buffer[a * 3]) * 4; // multiply all colors by 4 } @@ -84,7 +84,7 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, switch(block_type = *buf++) { case PALETTE_BLOCK: set_palette(&vid->frame, buf); return 0; - case VIDEO_YOFFSET_DIFFERENCE_FRAME_BLOCK: + case VIDEO_YOFF_P_FRAME: yoffset = bytestream_get_le16(&buf); if(yoffset >= avctx->height) { return -1; } destination += vid->frame.linesize[0] * yoffset; @@ -99,7 +99,7 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, while(length > line_remaining) { if(rle_num_bytes < 0x80) { bytestream_get_buffer(&buf, destination, line_remaining); } - else if(block_type == VIDEO_FULL_FRAME_BLOCK) { memset(destination, buf[0], line_remaining); } + else if(block_type == VIDEO_I_FRAME) { memset(destination, buf[0], line_remaining); } length -= line_remaining; // decrement the number of bytes to be copied destination += line_remaining + wrap_to_next_line; // skip over extra bytes at end of frame line_remaining = avctx->width; @@ -108,7 +108,7 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, // copy any remaining bytes after / if line overflows if(rle_num_bytes < 0x80) { bytestream_get_buffer(&buf, destination, length); } - else if(block_type == VIDEO_FULL_FRAME_BLOCK) { memset(destination, *buf++, length); } + else if(block_type == VIDEO_I_FRAME) { memset(destination, *buf++, length); } line_remaining -= length; destination += length; } diff --git a/libavcodec/bethsoftvideo.h b/libavcodec/bethsoftvideo.h index b650489698..eb584a44c3 100644 --- a/libavcodec/bethsoftvideo.h +++ b/libavcodec/bethsoftvideo.h @@ -1,12 +1,10 @@ -#define VID_PALETTE_NUMCOLORS 256 - enum BethsoftVidBlockType { PALETTE_BLOCK = 0x02, FIRST_AUDIO_BLOCK = 0x7c, AUDIO_BLOCK = 0x7d, - VIDEO_FULL_FRAME_BLOCK = 0x03, - VIDEO_DIFFERENCE_FRAME_BLOCK = 0x01, - VIDEO_YOFFSET_DIFFERENCE_FRAME_BLOCK = 0x04, - FINISHED_BLOCK = 0x14, + VIDEO_I_FRAME = 0x03, + VIDEO_P_FRAME = 0x01, + VIDEO_YOFF_P_FRAME = 0x04, + EOF_BLOCK = 0x14, }; diff --git a/libavformat/bethsoftvid.c b/libavformat/bethsoftvid.c index df338906c8..8d5f387c2d 100644 --- a/libavformat/bethsoftvid.c +++ b/libavformat/bethsoftvid.c @@ -119,7 +119,7 @@ static int read_frame(BVID_DemuxContext *vid, ByteIOContext *pb, AVPacket *pkt, vid->video_pts += vid->bethsoft_global_delay + get_le16(pb); // set the y offset if it exists (decoder header data should be in data section) - if(block_type == VIDEO_YOFFSET_DIFFERENCE_FRAME_BLOCK){ + if(block_type == VIDEO_YOFF_P_FRAME){ if(get_buffer(pb, &vidbuf_start[vidbuf_nbytes], 2) != 2) goto fail; vidbuf_nbytes += 2; @@ -134,7 +134,7 @@ static int read_frame(BVID_DemuxContext *vid, ByteIOContext *pb, AVPacket *pkt, vidbuf_start[vidbuf_nbytes++] = rle_num_bytes; if(rle_num_bytes > 0x80){ // rle sequence - if(block_type == VIDEO_FULL_FRAME_BLOCK) + if(block_type == VIDEO_I_FRAME) vidbuf_start[vidbuf_nbytes++] = get_byte(pb); bytes_copied += rle_num_bytes - 0x80; } else if(rle_num_bytes){ // plain sequence @@ -186,8 +186,8 @@ static int vid_read_packet(AVFormatContext *s, switch(block_type){ case PALETTE_BLOCK: url_fseek(pb, -1, SEEK_CUR); // include block type - ret_value = av_get_packet(pb, pkt, 3 * VID_PALETTE_NUMCOLORS + 1); - if(ret_value != 3 * VID_PALETTE_NUMCOLORS + 1){ + ret_value = av_get_packet(pb, pkt, 3 * 256 + 1); + if(ret_value != 3 * 256 + 1){ av_free_packet(pkt); return AVERROR_IO; } @@ -205,13 +205,13 @@ static int vid_read_packet(AVFormatContext *s, pkt->stream_index = 1; return (ret_value != audio_length ? AVERROR_IO : ret_value); - case VIDEO_DIFFERENCE_FRAME_BLOCK: - case VIDEO_YOFFSET_DIFFERENCE_FRAME_BLOCK: - case VIDEO_FULL_FRAME_BLOCK: + case VIDEO_P_FRAME: + case VIDEO_YOFF_P_FRAME: + case VIDEO_I_FRAME: return read_frame(vid, pb, pkt, block_type, s, s->streams[0]->codec->width * s->streams[0]->codec->height); - case FINISHED_BLOCK: + case EOF_BLOCK: if(vid->nframes != 0) av_log(s, AV_LOG_VERBOSE, "reached terminating character but not all frames read.\n"); vid->is_finished = 1; |