[SCM] libav/experimental: exporting the internal qscale table, this allso fixes the ordering

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:33:53 UTC 2013


The following commit has been merged in the experimental branch:
commit 6b72ac6323ec656fd0df6460ef844c83b5e76433
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Wed Oct 30 20:41:40 2002 +0000

    exporting the internal qscale table, this allso fixes the ordering
    
    Originally committed as revision 1116 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 9f80071..eaeda8a 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -5,8 +5,8 @@
 
 #define LIBAVCODEC_VERSION_INT 0x000406
 #define LIBAVCODEC_VERSION     "0.4.6"
-#define LIBAVCODEC_BUILD       4632
-#define LIBAVCODEC_BUILD_STR   "4632"
+#define LIBAVCODEC_BUILD       4633
+#define LIBAVCODEC_BUILD_STR   "4633"
 
 enum CodecID {
     CODEC_ID_NONE, 
@@ -467,15 +467,17 @@ typedef struct AVCodecContext {
      */
     int error_resilience;
     
-#ifndef MBC
-#define MBC 128
-#define MBR 96
-#endif
-#define QP_TYPE int //FIXME note xxx this might be changed to int8_t
-
-    QP_TYPE *quant_store; /* field for communicating with external postprocessing */
+    /**
+     * obsolete, just here to keep ABI compatible (should be removed perhaps, dunno)
+     */
+    int *quant_store;
 
-    unsigned qstride;
+    /**
+     * QP store stride
+     * encoding: unused
+     * decoding: set by lavc
+     */
+    int qstride;
     
     /**
      * buffer, where the next picture should be decoded into
@@ -735,40 +737,18 @@ typedef struct AVCodecContext {
 #define FF_EC_GUESS_MVS   1
 #define FF_EC_DEBLOCK     2
 
-    //FIXME this should be reordered after kabis API is finished ...
-    //TODO kill kabi
-    /*
-	Note: Below are located reserved fields for further usage
-	It requires for ABI !!!
-	If you'll perform some changes then borrow new space from these fields
-	(void * can be safety replaced with struct * ;)
-	P L E A S E ! ! !
-	Note: use avcodec_alloc_context instead of malloc to allocate this, 
-        otherwise the ABI compatibility will be broken between versions
- 	IMPORTANT: Never change order of already declared fields!!!
-     */
-     //TODO: remove mess below
-    unsigned long long int
-	    ull_res0,ull_res1,ull_res2,ull_res3,ull_res4,ull_res5,
-	    ull_res6,ull_res7,ull_res8,ull_res9,ull_res10,ull_res11;
-    float
-	    flt_res0,flt_res1,flt_res2,flt_res3,flt_res4,flt_res5,
-	    flt_res6,flt_res7,flt_res8,flt_res9,flt_res10,flt_res11,flt_res12;
-    void
-	    *ptr_res0,*ptr_res1,*ptr_res2,*ptr_res3,*ptr_res4,*ptr_res5,
-            *ptr_res6,*ptr_res7,*ptr_res8,*ptr_res9,*ptr_res10,*ptr_res11,*ptr_res12;
-    unsigned long int
-	    ul_res0,ul_res1,ul_res2,ul_res3,ul_res4,ul_res5,
-	    ul_res6,ul_res7,ul_res8,ul_res9,ul_res10,ul_res11,ul_res12;
-    unsigned short int
-	    us_res0,us_res1,us_res2,us_res3,us_res4,us_res5,
-	    us_res6,us_res7,us_res8,us_res9,us_res10,us_res11,us_res12;
-    unsigned char
-	    uc_res0,uc_res1,uc_res2,uc_res3,uc_res4,uc_res5,
-	    uc_res6,uc_res7,uc_res8,uc_res9,uc_res10,uc_res11,uc_res12;
-    unsigned int
-	    ui_res0,ui_res1,ui_res2,ui_res3,ui_res4,ui_res5,ui_res6,ui_res7,ui_res8,ui_res9,
-	    ui_res10,ui_res11,ui_res12,ui_res13,ui_res14,ui_res15,ui_res16;
+    /**
+     * QP table of the currently decoded frame
+     * encoding; unused
+     * decoding: set by lavc
+     */
+     int8_t *current_qscale_table;
+    /**
+     * QP table of the currently displayed frame
+     * encoding; unused
+     * decoding: set by lavc
+     */
+     int8_t *display_qscale_table;
 } AVCodecContext;
 
 typedef struct AVCodec {
@@ -783,23 +763,6 @@ typedef struct AVCodec {
                   UINT8 *buf, int buf_size);
     int capabilities;
     struct AVCodec *next;
-    /*
-	Note: Below are located reserved fields for further usage
-	It requires for ABI !!!
-	If you'll perform some changes then borrow new space from these fields
-	(void * can be safety replaced with struct * ;)
-	P L E A S E ! ! !
-	IMPORTANT: Never change order of already declared fields!!!
-    */
-    unsigned long long int
-	    ull_res0,ull_res1,ull_res2,ull_res3,ull_res4,ull_res5,
-	    ull_res6,ull_res7,ull_res8,ull_res9,ull_res10,ull_res11,ull_res12;
-    float
-	    flt_res0,flt_res1,flt_res2,flt_res3,flt_res4,flt_res5,
-	    flt_res6,flt_res7,flt_res8,flt_res9,flt_res10,flt_res11,flt_res12;
-    void
-	    *ptr_res0,*ptr_res1,*ptr_res2,*ptr_res3,*ptr_res4,*ptr_res5,
-	    *ptr_res6,*ptr_res7,*ptr_res8,*ptr_res9,*ptr_res10,*ptr_res11,*ptr_res12;
 } AVCodec;
 
 /* three components are given, that's all */
@@ -955,10 +918,12 @@ void avcodec_register_all(void);
 
 void avcodec_flush_buffers(AVCodecContext *avctx);
 
-#ifdef FF_POSTPROCESS
-extern int quant_store[MBR+1][MBC+1]; // [Review]
+// deprecated / obsolete stuff, WILL be removed
+#ifndef MBC
+#define MBC 128
+#define MBR 96
 #endif
-
+#define QP_TYPE int
 
 /**
  * Interface for 0.5.0 version
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 4761b61..4503e3e 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -420,7 +420,11 @@ int MPV_common_init(MpegEncContext *s)
             s->dc_val[0][i] = 1024;
     }
 
-    CHECKED_ALLOCZ(s->qscale_table  , s->mb_num * sizeof(UINT8))
+    CHECKED_ALLOCZ(s->next_qscale_table  , s->mb_num * sizeof(UINT8))
+    CHECKED_ALLOCZ(s->last_qscale_table  , s->mb_num * sizeof(UINT8))
+    CHECKED_ALLOCZ(s->aux_qscale_table   , s->mb_num * sizeof(UINT8))
+    s->qscale_table= s->next_qscale_table;
+    s->avctx->qstride= s->mb_width;
     
     /* which mb is a intra block */
     CHECKED_ALLOCZ(s->mbintra_table, s->mb_num);
@@ -469,7 +473,9 @@ void MPV_common_end(MpegEncContext *s)
     av_freep(&s->mbintra_table);
     av_freep(&s->cbp_table);
     av_freep(&s->pred_dir_table);
-    av_freep(&s->qscale_table);
+    av_freep(&s->next_qscale_table);
+    av_freep(&s->last_qscale_table);
+    av_freep(&s->aux_qscale_table);
     av_freep(&s->me_scratchpad);
     av_freep(&s->me_map);
     av_freep(&s->me_score_map);
@@ -824,6 +830,9 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
 
             s->current_picture[i] = s->aux_picture[i];
         }
