Commit 562f3957 authored by michaelni's avatar michaelni

exporting the internal qscale table, this allso fixes the ordering


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@1116 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 702650cf
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
#define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION_INT 0x000406
#define LIBAVCODEC_VERSION "0.4.6" #define LIBAVCODEC_VERSION "0.4.6"
#define LIBAVCODEC_BUILD 4632 #define LIBAVCODEC_BUILD 4633
#define LIBAVCODEC_BUILD_STR "4632" #define LIBAVCODEC_BUILD_STR "4633"
enum CodecID { enum CodecID {
CODEC_ID_NONE, CODEC_ID_NONE,
...@@ -467,15 +467,17 @@ typedef struct AVCodecContext { ...@@ -467,15 +467,17 @@ typedef struct AVCodecContext {
*/ */
int error_resilience; int error_resilience;
#ifndef MBC /**
#define MBC 128 * obsolete, just here to keep ABI compatible (should be removed perhaps, dunno)
#define MBR 96 */
#endif int *quant_store;
#define QP_TYPE int //FIXME note xxx this might be changed to int8_t
QP_TYPE *quant_store; /* field for communicating with external postprocessing */
unsigned qstride; /**
* QP store stride
* encoding: unused
* decoding: set by lavc
*/
int qstride;
/** /**
* buffer, where the next picture should be decoded into * buffer, where the next picture should be decoded into
...@@ -735,40 +737,18 @@ typedef struct AVCodecContext { ...@@ -735,40 +737,18 @@ typedef struct AVCodecContext {
#define FF_EC_GUESS_MVS 1 #define FF_EC_GUESS_MVS 1
#define FF_EC_DEBLOCK 2 #define FF_EC_DEBLOCK 2
//FIXME this should be reordered after kabis API is finished ... /**
//TODO kill kabi * QP table of the currently decoded frame
/* * encoding; unused
Note: Below are located reserved fields for further usage * decoding: set by lavc
It requires for ABI !!! */
If you'll perform some changes then borrow new space from these fields int8_t *current_qscale_table;
(void * can be safety replaced with struct * ;) /**
P L E A S E ! ! ! * QP table of the currently displayed frame
Note: use avcodec_alloc_context instead of malloc to allocate this, * encoding; unused
otherwise the ABI compatibility will be broken between versions * decoding: set by lavc
IMPORTANT: Never change order of already declared fields!!! */
*/ int8_t *display_qscale_table;
//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;
} AVCodecContext; } AVCodecContext;
typedef struct AVCodec { typedef struct AVCodec {
...@@ -783,23 +763,6 @@ typedef struct AVCodec { ...@@ -783,23 +763,6 @@ typedef struct AVCodec {
UINT8 *buf, int buf_size); UINT8 *buf, int buf_size);
int capabilities; int capabilities;
struct AVCodec *next; 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; } AVCodec;
/* three components are given, that's all */ /* three components are given, that's all */
...@@ -955,10 +918,12 @@ void avcodec_register_all(void); ...@@ -955,10 +918,12 @@ void avcodec_register_all(void);
void avcodec_flush_buffers(AVCodecContext *avctx); void avcodec_flush_buffers(AVCodecContext *avctx);
#ifdef FF_POSTPROCESS // deprecated / obsolete stuff, WILL be removed
extern int quant_store[MBR+1][MBC+1]; // [Review] #ifndef MBC
#define MBC 128
#define MBR 96
#endif #endif
#define QP_TYPE int
/** /**
* Interface for 0.5.0 version * Interface for 0.5.0 version
......
...@@ -420,7 +420,11 @@ int MPV_common_init(MpegEncContext *s) ...@@ -420,7 +420,11 @@ int MPV_common_init(MpegEncContext *s)
s->dc_val[0][i] = 1024; 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 */ /* which mb is a intra block */
CHECKED_ALLOCZ(s->mbintra_table, s->mb_num); CHECKED_ALLOCZ(s->mbintra_table, s->mb_num);
...@@ -469,7 +473,9 @@ void MPV_common_end(MpegEncContext *s) ...@@ -469,7 +473,9 @@ void MPV_common_end(MpegEncContext *s)
av_freep(&s->mbintra_table); av_freep(&s->mbintra_table);
av_freep(&s->cbp_table); av_freep(&s->cbp_table);
av_freep(&s->pred_dir_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_scratchpad);
av_freep(&s->me_map); av_freep(&s->me_map);
av_freep(&s->me_score_map); av_freep(&s->me_score_map);
...@@ -824,6 +830,9 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) ...@@ -824,6 +830,9 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
s->current_picture[i] = s->aux_picture[i]; 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 { } else {
for(i=0;i<3;i++) { for(i=0;i<3;i++) {
/* swap next and last */ /* swap next and last */
...@@ -847,6 +856,9 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) ...@@ -847,6 +856,9 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx)
else else
avctx->dr_opaque_frame= s->next_dr_opaque; 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 /* 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 */ 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]) ...@@ -1728,14 +1740,6 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
mb_x = s->mb_x; mb_x = s->mb_x;
mb_y = s->mb_y; 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; s->qscale_table[mb_xy]= s->qscale;
/* update DC predictors for P macroblocks */ /* update DC predictors for P macroblocks */
......
...@@ -187,7 +187,10 @@ typedef struct MpegEncContext { ...@@ -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 *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 *cbp_table; /* used to store cbp, ac_pred for partitioned decoding */
UINT8 *pred_dir_table; /* used to store pred_dir 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; UINT8 *edge_emu_buffer;
int input_qscale; /* qscale prior to reordering of frames */ int input_qscale; /* qscale prior to reordering of frames */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment