Libav
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
hevc_sei.c
Go to the documentation of this file.
1
/*
2
* HEVC Supplementary Enhancement Information messages
3
*
4
* Copyright (C) 2012 - 2013 Guillaume Martres
5
* Copyright (C) 2012 - 2013 Gildas Cocherel
6
* Copyright (C) 2013 Vittorio Giovara
7
*
8
* This file is part of Libav.
9
*
10
* Libav is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU Lesser General Public
12
* License as published by the Free Software Foundation; either
13
* version 2.1 of the License, or (at your option) any later version.
14
*
15
* Libav is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
* Lesser General Public License for more details.
19
*
20
* You should have received a copy of the GNU Lesser General Public
21
* License along with Libav; if not, write to the Free Software
22
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23
*/
24
25
#include "
golomb.h
"
26
#include "
hevc.h
"
27
28
static
void
decode_nal_sei_decoded_picture_hash
(
HEVCContext
*s)
29
{
30
int
cIdx, i;
31
GetBitContext
*gb = &s->
HEVClc
.
gb
;
32
uint8_t
hash_type =
get_bits
(gb, 8);
33
34
for
(cIdx = 0; cIdx < 3; cIdx++) {
35
if
(hash_type == 0) {
36
s->
is_md5
= 1;
37
for
(i = 0; i < 16; i++)
38
s->
md5
[cIdx][i] =
get_bits
(gb, 8);
39
}
else
if
(hash_type == 1) {
40
// picture_crc = get_bits(gb, 16);
41
skip_bits
(gb, 16);
42
}
else
if
(hash_type == 2) {
43
// picture_checksum = get_bits(gb, 32);
44
skip_bits
(gb, 32);
45
}
46
}
47
}
48
49
static
void
decode_nal_sei_frame_packing_arrangement
(
HEVCContext
*s)
50
{
51
GetBitContext
*gb = &s->
HEVClc
.
gb
;
52
53
get_ue_golomb
(gb);
// frame_packing_arrangement_id
54
s->
sei_frame_packing_present
= !
get_bits1
(gb);
55
56
if
(s->
sei_frame_packing_present
) {
57
s->
frame_packing_arrangement_type
=
get_bits
(gb, 7);
58
s->
quincunx_subsampling
=
get_bits1
(gb);
59
s->
content_interpretation_type
=
get_bits
(gb, 6);
60
61
// the following skips spatial_flipping_flag frame0_flipped_flag
62
// field_views_flag current_frame_is_frame0_flag
63
// frame0_self_contained_flag frame1_self_contained_flag
64
skip_bits
(gb, 6);
65
66
if
(!s->
quincunx_subsampling
&& s->
frame_packing_arrangement_type
!= 5)
67
skip_bits
(gb, 16);
// frame[01]_grid_position_[xy]
68
skip_bits
(gb, 8);
// frame_packing_arrangement_reserved_byte
69
skip_bits1
(gb);
// frame_packing_arrangement_persistance_flag
70
}
71
skip_bits1
(gb);
// upsampled_aspect_ratio_flag
72
}
73
74
static
int
decode_nal_sei_message
(
HEVCContext
*s)
75
{
76
GetBitContext
*gb = &s->
HEVClc
.
gb
;
77
78
int
payload_type = 0;
79
int
payload_size = 0;
80
int
byte = 0xFF;
81
av_log
(s->
avctx
,
AV_LOG_DEBUG
,
"Decoding SEI\n"
);
82
83
while
(byte == 0xFF) {
84
byte =
get_bits
(gb, 8);
85
payload_type += byte;
86
}
87
byte = 0xFF;
88
while
(byte == 0xFF) {
89
byte =
get_bits
(gb, 8);
90
payload_size += byte;
91
}
92
if
(s->
nal_unit_type
==
NAL_SEI_PREFIX
) {
93
if
(payload_type == 256)
94
decode_nal_sei_decoded_picture_hash
(s);
95
else
if
(payload_type == 45)
96
decode_nal_sei_frame_packing_arrangement
(s);
97
else
{
98
av_log
(s->
avctx
,
AV_LOG_DEBUG
,
"Skipped PREFIX SEI %d\n"
, payload_type);
99
skip_bits
(gb, 8 * payload_size);
100
}
101
}
else
{
/* nal_unit_type == NAL_SEI_SUFFIX */
102
if
(payload_type == 132)
103
decode_nal_sei_decoded_picture_hash
(s);
104
else
{
105
av_log
(s->
avctx
,
AV_LOG_DEBUG
,
"Skipped SUFFIX SEI %d\n"
, payload_type);
106
skip_bits
(gb, 8 * payload_size);
107
}
108
}
109
return
0;
110
}
111
112
static
int
more_rbsp_data
(
GetBitContext
*gb)
113
{
114
return
get_bits_left
(gb) > 0 &&
show_bits
(gb, 8) != 0x80;
115
}
116
117
int
ff_hevc_decode_nal_sei
(
HEVCContext
*s)
118
{
119
do
{
120
decode_nal_sei_message
(s);
121
}
while
(
more_rbsp_data
(&s->
HEVClc
.
gb
));
122
return
0;
123
}
Generated on Thu Sep 30 2021 23:03:11 for Libav by
1.8.1.2