Commit 6074956f authored by Tom Butterworth's avatar Tom Butterworth Committed by Michael Niedermayer

avcodec/hap: move some per-stream setup into decoder init rather than per-frame

This change will reject frames with a texture type which doesn't match the stream description.
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 012ba786
......@@ -78,20 +78,19 @@ static int setup_texture(AVCodecContext *avctx, size_t length)
const char *compressorstr;
int ret;
if ((avctx->codec_tag == MKTAG('H','a','p','1') && (ctx->section_type & 0x0F) != HAP_FMT_RGBDXT1)
|| (avctx->codec_tag == MKTAG('H','a','p','5') && (ctx->section_type & 0x0F) != HAP_FMT_RGBADXT5)
|| (avctx->codec_tag == MKTAG('H','a','p','Y') && (ctx->section_type & 0x0F) != HAP_FMT_YCOCGDXT5))
return AVERROR_INVALIDDATA;
switch (ctx->section_type & 0x0F) {
case HAP_FMT_RGBDXT1:
ctx->tex_rat = 8;
ctx->tex_fun = ctx->dxtc.dxt1_block;
texture_name = "DXT1";
break;
case HAP_FMT_RGBADXT5:
ctx->tex_rat = 16;
ctx->tex_fun = ctx->dxtc.dxt5_block;
texture_name = "DXT5";
break;
case HAP_FMT_YCOCGDXT5:
ctx->tex_rat = 16;
ctx->tex_fun = ctx->dxtc.dxt5ys_block;
texture_name = "DXT5-YCoCg-scaled";
break;
default:
......@@ -211,6 +210,22 @@ static av_cold int hap_init(AVCodecContext *avctx)
ff_texturedsp_init(&ctx->dxtc);
switch (avctx->codec_tag) {
case MKTAG('H','a','p','1'):
ctx->tex_rat = 8;
ctx->tex_fun = ctx->dxtc.dxt1_block;
break;
case MKTAG('H','a','p','5'):
ctx->tex_rat = 16;
ctx->tex_fun = ctx->dxtc.dxt5_block;
break;
case MKTAG('H','a','p','Y'):
ctx->tex_rat = 16;
ctx->tex_fun = ctx->dxtc.dxt5ys_block;
break;
default:
return AVERROR_DECODER_NOT_FOUND;
}
return 0;
}
......
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