From 18e3d61e9e3b52c177aa7a1f2a054a8a753e1b09 Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Wed, 2 Jul 2014 11:58:19 -0400 Subject: h264: parse display orientation SEI message Signed-off-by: Vittorio Giovara --- libavcodec/h264_sei.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libavcodec/h264_sei.c') diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c index 6fca2c32a9..33230b7dfa 100644 --- a/libavcodec/h264_sei.c +++ b/libavcodec/h264_sei.c @@ -41,6 +41,7 @@ void ff_h264_reset_sei(H264Context *h) h->sei_cpb_removal_delay = -1; h->sei_buffering_period_present = 0; h->sei_frame_packing_present = 0; + h->sei_display_orientation_present = 0; } static int decode_picture_timing(H264Context *h) @@ -199,6 +200,22 @@ static int decode_frame_packing_arrangement(H264Context *h) return 0; } +static int decode_display_orientation(H264Context *h) +{ + h->sei_display_orientation_present = !get_bits1(&h->gb); + + if (h->sei_display_orientation_present) { + h->sei_hflip = get_bits1(&h->gb); // hor_flip + h->sei_vflip = get_bits1(&h->gb); // ver_flip + + h->sei_anticlockwise_rotation = get_bits(&h->gb, 16); + get_ue_golomb(&h->gb); // display_orientation_repetition_period + skip_bits1(&h->gb); // display_orientation_extension_flag + } + + return 0; +} + int ff_h264_decode_sei(H264Context *h) { while (get_bits_left(&h->gb) > 16) { @@ -246,6 +263,11 @@ int ff_h264_decode_sei(H264Context *h) if (ret < 0) return ret; break; + case SEI_TYPE_DISPLAY_ORIENTATION: + ret = decode_display_orientation(h); + if (ret < 0) + return ret; + break; default: av_log(h->avctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type); skip_bits(&h->gb, 8 * size); -- cgit v1.2.3