aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2015-09-22 13:57:56 +0200
committerVittorio Giovara <vittorio.giovara@gmail.com>2015-09-24 10:56:44 +0200
commit588a5619da0d041e55b365f63d0fa9c72bdbd4d3 (patch)
tree910a1f3a0d517e427787aeef16b68ae50415931b
parenta9b8c638cfe2f82191db65e3e3a39f3b35df81f5 (diff)
downloadffmpeg-588a5619da0d041e55b365f63d0fa9c72bdbd4d3.tar.gz
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.
-rw-r--r--libavcodec/dxv.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
index dc11f38def..22148a9206 100644
--- a/libavcodec/dxv.c
+++ b/libavcodec/dxv.c
@@ -322,7 +322,8 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
GetByteContext *gbc = &ctx->gbc;
int (*decompress_tex)(AVCodecContext *avctx);
uint32_t tag;
- int channels, size = 0, old_type = 0;
+ int version_major, version_minor = 0;
+ int size = 0, old_type = 0;
int ret;
bytestream2_init(gbc, avpkt->data, avpkt->size);
@@ -351,7 +352,8 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
/* Old version does not have a real header, just size and type. */
size = tag & 0x00FFFFFF;
old_type = tag >> 24;
- channels = old_type & 0x0F;
+ version_major = (old_type & 0x0F) - 1;
+
if (old_type & 0x40) {
av_log(avctx, AV_LOG_DEBUG, "LZF compression and DXT5 texture ");
ctx->tex_funct = ctx->texdsp.dxt5_block;
@@ -371,11 +373,13 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
/* New header is 12 bytes long. */
if (!old_type) {
- channels = bytestream2_get_byte(gbc);
- bytestream2_skip(gbc, 3); // unknown
+ version_major = bytestream2_get_byte(gbc) - 1;
+ version_minor = bytestream2_get_byte(gbc);
+
+ bytestream2_skip(gbc, 2); // unknown
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)) {
av_log(avctx, AV_LOG_ERROR, "Incomplete or invalid file (%u > %u)\n.",