[FFmpeg-cvslog] Merge commit 'eaeba6f241e0de0e797be10f8fda967ef8489e64'
Derek Buitenhuis
git at videolan.org
Sun Apr 24 13:47:42 CEST 2016
ffmpeg | branch: master | Derek Buitenhuis <derek.buitenhuis at gmail.com> | Sun Apr 24 12:32:38 2016 +0100| [36dad146935a500ef6fd7246b5c216f7af26f9db] | committer: Derek Buitenhuis
Merge commit 'eaeba6f241e0de0e797be10f8fda967ef8489e64'
* commit 'eaeba6f241e0de0e797be10f8fda967ef8489e64':
intrax8: Pass the output frame to the decoding function
Merged-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=36dad146935a500ef6fd7246b5c216f7af26f9db
---
libavcodec/intrax8.c | 21 +++++++++++----------
libavcodec/intrax8.h | 7 +++++--
libavcodec/vc1_block.c | 5 +++--
libavcodec/wmv2dec.c | 3 ++-
4 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/libavcodec/intrax8.c b/libavcodec/intrax8.c
index d8bcad6..d391699 100644
--- a/libavcodec/intrax8.c
+++ b/libavcodec/intrax8.c
@@ -332,7 +332,7 @@ static int x8_setup_spatial_predictor(IntraX8Context *const w, const int chroma)
int quant;
w->dsp.setup_spatial_compensation(w->dest[chroma], s->sc.edge_emu_buffer,
- s->current_picture.f->linesize[chroma > 0],
+ w->frame->linesize[chroma > 0],
&range, &sum, w->edges);
if (chroma) {
w->orient = w->chroma_orient;
@@ -668,7 +668,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
dsp_x8_put_solidcolor(av_clip_uint8((dc_level * dc_quant + 4) >> 3),
w->dest[chroma],
- s->current_picture.f->linesize[!!chroma]);
+ w->frame->linesize[!!chroma]);
goto block_placed;
}
@@ -693,15 +693,15 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
if (w->flat_dc) {
dsp_x8_put_solidcolor(w->predicted_dc, w->dest[chroma],
- s->current_picture.f->linesize[!!chroma]);
+ w->frame->linesize[!!chroma]);
} else {
w->dsp.spatial_compensation[w->orient](s->sc.edge_emu_buffer,
w->dest[chroma],
- s->current_picture.f->linesize[!!chroma]);
+ w->frame->linesize[!!chroma]);
}
if (!zeros_only)
w->wdsp.idct_add(w->dest[chroma],
- s->current_picture.f->linesize[!!chroma],
+ w->frame->linesize[!!chroma],
s->block[0]);
block_placed:
@@ -710,7 +710,7 @@ block_placed:
if (w->loopfilter) {
uint8_t *ptr = w->dest[chroma];
- int linesize = s->current_picture.f->linesize[!!chroma];
+ int linesize = w->frame->linesize[!!chroma];
if (!((w->edges & 2) || (zeros_only && (w->orient | 4) == 4)))
w->dsp.h_loop_filter(ptr, linesize, w->quant);
@@ -776,8 +776,8 @@ av_cold void ff_intrax8_common_end(IntraX8Context *w)
av_freep(&w->prediction_table);
}
-int ff_intrax8_decode_picture(IntraX8Context *const w, int dquant,
- int quant_offset, int loopfilter)
+int ff_intrax8_decode_picture(IntraX8Context *const w, Picture *pict,
+ int dquant, int quant_offset, int loopfilter)
{
MpegEncContext *const s = w->s;
int mb_xy;
@@ -786,6 +786,7 @@ int ff_intrax8_decode_picture(IntraX8Context *const w, int dquant,
w->dquant = dquant;
w->quant = dquant >> 1;
w->qsum = quant_offset;
+ w->frame = pict->f;
w->loopfilter = loopfilter;
w->divide_quant_dc_luma = ((1 << 16) + (w->quant >> 1)) / w->quant;
@@ -799,7 +800,7 @@ int ff_intrax8_decode_picture(IntraX8Context *const w, int dquant,
x8_reset_vlc_tables(w);
for (s->mb_y = 0; s->mb_y < s->mb_height * 2; s->mb_y++) {
- x8_init_block_index(w, s->current_picture.f, s->mb_y);
+ x8_init_block_index(w, w->frame, s->mb_y);
mb_xy = (s->mb_y >> 1) * s->mb_stride;
for (s->mb_x = 0; s->mb_x < s->mb_width * 2; s->mb_x++) {
@@ -828,7 +829,7 @@ int ff_intrax8_decode_picture(IntraX8Context *const w, int dquant,
/* emulate MB info in the relevant tables */
s->mbskip_table[mb_xy] = 0;
s->mbintra_table[mb_xy] = 1;
- s->current_picture.qscale_table[mb_xy] = w->quant;
+ pict->qscale_table[mb_xy] = w->quant;
mb_xy++;
}
w->dest[0] += 8;
diff --git a/libavcodec/intrax8.h b/libavcodec/intrax8.h
index ac31a5f..0fe38d0 100644
--- a/libavcodec/intrax8.h
+++ b/libavcodec/intrax8.h
@@ -24,6 +24,7 @@
#include "idctdsp.h"
#include "intrax8dsp.h"
#include "wmv2dsp.h"
+#include "mpegpicture.h"
typedef struct IntraX8Context {
VLC *j_ac_vlc[4]; // they point to the static j_mb_vlc
@@ -46,6 +47,7 @@ typedef struct IntraX8Context {
int dquant;
int qsum;
int loopfilter;
+ AVFrame *frame;
// calculated per frame
int quant_dc_chroma;
@@ -88,11 +90,12 @@ void ff_intrax8_common_end(IntraX8Context *w);
* This function does not use ff_mpv_decode_mb().
* lowres decoding is theoretically impossible.
* @param w pointer to IntraX8Context
+ * @param pict the output Picture containing an AVFrame
* @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
* @param quant_offset offset away from zero
* @param loopfilter enable filter after decoding a block
*/
-int ff_intrax8_decode_picture(IntraX8Context *w, int quant, int halfpq,
- int loopfilter);
+int ff_intrax8_decode_picture(IntraX8Context *w, Picture *pict,
+ int quant, int halfpq, int loopfilter);
#endif /* AVCODEC_INTRAX8_H */
diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c
index 3853251..50c50c2 100644
--- a/libavcodec/vc1_block.c
+++ b/libavcodec/vc1_block.c
@@ -2931,8 +2931,9 @@ void ff_vc1_decode_blocks(VC1Context *v)
v->s.esc3_level_length = 0;
if (v->x8_type) {
- ff_intrax8_decode_picture(&v->x8, 2 * v->pq + v->halfpq,
- v->pq * !v->pquantizer, v->s.loop_filter);
+ ff_intrax8_decode_picture(&v->x8, &v->s.current_picture,
+ 2 * v->pq + v->halfpq, v->pq * !v->pquantizer,
+ v->s.loop_filter);
ff_er_add_slice(&v->s.er, 0, 0,
(v->s.mb_x >> 1) - 1, (v->s.mb_y >> 1) - 1,
diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c
index f0fe708..4aef773 100644
--- a/libavcodec/wmv2dec.c
+++ b/libavcodec/wmv2dec.c
@@ -219,7 +219,8 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext *s)
s->picture_number++; // FIXME ?
if (w->j_type) {
- ff_intrax8_decode_picture(&w->x8, 2 * s->qscale, (s->qscale - 1) | 1,
+ ff_intrax8_decode_picture(&w->x8, &s->current_picture,
+ 2 * s->qscale, (s->qscale - 1) | 1,
s->loop_filter);
ff_er_add_slice(&w->s.er, 0, 0,
======================================================================
diff --cc libavcodec/intrax8.c
index d8bcad6,a05c533..d391699
--- a/libavcodec/intrax8.c
+++ b/libavcodec/intrax8.c
@@@ -697,11 -701,11 +697,11 @@@ static int x8_decode_intra_mb(IntraX8Co
} else {
w->dsp.spatial_compensation[w->orient](s->sc.edge_emu_buffer,
w->dest[chroma],
- s->current_picture.f->linesize[!!chroma]);
+ w->frame->linesize[!!chroma]);
}
if (!zeros_only)
- w->idsp.idct_add(w->dest[chroma],
+ w->wdsp.idct_add(w->dest[chroma],
- s->current_picture.f->linesize[!!chroma],
+ w->frame->linesize[!!chroma],
s->block[0]);
block_placed:
diff --cc libavcodec/intrax8.h
index ac31a5f,f087b9f..0fe38d0
--- a/libavcodec/intrax8.h
+++ b/libavcodec/intrax8.h
@@@ -23,7 -23,7 +23,8 @@@
#include "mpegvideo.h"
#include "idctdsp.h"
#include "intrax8dsp.h"
+#include "wmv2dsp.h"
+ #include "mpegpicture.h"
typedef struct IntraX8Context {
VLC *j_ac_vlc[4]; // they point to the static j_mb_vlc
@@@ -86,8 -85,8 +88,9 @@@ void ff_intrax8_common_end(IntraX8Conte
* The parent codec must call ff_mpv_frame_start() before calling this function.
* The parent codec must call ff_mpv_frame_end() after calling this function.
* This function does not use ff_mpv_decode_mb().
+ * lowres decoding is theoretically impossible.
* @param w pointer to IntraX8Context
+ * @param pict the output Picture containing an AVFrame
* @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
* @param quant_offset offset away from zero
* @param loopfilter enable filter after decoding a block
More information about the ffmpeg-cvslog
mailing list