summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2008-12-15 15:24:54 +0000
committerJulian Scheel <julian@jusst.de>2008-12-15 15:24:54 +0000
commitc62e5fb1b42ff6ceaede676e154b22872c0c11a7 (patch)
treec8f0be5b94a6c42b76d625ae3ca328ea44e2bcd9 /src
parentdd0712cc351add6f93b07a122e40ce4c842591a2 (diff)
downloadxine-lib-c62e5fb1b42ff6ceaede676e154b22872c0c11a7.tar.gz
xine-lib-c62e5fb1b42ff6ceaede676e154b22872c0c11a7.tar.bz2
Fix aspect ratio.
Diffstat (limited to 'src')
-rw-r--r--src/libvdpau/h264_parser.c2
-rw-r--r--src/libvdpau/nal.h3
-rw-r--r--src/libvdpau/vdpau_h264.c58
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: