/*
- * PSX MDEC codec
+ * Sony PlayStation MDEC (Motion DECoder)
* Copyright (c) 2003 Michael Niedermayer
*
* based upon code from Sebastian Jedruszkiewicz <elf@frogger.rules.pl>
*/
/**
- * @file mdec.c
- * PSX MDEC codec.
- * This is very similar to intra only MPEG1.
+ * @file libavcodec/mdec.c
+ * Sony PlayStation MDEC (Motion DECoder)
+ * This is very similar to intra-only MPEG-1.
*/
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
+#include "mpeg12.h"
typedef struct MDECContext{
AVCodecContext *avctx;
int block_last_index[6];
} MDECContext;
-//very similar to mpeg1
+//very similar to MPEG-1
static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n)
{
int level, diff, i, j, run;
const uint16_t *quant_matrix= ff_mpeg1_default_intra_matrix;
const int qscale= a->qscale;
- /* DC coef */
+ /* DC coefficient */
if(a->version==2){
block[0]= 2*get_sbits(&a->gb, 10) + 1024;
}else{
i = 0;
{
OPEN_READER(re, &a->gb);
- /* now quantify & encode AC coefs */
+ /* now quantify & encode AC coefficients */
for(;;) {
UPDATE_CACHE(re, &a->gb);
GET_RL_VLC(level, run, re, &a->gb, rl->rl_vlc[0], TEX_VLC_BITS, 2, 0);
static int decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
- const uint8_t *buf, int buf_size)
+ AVPacket *avpkt)
{
+ const uint8_t *buf = avpkt->data;
+ int buf_size = avpkt->size;
MDECContext * const a = avctx->priv_data;
AVFrame *picture = data;
AVFrame * const p= &a->picture;
p->pict_type= FF_I_TYPE;
p->key_frame= 1;
- a->bitstream_buffer= av_fast_realloc(a->bitstream_buffer, &a->bitstream_buffer_size, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
+ av_fast_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size, buf_size + FF_INPUT_BUFFER_PADDING_SIZE);
+ if (!a->bitstream_buffer)
+ return AVERROR(ENOMEM);
for(i=0; i<buf_size; i+=2){
a->bitstream_buffer[i] = buf[i+1];
a->bitstream_buffer[i+1]= buf[i ];
AVFrame *p= &a->picture;
mdec_common_init(avctx);
- init_vlcs();
+ ff_mpeg12_init_vlcs();
ff_init_scantable(a->dsp.idct_permutation, &a->scantable, ff_zigzag_direct);
p->qstride= a->mb_width;