1
0
Fork 0

avcodec/texturedsp: Add separate TextureDSPEncContext

ff_texturedspenc_init() doesn't support most of the function types
supported for decoding; add a separate context containing only pointers
for the actually supported types.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2024-01-24 18:58:17 +01:00
parent 8f791304f2
commit a3fc9fb9fb
5 changed files with 11 additions and 5 deletions

View File

@ -266,7 +266,7 @@ static int dxv_encode(AVCodecContext *avctx, AVPacket *pkt,
static av_cold int dxv_init(AVCodecContext *avctx)
{
DXVEncContext *ctx = avctx->priv_data;
TextureDSPContext texdsp;
TextureDSPEncContext texdsp;
int ret = av_image_check_size(avctx->width, avctx->height, 0, avctx);
if (ret < 0) {

View File

@ -232,7 +232,7 @@ static int hap_encode(AVCodecContext *avctx, AVPacket *pkt,
static av_cold int hap_init(AVCodecContext *avctx)
{
HapContext *ctx = avctx->priv_data;
TextureDSPContext dxtc;
TextureDSPEncContext dxtc;
int corrected_chunk_count;
int ret = av_image_check_size(avctx->width, avctx->height, 0, avctx);

View File

@ -62,6 +62,12 @@ typedef struct TextureDSPContext {
int (*dxn3dc_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block);
} TextureDSPContext;
typedef struct TextureDSPEncContext {
int (*dxt1_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block);
int (*dxt5_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block);
int (*dxt5ys_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block);
} TextureDSPEncContext;
typedef struct TextureDSPThreadContext {
union {
const uint8_t *in; // Input frame data
@ -81,7 +87,7 @@ typedef struct TextureDSPThreadContext {
} TextureDSPThreadContext;
void ff_texturedsp_init(TextureDSPContext *c);
void ff_texturedspenc_init(TextureDSPContext *c);
void ff_texturedspenc_init(TextureDSPEncContext *c);
int ff_texturedsp_decompress_thread(AVCodecContext *avctx, void *arg, int slice, int thread_nb);
int ff_texturedsp_compress_thread(AVCodecContext *avctx, void *arg, int slice, int thread_nb);

View File

@ -647,7 +647,7 @@ static int dxt5ys_block(uint8_t *dst, ptrdiff_t stride, const uint8_t *block)
return 16;
}
av_cold void ff_texturedspenc_init(TextureDSPContext *c)
av_cold void ff_texturedspenc_init(TextureDSPEncContext *c)
{
c->dxt1_block = dxt1_block;
c->dxt5_block = dxt5_block;

View File

@ -36,7 +36,7 @@
typedef struct VBNContext {
AVClass *class;
TextureDSPContext dxtc;
TextureDSPEncContext dxtc;
int format;
TextureDSPThreadContext enc;
} VBNContext;