summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorHe Junyan <junyan.he@intel.com>2021-06-26 15:11:47 +0800
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-07-02 10:27:41 +0000
commit42a861fe591613313dc6bd6b9c3e0a660d637fb3 (patch)
tree918dbd07011b4eedcf27449377668a51f125b091 /gst
parentac51e4192838ccdc8f4a555b784fc2f277031f0c (diff)
downloadgstreamer-plugins-bad-42a861fe591613313dc6bd6b9c3e0a660d637fb3.tar.gz
h265parse: Map -intra profiles to non-intra compatible profiles.
All the -intra profiles can map to non-intra profiles as compatible profiles, except the monochrome case for main and main-10. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2322>
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;
}