Commit 588a5619 authored by Vittorio Giovara's avatar Vittorio Giovara

dxv: Parse ancillary encoder information

Header does not contain the number of channels, but rather the encoder
version, so rename the variable, and read the additional byte.
parent a9b8c638
...@@ -322,7 +322,8 @@ static int dxv_decode(AVCodecContext *avctx, void *data, ...@@ -322,7 +322,8 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
GetByteContext *gbc = &ctx->gbc; GetByteContext *gbc = &ctx->gbc;
int (*decompress_tex)(AVCodecContext *avctx); int (*decompress_tex)(AVCodecContext *avctx);
uint32_t tag; uint32_t tag;
int channels, size = 0, old_type = 0; int version_major, version_minor = 0;
int size = 0, old_type = 0;
int ret; int ret;
bytestream2_init(gbc, avpkt->data, avpkt->size); bytestream2_init(gbc, avpkt->data, avpkt->size);
...@@ -351,7 +352,8 @@ static int dxv_decode(AVCodecContext *avctx, void *data, ...@@ -351,7 +352,8 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
/* Old version does not have a real header, just size and type. */ /* Old version does not have a real header, just size and type. */
size = tag & 0x00FFFFFF; size = tag & 0x00FFFFFF;
old_type = tag >> 24; old_type = tag >> 24;
channels = old_type & 0x0F; version_major = (old_type & 0x0F) - 1;
if (old_type & 0x40) { if (old_type & 0x40) {
av_log(avctx, AV_LOG_DEBUG, "LZF compression and DXT5 texture "); av_log(avctx, AV_LOG_DEBUG, "LZF compression and DXT5 texture ");
ctx->tex_funct = ctx->texdsp.dxt5_block; ctx->tex_funct = ctx->texdsp.dxt5_block;
...@@ -371,11 +373,13 @@ static int dxv_decode(AVCodecContext *avctx, void *data, ...@@ -371,11 +373,13 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
/* New header is 12 bytes long. */ /* New header is 12 bytes long. */
if (!old_type) { if (!old_type) {
channels = bytestream2_get_byte(gbc); version_major = bytestream2_get_byte(gbc) - 1;
bytestream2_skip(gbc, 3); // unknown version_minor = bytestream2_get_byte(gbc);
bytestream2_skip(gbc, 2); // unknown
size = bytestream2_get_le32(gbc); size = bytestream2_get_le32(gbc);
} }
av_log(avctx, AV_LOG_DEBUG, "(%d channels)\n", channels); av_log(avctx, AV_LOG_DEBUG, "(version %d.%d)\n", version_major, version_minor);
if (size != bytestream2_get_bytes_left(gbc)) { if (size != bytestream2_get_bytes_left(gbc)) {
av_log(avctx, AV_LOG_ERROR, "Incomplete or invalid file (%u > %u)\n.", av_log(avctx, AV_LOG_ERROR, "Incomplete or invalid file (%u > %u)\n.",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment