1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-24 13:56:33 +02:00

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: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Tom Butterworth 2015-07-16 13:23:21 +01:00 committed by Michael Niedermayer
parent 012ba786e6
commit 6074956fa1

View File

@ -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;
}