mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-26 01:02:33 +00:00
avcodec/dxtory: add frame threads support
This commit is contained in:
parent
a198b508e3
commit
1d1411822a
@ -31,6 +31,7 @@
|
||||
#include "get_bits.h"
|
||||
#include "internal.h"
|
||||
#include "unary.h"
|
||||
#include "thread.h"
|
||||
|
||||
static int64_t get_raw_size(enum AVPixelFormat fmt, int width, int height)
|
||||
{
|
||||
@ -92,6 +93,7 @@ static int dxtory_decode_v1_rgb(AVCodecContext *avctx, AVFrame *pic,
|
||||
const uint8_t *src, int src_size,
|
||||
int id, int bpp, uint32_t vflipped)
|
||||
{
|
||||
ThreadFrame frame = { .f = pic };
|
||||
int h;
|
||||
uint8_t *dst;
|
||||
int ret;
|
||||
@ -102,7 +104,7 @@ static int dxtory_decode_v1_rgb(AVCodecContext *avctx, AVFrame *pic,
|
||||
}
|
||||
|
||||
avctx->pix_fmt = id;
|
||||
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
|
||||
if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
do_vflip(avctx, pic, vflipped);
|
||||
@ -123,6 +125,7 @@ static int dxtory_decode_v1_410(AVCodecContext *avctx, AVFrame *pic,
|
||||
const uint8_t *src, int src_size,
|
||||
uint32_t vflipped)
|
||||
{
|
||||
ThreadFrame frame = { .f = pic };
|
||||
int h, w;
|
||||
uint8_t *Y1, *Y2, *Y3, *Y4, *U, *V;
|
||||
int height, width, hmargin, vmargin;
|
||||
@ -135,7 +138,7 @@ static int dxtory_decode_v1_410(AVCodecContext *avctx, AVFrame *pic,
|
||||
}
|
||||
|
||||
avctx->pix_fmt = AV_PIX_FMT_YUV410P;
|
||||
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
|
||||
if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
do_vflip(avctx, pic, vflipped);
|
||||
@ -218,6 +221,7 @@ static int dxtory_decode_v1_420(AVCodecContext *avctx, AVFrame *pic,
|
||||
const uint8_t *src, int src_size,
|
||||
uint32_t vflipped)
|
||||
{
|
||||
ThreadFrame frame = { .f = pic };
|
||||
int h, w;
|
||||
uint8_t *Y1, *Y2, *U, *V;
|
||||
int height, width, hmargin, vmargin;
|
||||
@ -230,7 +234,7 @@ static int dxtory_decode_v1_420(AVCodecContext *avctx, AVFrame *pic,
|
||||
}
|
||||
|
||||
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
|
||||
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
|
||||
if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
do_vflip(avctx, pic, vflipped);
|
||||
@ -290,6 +294,7 @@ static int dxtory_decode_v1_444(AVCodecContext *avctx, AVFrame *pic,
|
||||
const uint8_t *src, int src_size,
|
||||
uint32_t vflipped)
|
||||
{
|
||||
ThreadFrame frame = { .f = pic };
|
||||
int h, w;
|
||||
uint8_t *Y, *U, *V;
|
||||
int ret;
|
||||
@ -300,7 +305,7 @@ static int dxtory_decode_v1_444(AVCodecContext *avctx, AVFrame *pic,
|
||||
}
|
||||
|
||||
avctx->pix_fmt = AV_PIX_FMT_YUV444P;
|
||||
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
|
||||
if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
do_vflip(avctx, pic, vflipped);
|
||||
@ -425,6 +430,7 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic,
|
||||
enum AVPixelFormat fmt,
|
||||
uint32_t vflipped)
|
||||
{
|
||||
ThreadFrame frame = { .f = pic };
|
||||
GetByteContext gb, gb_check;
|
||||
GetBitContext gb2;
|
||||
int nslices, slice, line = 0;
|
||||
@ -451,7 +457,7 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic,
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
avctx->pix_fmt = fmt;
|
||||
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
|
||||
if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
do_vflip(avctx, pic, vflipped);
|
||||
@ -876,5 +882,5 @@ AVCodec ff_dxtory_decoder = {
|
||||
.type = AVMEDIA_TYPE_VIDEO,
|
||||
.id = AV_CODEC_ID_DXTORY,
|
||||
.decode = decode_frame,
|
||||
.capabilities = AV_CODEC_CAP_DR1,
|
||||
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user