+        s->avctx->display_qscale_table=
+        s->avctx->current_qscale_table= 
+        s->qscale_table= s->aux_qscale_table;
     } else {
         for(i=0;i<3;i++) {
             /* swap next and last */
@@ -847,6 +856,9 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
             else
                 avctx->dr_opaque_frame= s->next_dr_opaque;
         }
+        s->avctx->current_qscale_table= s->qscale_table      = s->last_qscale_table;
+        s->avctx->display_qscale_table= s->last_qscale_table = s->next_qscale_table;
+        s->next_qscale_table= s->qscale_table;
     }
     /* set dequantizer, we cant do it during init as it might change for mpeg4
        and we cant do it in the header decode as init isnt called for mpeg4 there yet */
@@ -1728,14 +1740,6 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
     mb_x = s->mb_x;
     mb_y = s->mb_y;
 
-#ifdef FF_POSTPROCESS
-    /* Obsolete. Exists for compatibility with mplayer only. */
-    quant_store[mb_y][mb_x]=s->qscale;
-    //printf("[%02d][%02d] %d\n",mb_x,mb_y,s->qscale);
-#else
-    /* even more obsolete, exists for mplayer xp only */
-    if(s->avctx->quant_store) s->avctx->quant_store[mb_y*s->avctx->qstride+mb_x] = s->qscale;
-#endif
     s->qscale_table[mb_xy]= s->qscale;
 
     /* update DC predictors for P macroblocks */
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index d50d1ad..272f75c 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -187,7 +187,10 @@ typedef struct MpegEncContext {
     UINT8 *mbintra_table;       /* used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding */
     UINT8 *cbp_table;           /* used to store cbp, ac_pred for partitioned decoding */
     UINT8 *pred_dir_table;      /* used to store pred_dir for partitioned decoding */
-    INT8 *qscale_table;         /* used to store qscale for partitioned decoding (& postprocessing FIXME export) */
+    INT8 *qscale_table;         /* used to store qscale */
+    INT8 *aux_qscale_table;
+    INT8 *next_qscale_table;
+    INT8 *last_qscale_table;     //FIXME move these into some picture struct (MpegEncContext.aux.qscale_table[])
     UINT8 *edge_emu_buffer;
 
     int input_qscale;           /* qscale prior to reordering of frames */

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list