summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-08-02 13:09:17 +0000
committerhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-08-02 13:09:17 +0000
commit267c4e26d3d57584227561e64986be846e0c95f9 (patch)
tree62d88092e9b0603179bba973865d29699fd3cf93
parentff1f7226f1f939efb0e0c8d4394e71cc4db4b771 (diff)
downloadmpv-267c4e26d3d57584227561e64986be846e0c95f9.tar.bz2
mpv-267c4e26d3d57584227561e64986be846e0c95f9.tar.xz
forgotten libmpeg2 postprocessing
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12936 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--libmpcodecs/vd_libmpeg2.c11
-rw-r--r--libmpeg2/header.c1
-rw-r--r--libmpeg2/mpeg2_internal.h5
-rw-r--r--libmpeg2/slice.c3
4 files changed, 20 insertions, 0 deletions
diff --git a/libmpcodecs/vd_libmpeg2.c b/libmpcodecs/vd_libmpeg2.c
index b73ea1aa80..be41e5f492 100644
--- a/libmpcodecs/vd_libmpeg2.c
+++ b/libmpcodecs/vd_libmpeg2.c
@@ -154,6 +154,17 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
else mpi->fields &= ~MP_IMGFIELD_REPEAT_FIRST;
mpi->fields |= MP_IMGFIELD_ORDERED;
+#ifdef MPEG12_POSTPROC
+ if(!mpi->qscale){
+ mpi->qstride=(info->sequence->picture_width+15)>>4;
+ mpi->qscale=malloc(mpi->qstride*((info->sequence->picture_height+15)>>4));
+ }
+ mpeg2dec->decoder.quant_store=mpi->qscale;
+ mpeg2dec->decoder.quant_stride=mpi->qstride;
+ mpi->pict_type=type; // 1->I, 2->P, 3->B
+ mpi->qscale_type= 1;
+#endif
+
if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK &&
!(mpi->flags&MP_IMGFLAG_DIRECT)){
// nice, filter/vo likes draw_callback :)
diff --git a/libmpeg2/header.c b/libmpeg2/header.c
index 8312e9a7d6..fb2288433f 100644
--- a/libmpeg2/header.c
+++ b/libmpeg2/header.c
@@ -803,6 +803,7 @@ static void prescale (mpeg2dec_t * mpeg2dec, int index)
mpeg2dec->scaled[index] = mpeg2dec->q_scale_type;
for (i = 0; i < 32; i++) {
k = mpeg2dec->q_scale_type ? non_linear_scale[i] : (i << 1);
+ decoder->quantizer_scale = k;
for (j = 0; j < 64; j++)
decoder->quantizer_prescale[index][i][j] =
k * mpeg2dec->quantizer_matrix[index][j];
diff --git a/libmpeg2/mpeg2_internal.h b/libmpeg2/mpeg2_internal.h
index 850456b1f8..1ba3300c9e 100644
--- a/libmpeg2/mpeg2_internal.h
+++ b/libmpeg2/mpeg2_internal.h
@@ -144,6 +144,11 @@ struct mpeg2_decoder_s {
int second_field;
int mpeg1;
+
+ /* for MPlayer: */
+ int quantizer_scale;
+ char* quant_store;
+ int quant_stride;
};
typedef struct {
diff --git a/libmpeg2/slice.c b/libmpeg2/slice.c
index 15740e1151..35d99b6a5c 100644
--- a/libmpeg2/slice.c
+++ b/libmpeg2/slice.c
@@ -1564,6 +1564,9 @@ do { \
#define NEXT_MACROBLOCK \
do { \
+ if(decoder->quant_store) \
+ decoder->quant_store[decoder->quant_stride*(decoder->v_offset>>4) \
+ +(decoder->offset>>4)] = decoder->quantizer_scale; \
decoder->offset += 16; \
if (decoder->offset == decoder->width) { \
do { /* just so we can use the break statement */ \