]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blobdiff - libavcodec/h261dec.c
frsh: Export information about the last RTP contract and VRES
[frescor/ffmpeg.git] / libavcodec / h261dec.c
index 1d1e838ab8a0c08f5c9ba32eda018eb411aafe4c..2e850ecf2279b66facb47c04e33ce3525652ef42 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 /**
- * @file h261dec.c
+ * @file libavcodec/h261dec.c
  * H.261 decoder.
  */
 
@@ -53,20 +53,20 @@ static av_cold void h261_decode_init_vlc(H261Context *h){
 
     if(!done){
         done = 1;
-        init_vlc(&h261_mba_vlc, H261_MBA_VLC_BITS, 35,
+        INIT_VLC_STATIC(&h261_mba_vlc, H261_MBA_VLC_BITS, 35,
                  h261_mba_bits, 1, 1,
-                 h261_mba_code, 1, 1, 1);
-        init_vlc(&h261_mtype_vlc, H261_MTYPE_VLC_BITS, 10,
+                 h261_mba_code, 1, 1, 662);
+        INIT_VLC_STATIC(&h261_mtype_vlc, H261_MTYPE_VLC_BITS, 10,
                  h261_mtype_bits, 1, 1,
-                 h261_mtype_code, 1, 1, 1);
-        init_vlc(&h261_mv_vlc, H261_MV_VLC_BITS, 17,
+                 h261_mtype_code, 1, 1, 80);
+        INIT_VLC_STATIC(&h261_mv_vlc, H261_MV_VLC_BITS, 17,
                  &h261_mv_tab[0][1], 2, 1,
-                 &h261_mv_tab[0][0], 2, 1, 1);
-        init_vlc(&h261_cbp_vlc, H261_CBP_VLC_BITS, 63,
+                 &h261_mv_tab[0][0], 2, 1, 144);
+        INIT_VLC_STATIC(&h261_cbp_vlc, H261_CBP_VLC_BITS, 63,
                  &h261_cbp_tab[0][1], 2, 1,
-                 &h261_cbp_tab[0][0], 2, 1, 1);
+                 &h261_cbp_tab[0][0], 2, 1, 512);
         init_rl(&h261_rl_tcoeff, ff_h261_rl_table_store);
-        init_vlc_rl(&h261_rl_tcoeff, 1);
+        INIT_VLC_RL(h261_rl_tcoeff, 552);
     }
 }
 
@@ -133,8 +133,11 @@ static int h261_decode_gob_header(H261Context *h){
         skip_bits(&s->gb, 8);
     }
 
-    if(s->qscale==0)
-        return -1;
+    if(s->qscale==0) {
+        av_log(s->avctx, AV_LOG_ERROR, "qscale has forbidden 0 value\n");
+        if (s->avctx->error_recognition >= FF_ER_COMPLIANT)
+            return -1;
+    }
 
     // For the first transmitted macroblock in a GOB, MBA is the absolute address. For
     // subsequent macroblocks, MBA is the difference between the absolute addresses of
@@ -540,8 +543,10 @@ static int get_consumed_bytes(MpegEncContext *s, int buf_size){
 
 static int h261_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;
     H261Context *h= avctx->priv_data;
     MpegEncContext *s = &h->s;
     int ret;
@@ -647,5 +652,5 @@ AVCodec h261_decoder = {
     h261_decode_end,
     h261_decode_frame,
     CODEC_CAP_DR1,
-    .long_name = "H.261",
+    .long_name = NULL_IF_CONFIG_SMALL("H.261"),
 };