mdec: enable frame-level multithreading.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
This commit is contained in:
parent
32ac63ee10
commit
a64c58a240
@ -31,6 +31,7 @@
|
|||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "mpegvideo.h"
|
#include "mpegvideo.h"
|
||||||
#include "mpeg12.h"
|
#include "mpeg12.h"
|
||||||
|
#include "thread.h"
|
||||||
|
|
||||||
typedef struct MDECContext{
|
typedef struct MDECContext{
|
||||||
AVCodecContext *avctx;
|
AVCodecContext *avctx;
|
||||||
@ -163,10 +164,10 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if(p->data[0])
|
if(p->data[0])
|
||||||
avctx->release_buffer(avctx, p);
|
ff_thread_release_buffer(avctx, p);
|
||||||
|
|
||||||
p->reference= 0;
|
p->reference= 0;
|
||||||
if(avctx->get_buffer(avctx, p) < 0){
|
if(ff_thread_get_buffer(avctx, p) < 0){
|
||||||
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -239,6 +240,18 @@ static av_cold int decode_init(AVCodecContext *avctx){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static av_cold int decode_init_thread_copy(AVCodecContext *avctx){
|
||||||
|
MDECContext * const a = avctx->priv_data;
|
||||||
|
AVFrame *p = (AVFrame*)&a->picture;
|
||||||
|
|
||||||
|
avctx->coded_frame = p;
|
||||||
|
a->avctx= avctx;
|
||||||
|
|
||||||
|
p->qscale_table = av_mallocz( a->mb_width);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static av_cold int decode_end(AVCodecContext *avctx){
|
static av_cold int decode_end(AVCodecContext *avctx){
|
||||||
MDECContext * const a = avctx->priv_data;
|
MDECContext * const a = avctx->priv_data;
|
||||||
|
|
||||||
@ -260,7 +273,8 @@ AVCodec ff_mdec_decoder = {
|
|||||||
NULL,
|
NULL,
|
||||||
decode_end,
|
decode_end,
|
||||||
decode_frame,
|
decode_frame,
|
||||||
CODEC_CAP_DR1,
|
CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS,
|
||||||
.long_name= NULL_IF_CONFIG_SMALL("Sony PlayStation MDEC (Motion DECoder)"),
|
.long_name= NULL_IF_CONFIG_SMALL("Sony PlayStation MDEC (Motion DECoder)"),
|
||||||
|
.init_thread_copy= ONLY_IF_THREADS_ENABLED(decode_init_thread_copy)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user