@@ -142,23 +142,15 @@ static gchar *get_device_name(gchar *device_name)
142142
143143static const char * get_name (void * type_data )
144144{
145- gchar * * fields = g_regex_split_simple ("(obs-va-va|obs-vaapi-vaapi)(renderD\\d+)?(h264|h265|av1)(lp)?enc" ,
146- type_data , 0 , 0 );
145+ gchar * * fields = g_regex_split_simple ("(obs-va-va)(renderD\\d+)?(h264|h265|av1)(lp)?enc" , type_data , 0 , 0 );
147146
148- gchar * devname = NULL ;
147+ gchar * devname = get_device_name ( g_strcmp0 ( fields [ 2 ], "" ) == 0 ? "renderD128" : fields [ 2 ]) ;
149148
150- if (g_strcmp0 (fields [1 ], "obs-va-va" ) == 0 ) {
151- devname = get_device_name (g_strcmp0 (fields [2 ], "" ) == 0 ? "renderD128" : fields [2 ]);
152- }
153-
154- gchar * name = g_strdup_printf ("VAAPI %s %s%s%s%s" ,
149+ gchar * name = g_strdup_printf ("VAAPI %s on %s%s" ,
155150 g_strcmp0 (fields [3 ], "h264" ) == 0 ? "H.264"
156151 : g_strcmp0 (fields [3 ], "h265" ) == 0 ? "H.265"
157152 : "AV1" ,
158- g_strcmp0 (fields [1 ], "obs-va-va" ) == 0 ? "on " : "" ,
159- g_strcmp0 (fields [1 ], "obs-vaapi-vaapi" ) == 0 ? "" : devname ,
160- g_strcmp0 (fields [4 ], "lp" ) == 0 ? " (Low Power)" : "" ,
161- g_strcmp0 (fields [1 ], "obs-vaapi-vaapi" ) == 0 ? " (Legacy)" : "" );
153+ devname , g_strcmp0 (fields [4 ], "lp" ) == 0 ? " (Low Power)" : "" );
162154
163155 g_free (devname );
164156 g_strfreev (fields );
@@ -267,24 +259,17 @@ static void *create(obs_data_t *settings, obs_encoder_t *encoder)
267259 GstElement * vaapiencoder = NULL ;
268260 GstElement * parser = NULL ;
269261
270- if (g_str_has_prefix (obs_encoder_get_id (encoder ), "obs-va-" )) {
271- gchar * * fields = g_regex_split_simple ("obs-va-va(renderD\\d+)?.*" , obs_encoder_get_id (encoder ), 0 , 0 );
262+ gchar * * fields = g_regex_split_simple ("obs-va-va(renderD\\d+)?.*" , obs_encoder_get_id (encoder ), 0 , 0 );
272263
273- gchar * tmp = g_strdup_printf ("va%spostproc" , fields [1 ]);
274- g_strfreev (fields );
264+ gchar * tmp = g_strdup_printf ("va%spostproc" , fields [1 ]);
265+ g_strfreev (fields );
275266
276- vaapipostproc = gst_element_factory_make (tmp , NULL );
277- g_free (tmp );
267+ vaapipostproc = gst_element_factory_make (tmp , NULL );
268+ g_free (tmp );
278269
279- gst_util_set_object_arg (G_OBJECT (vaapipostproc ), "scale-method" , "hq" );
270+ gst_util_set_object_arg (G_OBJECT (vaapipostproc ), "scale-method" , "hq" );
280271
281- vaapiencoder = gst_element_factory_make (obs_encoder_get_id (encoder ) + strlen ("obs-va-" ), NULL );
282- } else if (g_str_has_prefix (obs_encoder_get_id (encoder ), "obs-vaapi-" )) {
283- g_setenv ("GST_VAAPI_DRM_DEVICE" , obs_data_get_string (settings , "device" ), TRUE);
284-
285- vaapipostproc = gst_element_factory_make ("vaapipostproc" , NULL );
286- vaapiencoder = gst_element_factory_make (obs_encoder_get_id (encoder ) + strlen ("obs-vaapi-" ), NULL );
287- }
272+ vaapiencoder = gst_element_factory_make (obs_encoder_get_id (encoder ) + strlen ("obs-va-" ), NULL );
288273
289274 if (g_strcmp0 (obs_encoder_get_codec (encoder ), "h264" ) == 0 ) {
290275 parser = gst_element_factory_make ("h264parse" , NULL );
@@ -498,15 +483,7 @@ static bool encode(void *data, struct encoder_frame *frame, struct encoder_packe
498483
499484static void get_defaults2 (obs_data_t * settings , void * type_data )
500485{
501- GstElement * encoder = NULL ;
502-
503- if (g_str_has_prefix (type_data , "obs-va-" )) {
504- encoder = gst_element_factory_make (type_data + strlen ("obs-va-" ), NULL );
505- } else if (g_str_has_prefix (type_data , "obs-vaapi-" )) {
506- encoder = gst_element_factory_make (type_data + strlen ("obs-vaapi-" ), NULL );
507-
508- obs_data_set_default_string (settings , "device" , "" );
509- }
486+ GstElement * encoder = gst_element_factory_make (type_data + strlen ("obs-va-" ), NULL );
510487
511488 guint num_properties ;
512489 GParamSpec * * property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (encoder ), & num_properties );
@@ -599,63 +576,13 @@ static void get_defaults2(obs_data_t *settings, void *type_data)
599576 gst_object_unref (encoder );
600577}
601578
602- static void populate_devices (obs_property_t * prop )
603- {
604- struct dirent * * list ;
605- int n = scandir ("/dev/dri/by-path/" , & list , scanfilter , versionsort );
606-
607- obs_property_list_add_string (prop , "Default" , "" );
608-
609- struct pci_access * pci = pci_alloc ();
610- pci_init (pci );
611-
612- for (int i = 0 ; i < n ; i ++ ) {
613- char device [1024 ] = {};
614- int domain , bus , dev , fun ;
615-
616- sscanf (list [i ]-> d_name , "%*[^-]-%x:%x:%x.%x%*s" , & domain , & bus , & dev , & fun );
617-
618- struct pci_dev * pci_dev = pci_get_dev (pci , domain , bus , dev , fun );
619- if (pci_dev == NULL ) {
620- obs_property_list_add_string (prop , list [i ]-> d_name , list [i ]-> d_name );
621- continue ;
622- }
623-
624- pci_fill_info (pci_dev , PCI_FILL_IDENT );
625- pci_lookup_name (pci , device , sizeof (device ), PCI_LOOKUP_DEVICE , pci_dev -> vendor_id , pci_dev -> device_id );
626- pci_free_dev (pci_dev );
627-
628- obs_property_list_add_string (prop , device , list [i ]-> d_name );
629- }
630-
631- pci_cleanup (pci );
632-
633- while (n -- ) {
634- free (list [n ]);
635- }
636- free (list );
637- }
638-
639579static obs_properties_t * get_properties2 (void * data , void * type_data )
640580{
641- GstElement * encoder = NULL ;
581+ GstElement * encoder = gst_element_factory_make ( type_data + strlen ( "obs-va-" ), NULL ) ;
642582 obs_property_t * property = NULL ;
643583
644584 obs_properties_t * properties = obs_properties_create ();
645585
646- if (g_str_has_prefix (type_data , "obs-va-" )) {
647- encoder = gst_element_factory_make (type_data + strlen ("obs-va-" ), NULL );
648- } else if (g_str_has_prefix (type_data , "obs-vaapi-" )) {
649- encoder = gst_element_factory_make (type_data + strlen ("obs-vaapi-" ), NULL );
650-
651- property = obs_properties_add_list (properties , "device" , "device" , OBS_COMBO_TYPE_LIST ,
652- OBS_COMBO_FORMAT_STRING );
653-
654- populate_devices (property );
655-
656- obs_property_set_long_description (property , "Specify DRM device to use" );
657- }
658-
659586 guint num_properties ;
660587 GParamSpec * * property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (encoder ), & num_properties );
661588
@@ -820,34 +747,6 @@ MODULE_EXPORT bool obs_module_load(void)
820747
821748 gst_plugin_feature_list_free (list );
822749
823- // vaapi.caps = OBS_ENCODER_CAP_DEPRECATED;
824-
825- list = gst_registry_get_feature_list_by_plugin (gst_registry_get (), "vaapi" );
826-
827- for (GList * elem = list ; elem != NULL ; elem = elem -> next ) {
828- GstPluginFeature * feature = elem -> data ;
829-
830- gchar * * fields =
831- g_regex_split_simple ("vaapi(h264|h265)enc" , gst_plugin_feature_get_name (feature ), 0 , 0 );
832- if (g_strcmp0 (fields [0 ], "" ) != 0 ) {
833- g_strfreev (fields );
834- continue ;
835- }
836- if (g_strcmp0 (fields [1 ], "h264" ) == 0 ) {
837- vaapi .codec = "h264" ;
838- } else {
839- vaapi .codec = "hevc" ;
840- }
841- g_strfreev (fields );
842-
843- vaapi .id = vaapi .type_data = g_strdup_printf ("obs-vaapi-%s" , gst_plugin_feature_get_name (feature ));
844- g_hash_table_insert (hash_table , vaapi .type_data , vaapi .type_data );
845- obs_register_encoder (& vaapi );
846- blog (LOG_INFO , "[obs-vaapi] found %s" , gst_plugin_feature_get_name (feature ));
847- }
848-
849- gst_plugin_feature_list_free (list );
850-
851750 return true;
852751}
853752
0 commit comments