From 7ac114f94a8fac5fa7cc0e99bf6a3c03ec194650 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20K=C3=B6nig?= Date: Thu, 22 Dec 2011 15:24:46 +0100 Subject: [PATCH] vl: call decode_bitstream only once MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Submit all bitstreams at once to decode_bitstream. Signed-off-by: Christian König Signed-off-by: Maarten Lankhorst --- src/gallium/auxiliary/vl/vl_mpeg12_bitstream.c | 5 +++-- src/gallium/auxiliary/vl/vl_mpeg12_bitstream.h | 3 ++- src/gallium/auxiliary/vl/vl_mpeg12_decoder.c | 6 ++++-- src/gallium/include/pipe/p_video_decoder.h | 4 +++- src/gallium/state_trackers/vdpau/decode.c | 11 +++++++---- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.c b/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.c index 7e20d7177e4..bd1f091cd05 100644 --- a/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.c +++ b/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.c @@ -958,11 +958,12 @@ vl_mpg12_bs_set_picture_desc(struct vl_mpg12_bs *bs, struct pipe_mpeg12_picture_ } void -vl_mpg12_bs_decode(struct vl_mpg12_bs *bs, unsigned num_bytes, const uint8_t *buffer) +vl_mpg12_bs_decode(struct vl_mpg12_bs *bs, unsigned num_buffers, + const void * const *buffers, const unsigned *sizes) { assert(bs); - vl_vlc_init(&bs->vlc, 1, (const void * const *)&buffer, &num_bytes); + vl_vlc_init(&bs->vlc, num_buffers, buffers, sizes); while (vl_vlc_bits_left(&bs->vlc) > 32) { uint32_t code = vl_vlc_peekbits(&bs->vlc, 32); diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.h b/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.h index c3f14a17932..0ba7f4303e5 100644 --- a/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.h +++ b/src/gallium/auxiliary/vl/vl_mpeg12_bitstream.h @@ -49,6 +49,7 @@ void vl_mpg12_bs_set_picture_desc(struct vl_mpg12_bs *bs, struct pipe_mpeg12_picture_desc *picture); void -vl_mpg12_bs_decode(struct vl_mpg12_bs *bs, unsigned num_bytes, const uint8_t *buffer); +vl_mpg12_bs_decode(struct vl_mpg12_bs *bs, unsigned num_buffers, + const void * const *buffers, const unsigned *sizes); #endif /* vl_mpeg12_bitstream_h */ diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c b/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c index 2442d784ecb..e502fc626f5 100644 --- a/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c +++ b/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c @@ -690,7 +690,9 @@ vl_mpeg12_decode_macroblock(struct pipe_video_decoder *decoder, static void vl_mpeg12_decode_bitstream(struct pipe_video_decoder *decoder, - unsigned num_bytes, const void *data) + unsigned num_buffers, + const void * const *buffers, + const unsigned *sizes) { struct vl_mpeg12_decoder *dec = (struct vl_mpeg12_decoder *)decoder; struct vl_mpeg12_buffer *buf; @@ -706,7 +708,7 @@ vl_mpeg12_decode_bitstream(struct pipe_video_decoder *decoder, vl_zscan_set_layout(&buf->zscan[i], dec->picture_desc.alternate_scan ? dec->zscan_alternate : dec->zscan_normal); - vl_mpg12_bs_decode(&buf->bs, num_bytes, data); + vl_mpg12_bs_decode(&buf->bs, num_buffers, buffers, sizes); } static void diff --git a/src/gallium/include/pipe/p_video_decoder.h b/src/gallium/include/pipe/p_video_decoder.h index 40b7dcdb3cf..aa535898f2d 100644 --- a/src/gallium/include/pipe/p_video_decoder.h +++ b/src/gallium/include/pipe/p_video_decoder.h @@ -116,7 +116,9 @@ struct pipe_video_decoder * decode a bitstream */ void (*decode_bitstream)(struct pipe_video_decoder *decoder, - unsigned num_bytes, const void *data); + unsigned num_buffers, + const void * const *buffers, + const unsigned *sizes); /** * end decoding of the current frame diff --git a/src/gallium/state_trackers/vdpau/decode.c b/src/gallium/state_trackers/vdpau/decode.c index 47212e348ed..a5a01fb21a3 100644 --- a/src/gallium/state_trackers/vdpau/decode.c +++ b/src/gallium/state_trackers/vdpau/decode.c @@ -322,7 +322,6 @@ vlVdpDecoderRenderVC1(struct pipe_video_decoder *decoder, { struct pipe_vc1_picture_desc picture; struct pipe_video_buffer *ref_frames[2] = {}; - unsigned i; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Decoding VC-1\n"); @@ -385,6 +384,8 @@ vlVdpDecoderRender(VdpDecoder decoder, uint32_t bitstream_buffer_count, VdpBitstreamBuffer const *bitstream_buffers) { + const void * buffers[bitstream_buffer_count]; + unsigned sizes[bitstream_buffer_count]; vlVdpDecoder *vldecoder; vlVdpSurface *vlsurf; VdpStatus ret; @@ -435,9 +436,11 @@ vlVdpDecoderRender(VdpDecoder decoder, return ret; dec->begin_frame(dec); - for (i = 0; i < bitstream_buffer_count; ++i) - dec->decode_bitstream(dec, bitstream_buffers[i].bitstream_bytes, - bitstream_buffers[i].bitstream); + for (i = 0; i < bitstream_buffer_count; ++i) { + buffers[i] = bitstream_buffers[i].bitstream; + sizes[i] = bitstream_buffers[i].bitstream_bytes; + } + dec->decode_bitstream(dec, bitstream_buffer_count, buffers, sizes); dec->end_frame(dec); return ret; } -- 2.30.2