]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mdec.c
Fix put_bits32() doxy.
[ffmpeg] / libavcodec / mdec.c
index b928ac1efb59a52928e81ee938b0bdf2cbac7e56..762c306cd11e60bef65ad180e5789740be3ac65d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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;
@@ -44,14 +45,12 @@ typedef struct MDECContext{
     int mb_height;
     int mb_x, mb_y;
     DECLARE_ALIGNED_16(DCTELEM, block[6][64]);
-    DECLARE_ALIGNED_8(uint16_t, intra_matrix[64]);
-    DECLARE_ALIGNED_8(int, q_intra_matrix[64]);
     uint8_t *bitstream_buffer;
     unsigned int bitstream_buffer_size;
     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;
@@ -61,7 +60,7 @@ static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n)
     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{
@@ -76,7 +75,7 @@ static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n)
     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);
@@ -153,8 +152,10 @@ static inline void idct_put(MDECContext *a, int mb_x, int mb_y){
 
 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;
@@ -171,7 +172,9 @@ static int decode_frame(AVCodecContext *avctx,
     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  ];
@@ -223,7 +226,7 @@ static av_cold int decode_init(AVCodecContext *avctx){
     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;