summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
Diffstat (limited to 'gst')
-rw-r--r--gst/videoparsers/gsth265parse.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index efaf916b2..fc6023f1a 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -1850,6 +1850,106 @@ get_compatible_profile_caps (GstH265SPS * sps, GstH265Profile profile)
(GST_H265_PROFILE_SCREEN_EXTENDED_HIGH_THROUGHPUT_444_14);
break;
}
+ /* All the -intra profiles can map to non-intra profiles, except
+ the monochrome case for main and main-10. */
+ case GST_H265_PROFILE_MAIN_INTRA:
+ {
+ if (sps->chroma_format_idc == 1) {
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN);
+
+ /* Add all main compatible profiles without monochrome. */
+ /* A.3.3 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_10);
+
+ /* A.3.5 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444_10);
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444_12);
+
+ /* A.3.7 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN);
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_10);
+ profiles |=
+ profile_to_flag
+ (GST_H265_PROFILE_SCREEN_EXTENDED_HIGH_THROUGHPUT_444);
+ profiles |=
+ profile_to_flag
+ (GST_H265_PROFILE_SCREEN_EXTENDED_HIGH_THROUGHPUT_444_10);
+ profiles |=
+ profile_to_flag
+ (GST_H265_PROFILE_SCREEN_EXTENDED_HIGH_THROUGHPUT_444_14);
+
+ /* G.11.1.1 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_MULTIVIEW_MAIN);
+
+ /* H.11.1.1 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCALABLE_MAIN);
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCALABLE_MAIN_10);
+
+ /* I.11.1.1 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_3D_MAIN);
+ }
+
+ /* Add all main compatible profiles with monochrome. */
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_12);
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_422_10);
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_422_12);
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_444);
+ profiles |=
+ profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_444_10);
+ break;
+ }
+ case GST_H265_PROFILE_MAIN_10_INTRA:
+ {
+ if (sps->chroma_format_idc == 1) {
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_10);
+
+ /* Add all main-10 compatible profiles without monochrome. */
+ /* A.3.5 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444_10);
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444_12);
+
+ /* A.3.7 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_10);
+
+ /* H.11.1.1 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCALABLE_MAIN_10);
+ }
+
+ /* Add all main-10 compatible profiles with monochrome. */
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_12);
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_422_10);
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_422_12);
+ break;
+ }
+ case GST_H265_PROFILE_MAIN_12_INTRA:
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_12);
+ break;
+ case GST_H265_PROFILE_MAIN_422_10_INTRA:
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_422_10);
+ break;
+ case GST_H265_PROFILE_MAIN_422_12_INTRA:
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_422_12);
+ break;
+ case GST_H265_PROFILE_MAIN_444_INTRA:
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444);
+
+ /* Add all main444 compatible profiles. */
+ /* A.3.7 */
+ profiles |= profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_444);
+ profiles |=
+ profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_444_10);
+ break;
+ case GST_H265_PROFILE_MAIN_444_10_INTRA:
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444_10);
+
+ /* Add all main444-10 compatible profiles. */
+ /* A.3.7 */
+ profiles |=
+ profile_to_flag (GST_H265_PROFILE_SCREEN_EXTENDED_MAIN_444_10);
+ break;
+ case GST_H265_PROFILE_MAIN_444_12_INTRA:
+ profiles |= profile_to_flag (GST_H265_PROFILE_MAIN_444_12);
+ break;
default:
break;
}