mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
bethsoftvid: pass palette in side data instead of in a separate packet.
Update FATE reference to account for now non-existent palette packet. This also fixes the FATE test if frame data is not initialized in get_buffer(), so update comment in avconv accordingly.
This commit is contained in:
parent
f3a094f2da
commit
f320fb894c
2
avconv.c
2
avconv.c
@ -449,7 +449,7 @@ static int alloc_buffer(InputStream *ist, FrameBuffer **pbuf)
|
||||
/* XXX this shouldn't be needed, but some tests break without this line
|
||||
* those decoders are buggy and need to be fixed.
|
||||
* the following tests fail:
|
||||
* bethsoft-vid, cdgraphics, ansi, aasc, fraps-v1, qtrle-1bit
|
||||
* cdgraphics, ansi, aasc, fraps-v1, qtrle-1bit
|
||||
*/
|
||||
memset(buf->base[0], 128, ret);
|
||||
|
||||
|
@ -71,14 +71,23 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx,
|
||||
uint8_t * dst;
|
||||
uint8_t * frame_end;
|
||||
int remaining = avctx->width; // number of bytes remaining on a line
|
||||
const int wrap_to_next_line = vid->frame.linesize[0] - avctx->width;
|
||||
int code;
|
||||
int wrap_to_next_line;
|
||||
int code, ret;
|
||||
int yoffset;
|
||||
|
||||
if (avctx->reget_buffer(avctx, &vid->frame)) {
|
||||
av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
|
||||
return -1;
|
||||
}
|
||||
wrap_to_next_line = vid->frame.linesize[0] - avctx->width;
|
||||
|
||||
if (avpkt->side_data_elems > 0 &&
|
||||
avpkt->side_data[0].type == AV_PKT_DATA_PALETTE) {
|
||||
bytestream2_init(&vid->g, avpkt->side_data[0].data,
|
||||
avpkt->side_data[0].size);
|
||||
if ((ret = set_palette(vid)) < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bytestream2_init(&vid->g, avpkt->data, avpkt->size);
|
||||
dst = vid->frame.data[0];
|
||||
@ -86,7 +95,6 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx,
|
||||
|
||||
switch(block_type = bytestream2_get_byte(&vid->g)){
|
||||
case PALETTE_BLOCK: {
|
||||
int ret;
|
||||
*data_size = 0;
|
||||
if ((ret = set_palette(vid)) < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "error reading palette\n");
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include "internal.h"
|
||||
#include "libavcodec/bethsoftvideo.h"
|
||||
|
||||
#define BVID_PALETTE_SIZE 3 * 256
|
||||
|
||||
typedef struct BVID_DemuxContext
|
||||
{
|
||||
int nframes;
|
||||
@ -43,6 +45,7 @@ typedef struct BVID_DemuxContext
|
||||
/** video presentation time stamp.
|
||||
* delay = 16 milliseconds * (global_delay + per_frame_delay) */
|
||||
int video_pts;
|
||||
uint8_t *palette;
|
||||
|
||||
int is_finished;
|
||||
|
||||
@ -163,6 +166,14 @@ static int read_frame(BVID_DemuxContext *vid, AVIOContext *pb, AVPacket *pkt,
|
||||
pkt->stream_index = 0; // use the video decoder, which was initialized as the first stream
|
||||
pkt->pts = vid->video_pts;
|
||||
|
||||
/* if there is a new palette available, add it to packet side data */
|
||||
if (vid->palette) {
|
||||
uint8_t *pdata = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE,
|
||||
BVID_PALETTE_SIZE);
|
||||
memcpy(pdata, vid->palette, BVID_PALETTE_SIZE);
|
||||
av_freep(&vid->palette);
|
||||
}
|
||||
|
||||
vid->nframes--; // used to check if all the frames were read
|
||||
return vidbuf_nbytes;
|
||||
fail:
|
||||
@ -185,14 +196,18 @@ static int vid_read_packet(AVFormatContext *s,
|
||||
block_type = avio_r8(pb);
|
||||
switch(block_type){
|
||||
case PALETTE_BLOCK:
|
||||
avio_seek(pb, -1, SEEK_CUR); // include block type
|
||||
ret_value = av_get_packet(pb, pkt, 3 * 256 + 1);
|
||||
if(ret_value != 3 * 256 + 1){
|
||||
av_free_packet(pkt);
|
||||
if (vid->palette) {
|
||||
av_log(s, AV_LOG_WARNING, "discarding unused palette\n");
|
||||
av_freep(&vid->palette);
|
||||
}
|
||||
vid->palette = av_malloc(BVID_PALETTE_SIZE);
|
||||
if (!vid->palette)
|
||||
return AVERROR(ENOMEM);
|
||||
if (avio_read(pb, vid->palette, BVID_PALETTE_SIZE) != BVID_PALETTE_SIZE) {
|
||||
av_freep(&vid->palette);
|
||||
return AVERROR(EIO);
|
||||
}
|
||||
pkt->stream_index = 0;
|
||||
return ret_value;
|
||||
return vid_read_packet(s, pkt);
|
||||
|
||||
case FIRST_AUDIO_BLOCK:
|
||||
avio_rl16(pb);
|
||||
@ -222,6 +237,13 @@ static int vid_read_packet(AVFormatContext *s,
|
||||
}
|
||||
}
|
||||
|
||||
static int vid_read_close(AVFormatContext *s)
|
||||
{
|
||||
BVID_DemuxContext *vid = s->priv_data;
|
||||
av_freep(&vid->palette);
|
||||
return 0;
|
||||
}
|
||||
|
||||
AVInputFormat ff_bethsoftvid_demuxer = {
|
||||
.name = "bethsoftvid",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Bethesda Softworks VID format"),
|
||||
@ -229,4 +251,5 @@ AVInputFormat ff_bethsoftvid_demuxer = {
|
||||
.read_probe = vid_probe,
|
||||
.read_header = vid_read_header,
|
||||
.read_packet = vid_read_packet,
|
||||
.read_close = vid_read_close,
|
||||
};
|
||||
|
@ -1,143 +1,144 @@
|
||||
#tb 0: 1/60
|
||||
#tb 1: 1/11111
|
||||
0, 0, 0, 1, 192000, 0x00000000
|
||||
1, 0, 0, 740, 1480, 0x00000000
|
||||
0, 1, 1, 1, 192000, 0x00000000
|
||||
1, 740, 740, 740, 1480, 0x20a92bd4
|
||||
0, 5, 5, 1, 192000, 0x01a6cf45
|
||||
0, 4, 4, 1, 192000, 0x01a6cf45
|
||||
1, 1480, 1480, 925, 1850, 0xa9e48a74
|
||||
0, 10, 10, 1, 192000, 0xd07d57e9
|
||||
0, 9, 9, 1, 192000, 0xd07d57e9
|
||||
1, 2405, 2405, 740, 1480, 0x23ecd018
|
||||
0, 14, 14, 1, 192000, 0x3cb1dff5
|
||||
0, 13, 13, 1, 192000, 0x3cb1dff5
|
||||
1, 3145, 3145, 740, 1480, 0x206bb915
|
||||
0, 18, 18, 1, 192000, 0xd1aaa8fb
|
||||
0, 17, 17, 1, 192000, 0xd1aaa8fb
|
||||
1, 3885, 3885, 925, 1850, 0xb0e10e75
|
||||
0, 23, 23, 1, 192000, 0x75f526cd
|
||||
0, 22, 22, 1, 192000, 0x75f526cd
|
||||
1, 4810, 4810, 740, 1480, 0x8d9baedd
|
||||
0, 27, 27, 1, 192000, 0x0f673577
|
||||
0, 26, 26, 1, 192000, 0x0f673577
|
||||
1, 5550, 5550, 740, 1480, 0xb802aae1
|
||||
0, 31, 31, 1, 192000, 0x897b6781
|
||||
0, 30, 30, 1, 192000, 0x897b6781
|
||||
1, 6290, 6290, 740, 1480, 0xecd7b5cc
|
||||
0, 35, 35, 1, 192000, 0x81e6b7f7
|
||||
0, 34, 34, 1, 192000, 0x81e6b7f7
|
||||
1, 7030, 7030, 925, 1850, 0x16861355
|
||||
0, 40, 40, 1, 192000, 0x1f45ce61
|
||||
0, 39, 39, 1, 192000, 0x1f45ce61
|
||||
1, 7955, 7955, 740, 1480, 0xa51690bd
|
||||
0, 44, 44, 1, 192000, 0x5a0772a6
|
||||
0, 43, 43, 1, 192000, 0x5a0772a6
|
||||
1, 8695, 8695, 740, 1480, 0xdd0b90d1
|
||||
0, 48, 48, 1, 192000, 0xf78732b3
|
||||
0, 47, 47, 1, 192000, 0xf78732b3
|
||||
1, 9435, 9435, 925, 1850, 0x3ce6e333
|
||||
0, 53, 53, 1, 192000, 0x8427f9e5
|
||||
0, 52, 52, 1, 192000, 0x8427f9e5
|
||||
1, 10360, 10360, 740, 1480, 0xf8ce8ea3
|
||||
0, 57, 57, 1, 192000, 0x40473f11
|
||||
0, 56, 56, 1, 192000, 0x40473f11
|
||||
1, 11100, 11100, 740, 1480, 0xda4597af
|
||||
0, 61, 61, 1, 192000, 0x173ceebe
|
||||
0, 60, 60, 1, 192000, 0x173ceebe
|
||||
1, 11840, 11840, 740, 1480, 0x918f7cb3
|
||||
0, 65, 65, 1, 192000, 0x136b9516
|
||||
0, 64, 64, 1, 192000, 0x136b9516
|
||||
1, 12580, 12580, 925, 1850, 0xca6edb15
|
||||
0, 70, 70, 1, 192000, 0x138d11ae
|
||||
0, 69, 69, 1, 192000, 0x138d11ae
|
||||
1, 13505, 13505, 740, 1480, 0xba279597
|
||||
0, 74, 74, 1, 192000, 0x063dbff3
|
||||
0, 73, 73, 1, 192000, 0x063dbff3
|
||||
1, 14245, 14245, 740, 1480, 0xc5a38a9e
|
||||
0, 78, 78, 1, 192000, 0x5280852f
|
||||
0, 77, 77, 1, 192000, 0x5280852f
|
||||
1, 14985, 14985, 925, 1850, 0x8147eef5
|
||||
0, 83, 83, 1, 192000, 0x99943a8f
|
||||
0, 82, 82, 1, 192000, 0x99943a8f
|
||||
1, 15910, 15910, 740, 1480, 0xce2c7cb5
|
||||
0, 87, 87, 1, 192000, 0x0330a728
|
||||
0, 86, 86, 1, 192000, 0x0330a728
|
||||
1, 16650, 16650, 740, 1480, 0x4282819f
|
||||
0, 91, 91, 1, 192000, 0x5d35467d
|
||||
0, 90, 90, 1, 192000, 0x5d35467d
|
||||
1, 17390, 17390, 740, 1480, 0xbdbb8da6
|
||||
0, 95, 95, 1, 192000, 0xfd436343
|
||||
0, 94, 94, 1, 192000, 0xfd436343
|
||||
1, 18130, 18130, 925, 1850, 0xdbbeea10
|
||||
0, 100, 100, 1, 192000, 0xc323fcfe
|
||||
0, 99, 99, 1, 192000, 0xc323fcfe
|
||||
1, 19055, 19055, 740, 1480, 0xbe6a77c2
|
||||
0, 104, 104, 1, 192000, 0x2a1530a0
|
||||
0, 103, 103, 1, 192000, 0x2a1530a0
|
||||
1, 19795, 19795, 740, 1480, 0xa85c75b2
|
||||
0, 108, 108, 1, 192000, 0xbd43bb60
|
||||
0, 107, 107, 1, 192000, 0xbd43bb60
|
||||
1, 20535, 20535, 925, 1850, 0xa45bde21
|
||||
0, 113, 113, 1, 192000, 0xa47f5eab
|
||||
0, 112, 112, 1, 192000, 0xa47f5eab
|
||||
1, 21460, 21460, 740, 1480, 0x84aa7895
|
||||
0, 117, 117, 1, 192000, 0xff17f5f7
|
||||
0, 116, 116, 1, 192000, 0xff17f5f7
|
||||
1, 22200, 22200, 740, 1480, 0x147f7d9f
|
||||
0, 121, 121, 1, 192000, 0xb4140b55
|
||||
0, 120, 120, 1, 192000, 0xb4140b55
|
||||
1, 22940, 22940, 740, 1480, 0xc8e77b85
|
||||
0, 125, 125, 1, 192000, 0xb8782cc4
|
||||
0, 124, 124, 1, 192000, 0xb8782cc4
|
||||
1, 23680, 23680, 925, 1850, 0x10d4d81b
|
||||
0, 130, 130, 1, 192000, 0x92975b8b
|
||||
0, 129, 129, 1, 192000, 0x92975b8b
|
||||
1, 24605, 24605, 740, 1480, 0xb4ae8bb1
|
||||
0, 134, 134, 1, 192000, 0xf42a64d6
|
||||
0, 133, 133, 1, 192000, 0xf42a64d6
|
||||
1, 25345, 25345, 740, 1480, 0x3ef782a5
|
||||
0, 138, 138, 1, 192000, 0x2cc7077d
|
||||
0, 137, 137, 1, 192000, 0x2cc7077d
|
||||
1, 26085, 26085, 925, 1850, 0xdeebda14
|
||||
0, 143, 143, 1, 192000, 0x00080cc8
|
||||
0, 142, 142, 1, 192000, 0x00080cc8
|
||||
1, 27010, 27010, 740, 1480, 0x4c7e7bbb
|
||||
0, 147, 147, 1, 192000, 0x584b48f3
|
||||
0, 146, 146, 1, 192000, 0x584b48f3
|
||||
1, 27750, 27750, 740, 1480, 0x0e0e9198
|
||||
0, 151, 151, 1, 192000, 0xd68f57da
|
||||
0, 150, 150, 1, 192000, 0xd68f57da
|
||||
1, 28490, 28490, 740, 1480, 0x5c1f819f
|
||||
0, 155, 155, 1, 192000, 0x60158422
|
||||
0, 154, 154, 1, 192000, 0x60158422
|
||||
1, 29230, 29230, 925, 1850, 0x0e4cf6ff
|
||||
0, 160, 160, 1, 192000, 0xd7fb89e6
|
||||
0, 159, 159, 1, 192000, 0xd7fb89e6
|
||||
1, 30155, 30155, 740, 1480, 0x374388a7
|
||||
0, 164, 164, 1, 192000, 0x97f1c76a
|
||||
0, 163, 163, 1, 192000, 0x97f1c76a
|
||||
1, 30895, 30895, 740, 1480, 0xed729389
|
||||
0, 168, 168, 1, 192000, 0x46c4bb9e
|
||||
0, 167, 167, 1, 192000, 0x46c4bb9e
|
||||
1, 31635, 31635, 925, 1850, 0xe0f1e43f
|
||||
0, 173, 173, 1, 192000, 0xd32f9b66
|
||||
0, 172, 172, 1, 192000, 0xd32f9b66
|
||||
1, 32560, 32560, 740, 1480, 0x3b27839a
|
||||
0, 177, 177, 1, 192000, 0x74f43886
|
||||
0, 176, 176, 1, 192000, 0x74f43886
|
||||
1, 33300, 33300, 740, 1480, 0xe6287e94
|
||||
0, 181, 181, 1, 192000, 0x3c4e47df
|
||||
0, 180, 180, 1, 192000, 0x3c4e47df
|
||||
1, 34040, 34040, 740, 1480, 0x7e0d84b5
|
||||
0, 185, 185, 1, 192000, 0xb5ac0a58
|
||||
0, 184, 184, 1, 192000, 0xb5ac0a58
|
||||
1, 34780, 34780, 925, 1850, 0xf08bebf7
|
||||
0, 190, 190, 1, 192000, 0xcc572b31
|
||||
0, 189, 189, 1, 192000, 0xcc572b31
|
||||
1, 35705, 35705, 740, 1480, 0x94cf73a0
|
||||
0, 194, 194, 1, 192000, 0xb1739d26
|
||||
0, 193, 193, 1, 192000, 0xb1739d26
|
||||
1, 36445, 36445, 740, 1480, 0xfef384ae
|
||||
0, 198, 198, 1, 192000, 0x73da5473
|
||||
0, 197, 197, 1, 192000, 0x73da5473
|
||||
1, 37185, 37185, 925, 1850, 0x3b93e0f7
|
||||
0, 203, 203, 1, 192000, 0x5f79f5bc
|
||||
0, 202, 202, 1, 192000, 0x5f79f5bc
|
||||
1, 38110, 38110, 740, 1480, 0x28d27bae
|
||||
0, 207, 207, 1, 192000, 0x0affc0a0
|
||||
0, 206, 206, 1, 192000, 0x0affc0a0
|
||||
1, 38850, 38850, 740, 1480, 0x94d57da5
|
||||
0, 211, 211, 1, 192000, 0x2b4d5c1c
|
||||
0, 210, 210, 1, 192000, 0x2b4d5c1c
|
||||
1, 39590, 39590, 740, 1480, 0xc9327db5
|
||||
0, 215, 215, 1, 192000, 0x309b41bc
|
||||
0, 214, 214, 1, 192000, 0x309b41bc
|
||||
1, 40330, 40330, 925, 1850, 0xe781f604
|
||||
0, 220, 220, 1, 192000, 0xd42b6424
|
||||
0, 219, 219, 1, 192000, 0xd42b6424
|
||||
1, 41255, 41255, 740, 1480, 0x752f8c5b
|
||||
0, 224, 224, 1, 192000, 0x4795c948
|
||||
0, 223, 223, 1, 192000, 0x4795c948
|
||||
1, 41995, 41995, 740, 1480, 0x30068032
|
||||
0, 228, 228, 1, 192000, 0xbc1a3a8b
|
||||
0, 227, 227, 1, 192000, 0xbc1a3a8b
|
||||
1, 42735, 42735, 925, 1850, 0x7895023e
|
||||
0, 233, 233, 1, 192000, 0x16529c5b
|
||||
0, 232, 232, 1, 192000, 0x16529c5b
|
||||
1, 43660, 43660, 740, 1480, 0xa1e0a6e1
|
||||
0, 237, 237, 1, 192000, 0x6b1b31ba
|
||||
0, 236, 236, 1, 192000, 0x6b1b31ba
|
||||
1, 44400, 44400, 740, 1480, 0x6af4b500
|
||||
0, 241, 241, 1, 192000, 0x569182ce
|
||||
0, 240, 240, 1, 192000, 0x569182ce
|
||||
1, 45140, 45140, 740, 1480, 0xc26ea4c7
|
||||
0, 245, 245, 1, 192000, 0xe6ea9866
|
||||
0, 244, 244, 1, 192000, 0xe6ea9866
|
||||
1, 45880, 45880, 925, 1850, 0x16a72419
|
||||
0, 250, 250, 1, 192000, 0x102c6076
|
||||
0, 249, 249, 1, 192000, 0x102c6076
|
||||
1, 46805, 46805, 740, 1480, 0x1794aacc
|
||||
0, 254, 254, 1, 192000, 0xb29f527a
|
||||
0, 253, 253, 1, 192000, 0xb29f527a
|
||||
1, 47545, 47545, 740, 1480, 0x2ecad8d0
|
||||
0, 258, 258, 1, 192000, 0x040b4eee
|
||||
0, 257, 257, 1, 192000, 0x040b4eee
|
||||
1, 48285, 48285, 925, 1850, 0x2e645e07
|
||||
0, 263, 263, 1, 192000, 0x92574f4a
|
||||
0, 262, 262, 1, 192000, 0x92574f4a
|
||||
1, 49210, 49210, 740, 1480, 0x1c54dfe7
|
||||
0, 267, 267, 1, 192000, 0x1e8acdce
|
||||
0, 266, 266, 1, 192000, 0x1e8acdce
|
||||
1, 49950, 49950, 740, 1480, 0xbd35feec
|
||||
0, 271, 271, 1, 192000, 0x1becf516
|
||||
0, 270, 270, 1, 192000, 0x1becf516
|
||||
1, 50690, 50690, 740, 1480, 0x419403d6
|
||||
0, 275, 275, 1, 192000, 0xb62e9776
|
||||
0, 274, 274, 1, 192000, 0xb62e9776
|
||||
1, 51430, 51430, 925, 1850, 0x78699d2a
|
||||
0, 280, 280, 1, 192000, 0xed37a08e
|
||||
0, 279, 279, 1, 192000, 0xed37a08e
|
||||
1, 52355, 52355, 740, 1480, 0x74ec68e0
|
||||
0, 284, 284, 1, 192000, 0xc0719912
|
||||
0, 283, 283, 1, 192000, 0xc0719912
|
||||
1, 53095, 53095, 740, 1480, 0x76af64d9
|
||||
0, 288, 288, 1, 192000, 0x24cf7a7e
|
||||
0, 287, 287, 1, 192000, 0x24cf7a7e
|
||||
1, 53835, 53835, 925, 1850, 0x5a303d1a
|
||||
0, 293, 293, 1, 192000, 0x0307f62f
|
||||
0, 292, 292, 1, 192000, 0x0307f62f
|
||||
1, 54760, 54760, 537, 1074, 0x142ce7ba
|
||||
0, 297, 297, 1, 192000, 0x79b7417b
|
||||
0, 296, 296, 1, 192000, 0x79b7417b
|
||||
1, 55297, 55297, 925, 1850, 0x7ff682f7
|
||||
1, 56222, 56222, 740, 1480, 0xc33867e6
|
||||
|
Loading…
Reference in New Issue
Block a user