From c62e5fb1b42ff6ceaede676e154b22872c0c11a7 Mon Sep 17 00:00:00 2001 From: Julian Scheel Date: Mon, 15 Dec 2008 15:24:54 +0000 Subject: Fix aspect ratio. --- src/libvdpau/h264_parser.c | 2 +- src/libvdpau/nal.h | 3 ++- src/libvdpau/vdpau_h264.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c index 515a1db5e..ee6fef682 100644 --- a/src/libvdpau/h264_parser.c +++ b/src/libvdpau/h264_parser.c @@ -464,7 +464,7 @@ void parse_vui_parameters(struct buf_reader *buf, sps->vui_parameters.aspect_ration_info_present_flag = read_bits(buf, 1); if (sps->vui_parameters.aspect_ration_info_present_flag == 1) { sps->vui_parameters.aspect_ratio_idc = read_bits(buf, 8); - if (sps->vui_parameters.aspect_ratio_idc == ASPECT_RESERVED) { + if (sps->vui_parameters.aspect_ratio_idc == ASPECT_EXTENDED_SAR) { sps->vui_parameters.sar_width = read_bits(buf, 16); sps->vui_parameters.sar_height = read_bits(buf, 16); } diff --git a/src/libvdpau/nal.h b/src/libvdpau/nal.h index 351a3d84f..17f5604b6 100644 --- a/src/libvdpau/nal.h +++ b/src/libvdpau/nal.h @@ -55,7 +55,8 @@ enum aspect_ratio ASPECT_4_3, ASPECT_3_2, ASPECT_2_1, - ASPECT_RESERVED + ASPECT_RESERVED, + ASPECT_EXTENDED_SAR=255 }; static inline uint32_t slice_type(uint32_t slice_type) diff --git a/src/libvdpau/vdpau_h264.c b/src/libvdpau/vdpau_h264.c index 574386b67..be42b6210 100644 --- a/src/libvdpau/vdpau_h264.c +++ b/src/libvdpau/vdpau_h264.c @@ -213,6 +213,64 @@ static void vdpau_h264_decode_data (video_decoder_t *this_gen, * support anamorph codings... */ this->ratio = (double)this->width / (double)this->height; + if(this->nal_parser->current_nal->sps->vui_parameters.aspect_ration_info_present_flag) { + switch(this->nal_parser->current_nal->sps->vui_parameters.aspect_ratio_idc) { + case ASPECT_1_1: + this->ratio = 1 * this->ratio; + break; + case ASPECT_12_11: + this->ratio *= 12.0/11.0; + break; + case ASPECT_10_11: + this->ratio *= 10.0/11.0; + break; + case ASPECT_16_11: + this->ratio *= 16.0/11.0; + break; + case ASPECT_40_33: + this->ratio *= 40.0/33.0; + break; + case ASPECT_24_11: + this->ratio *= 24.0/11.0; + break; + case ASPECT_20_11: + this->ratio *= 20.0/11.0; + break; + case ASPECT_32_11: + this->ratio *= 32.0/11.0; + break; + case ASPECT_80_33: + this->ratio *= 80.0/33.0; + break; + case ASPECT_18_11: + this->ratio *= 18.0/11.0; + break; + case ASPECT_15_11: + this->ratio *= 15.0/11.0; + break; + case ASPECT_64_33: + this->ratio *= 64.0/33.0; + break; + case ASPECT_160_99: + this->ratio *= 160.0/99.0; + break; + case ASPECT_4_3: + this->ratio *= 4.0/3.0; + break; + case ASPECT_3_2: + this->ratio *= 3.0/2.0; + break; + case ASPECT_2_1: + this->ratio *= 2.0/1.0; + break; + case ASPECT_EXTENDED_SAR: + this->ratio *= + (double)this->nal_parser->current_nal->sps->vui_parameters.sar_width/ + (double)this->nal_parser->current_nal->sps->vui_parameters.sar_height; + break; + } + } + switch(this->nal_parser->current_nal->sps->profile_idc) { case 100: -- cgit v1.2.3