summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristophe Thommeret <hftom@free.fr>2008-12-10 11:34:41 +0000
committerChristophe Thommeret <hftom@free.fr>2008-12-10 11:34:41 +0000
commit1f3c3b344969262aac57cc18b1710c1ec496fd2a (patch)
tree4e3a6a46d6716c2b39069d29c68fbdd41dacc403 /src
parent7a50f9ae0c9f3c5c7c2872810506fbbe74aaa717 (diff)
downloadxine-lib-1f3c3b344969262aac57cc18b1710c1ec496fd2a.tar.gz
xine-lib-1f3c3b344969262aac57cc18b1710c1ec496fd2a.tar.bz2
Header-related bits.
Diffstat (limited to 'src')
-rw-r--r--src/libvdpau/vdpau_mpeg12.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/libvdpau/vdpau_mpeg12.c b/src/libvdpau/vdpau_mpeg12.c
index ab4312d59..a376e4904 100644
--- a/src/libvdpau/vdpau_mpeg12.c
+++ b/src/libvdpau/vdpau_mpeg12.c
@@ -232,12 +232,12 @@ static void sequence_header( sequence_t *sequence, uint8_t *buf, int len )
static void picture_header( sequence_t *sequence, uint8_t *buf, int len )
{
- int i = get_bits( buf,10,3 );
+ //int i = get_bits( buf,10,3 );
//printf( "!!!!!!!!!!!!!!! picture type : %d !!!!!!!!!!!!!!!!!!!!!!!!!!\n", i );
if ( /*i==B_FRAME ||*/ sequence->picture.state!=WANT_HEADER )
return;
reset_picture( &sequence->picture );
- sequence->picture.vdp_infos.picture_coding_type = i;
+ sequence->picture.vdp_infos.picture_coding_type = get_bits( buf,10,3 );
sequence->picture.vdp_infos.forward_reference = VDP_INVALID_HANDLE;
sequence->picture.vdp_infos.backward_reference = VDP_INVALID_HANDLE;
sequence->picture.vdp_infos.full_pel_forward_vector = 0;
@@ -392,21 +392,32 @@ static void decode_picture( vdpau_mpeg12_decoder_t *vd )
vdpau_accel_t *ref_accel;
if ( pic->vdp_infos.picture_coding_type==P_FRAME ) {
- if ( seq->backward_ref )
+ if ( seq->backward_ref ) {
ref_accel = (vdpau_accel_t*)seq->backward_ref->accel_data;
- else
- ref_accel = (vdpau_accel_t*)seq->forward_ref->accel_data;
- pic->vdp_infos.forward_reference = ref_accel->surface;
+ pic->vdp_infos.forward_reference = ref_accel->surface;
+ }
+ else {
+ pic->state = WANT_HEADER;
+ return;
+ }
}
else if ( pic->vdp_infos.picture_coding_type==B_FRAME ) {
if ( seq->forward_ref ) {
ref_accel = (vdpau_accel_t*)seq->forward_ref->accel_data;
pic->vdp_infos.forward_reference = ref_accel->surface;
}
+ else {
+ pic->state = WANT_HEADER;
+ return;
+ }
if ( seq->backward_ref ) {
ref_accel = (vdpau_accel_t*)seq->backward_ref->accel_data;
pic->vdp_infos.backward_reference = ref_accel->surface;
}
+ else {
+ pic->state = WANT_HEADER;
+ return;
+ }
}
pic->vdp_infos.slice_count = pic->slices_count;
@@ -461,8 +472,8 @@ static void decode_picture( vdpau_mpeg12_decoder_t *vd )
* This function receives a buffer of data from the demuxer layer and
* figures out how to handle it based on its header flags.
*/
-static void vdpau_mpeg12_decode_data (video_decoder_t *this_gen, buf_element_t *buf) {
-
+static void vdpau_mpeg12_decode_data (video_decoder_t *this_gen, buf_element_t *buf)
+{
vdpau_mpeg12_decoder_t *this = (vdpau_mpeg12_decoder_t *) this_gen;
sequence_t *seq = (sequence_t*)&this->sequence;