|
|
|
@ -33,6 +33,7 @@ |
|
|
|
|
#include "huffyuvdsp.h" |
|
|
|
|
#include "internal.h" |
|
|
|
|
#include "mathops.h" |
|
|
|
|
#include "thread.h" |
|
|
|
|
|
|
|
|
|
typedef struct VBLEContext { |
|
|
|
|
AVCodecContext *avctx; |
|
|
|
@ -125,6 +126,7 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, |
|
|
|
|
int offset = 0; |
|
|
|
|
int width_uv = avctx->width / 2, height_uv = avctx->height / 2; |
|
|
|
|
int ret; |
|
|
|
|
ThreadFrame frame = { .f = data }; |
|
|
|
|
|
|
|
|
|
if (avpkt->size < 4 || avpkt->size - 4 > INT_MAX/8) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "Invalid packet size\n"); |
|
|
|
@ -132,7 +134,7 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Allocate buffer */ |
|
|
|
|
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) |
|
|
|
|
if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
/* Set flags */ |
|
|
|
@ -212,5 +214,6 @@ AVCodec ff_vble_decoder = { |
|
|
|
|
.init = vble_decode_init, |
|
|
|
|
.close = vble_decode_close, |
|
|
|
|
.decode = vble_decode_frame, |
|
|
|
|
.capabilities = AV_CODEC_CAP_DR1, |
|
|
|
|
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, |
|
|
|
|
.init_thread_copy = ONLY_IF_THREADS_ENABLED(vble_decode_init), |
|
|
|
|
}; |
|
|
|
|