89 lines
3.8 KiB
Diff
89 lines
3.8 KiB
Diff
diff -up cheese-2.23.91/src/cheese-webcam.c.foo cheese-2.23.91/src/cheese-webcam.c
|
|
--- cheese-2.23.91/src/cheese-webcam.c.foo 2008-09-03 20:27:25.000000000 +0200
|
|
+++ cheese-2.23.91/src/cheese-webcam.c 2008-09-03 20:30:32.000000000 +0200
|
|
@@ -90,7 +90,6 @@ typedef struct
|
|
int y_resolution;
|
|
int selected_device;
|
|
CheeseVideoFormat *current_format;
|
|
- GHashTable *supported_resolutions;
|
|
|
|
CheeseFlash *flash;
|
|
} CheeseWebcamPrivate;
|
|
@@ -359,6 +358,8 @@ cheese_webcam_get_video_devices_from_hal
|
|
priv->webcam_devices[priv->num_webcam_devices].num_video_formats = 0;
|
|
priv->webcam_devices[priv->num_webcam_devices].video_formats =
|
|
g_array_new (FALSE, FALSE, sizeof (CheeseVideoFormat));
|
|
+ priv->webcam_devices[priv->num_webcam_devices].supported_resolutions =
|
|
+ g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
|
|
priv->num_webcam_devices++;
|
|
|
|
libhal_free_string (device);
|
|
@@ -533,8 +534,6 @@ static void
|
|
cheese_webcam_get_webcam_device_data (CheeseWebcam *webcam,
|
|
CheeseWebcamDevice *webcam_device)
|
|
{
|
|
- CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
|
|
-
|
|
char *pipeline_desc;
|
|
GstElement *pipeline;
|
|
GError *err;
|
|
@@ -597,7 +596,7 @@ cheese_webcam_get_webcam_device_data (Ch
|
|
CheeseVideoFormat video_format;
|
|
|
|
video_format = g_array_index (webcam_device->video_formats, CheeseVideoFormat, i);
|
|
- g_hash_table_insert (priv->supported_resolutions,
|
|
+ g_hash_table_insert (webcam_device->supported_resolutions,
|
|
g_strdup_printf ("%ix%i", video_format.width,
|
|
video_format.height),
|
|
&g_array_index (webcam_device->video_formats,
|
|
@@ -715,7 +714,7 @@ cheese_webcam_create_webcam_source_bin (
|
|
/* Use the previously set resolution from gconf if it is set and the
|
|
* camera supports it. */
|
|
if (priv->x_resolution != 0 && priv->y_resolution != 0)
|
|
- format = g_hash_table_lookup (priv->supported_resolutions, resolution);
|
|
+ format = g_hash_table_lookup (selected_webcam->supported_resolutions, resolution);
|
|
|
|
if (!format)
|
|
{
|
|
@@ -1260,13 +1259,15 @@ cheese_webcam_finalize (GObject *object)
|
|
g_free (g_array_index (priv->webcam_devices[i].video_formats, CheeseVideoFormat, j).framerates);
|
|
g_free (g_array_index (priv->webcam_devices[i].video_formats, CheeseVideoFormat, j).mimetype);
|
|
}
|
|
+ g_free (priv->webcam_devices[i].video_device);
|
|
g_free (priv->webcam_devices[i].hal_udi);
|
|
+ g_free (priv->webcam_devices[i].gstreamer_src);
|
|
+ g_free (priv->webcam_devices[i].product_name);
|
|
g_array_free (priv->webcam_devices[i].video_formats, TRUE);
|
|
+ g_hash_table_destroy (priv->webcam_devices[i].supported_resolutions);
|
|
}
|
|
g_free (priv->webcam_devices);
|
|
|
|
- g_hash_table_destroy (priv->supported_resolutions);
|
|
-
|
|
G_OBJECT_CLASS (cheese_webcam_parent_class)->finalize (object);
|
|
}
|
|
|
|
@@ -1403,10 +1404,6 @@ cheese_webcam_init (CheeseWebcam *webcam
|
|
priv->webcam_devices = NULL;
|
|
priv->device_name = NULL;
|
|
|
|
- priv->supported_resolutions = g_hash_table_new_full (g_str_hash,
|
|
- g_str_equal,
|
|
- g_free, NULL);
|
|
-
|
|
priv->flash = cheese_flash_new ();
|
|
}
|
|
|
|
diff -up cheese-2.23.91/src/cheese-webcam.h.foo cheese-2.23.91/src/cheese-webcam.h
|
|
--- cheese-2.23.91/src/cheese-webcam.h.foo 2008-09-01 20:47:10.000000000 +0200
|
|
+++ cheese-2.23.91/src/cheese-webcam.h 2008-09-03 20:27:59.000000000 +0200
|
|
@@ -59,6 +59,8 @@ typedef struct
|
|
char *product_name;
|
|
int num_video_formats;
|
|
GArray *video_formats;
|
|
+ /* Hash table for resolution based lookup of video_formats */
|
|
+ GHashTable *supported_resolutions;
|
|
} CheeseWebcamDevice;
|
|
|
|
typedef enum
|