1

我正在开发一个使用 GStreamer 录制音频文件的应用程序。此应用程序的一个功能是显示带有标签的 GTK 对话框,其中包含有关文件记录过程的信息(名称、类型和大小)。

代码:

static int timeout_id = -1;
static GtkWidget *file_label, *type_label, *size_label;

static gboolean timeout_cb(gpointer data)
{
    GFile *session_file;
    GFileInfo *info;

    session_file = g_file_new_for_path (path);
    info = g_file_query_info (session_file,
                  G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
                  G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
                  G_FILE_ATTRIBUTE_STANDARD_SIZE,
                  G_FILE_QUERY_INFO_NONE,
                  NULL,
                  NULL);
    if (info != NULL) {
            /* name */
            const gchar *display_name = g_file_info_get_attribute_string (info,
                                    G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);

            gtk_label_set_text (GTK_LABEL (file_label), display_name);

            /* type */
            const gchar *type = g_file_info_get_attribute_string (info,
                                                    G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);

            gtk_label_set_text (GTK_LABEL (type_label), type);

            /* size */
            guint64 size = g_file_info_get_attribute_uint64 (info,
                               G_FILE_ATTRIBUTE_STANDARD_SIZE);
            gchar *tmp = g_format_size_full (size, G_FORMAT_SIZE_LONG_FORMAT);

            gtk_label_set_text (GTK_LABEL (size_label), tmp);

            g_free (tmp);

            g_object_unref (info);
    }
    g_object_unref (file);

    return TRUE;
}

void run_status_window(Record *record)
{
    timeout_id = g_timeout_add(500, (GSourceFunc) timeout_cb, record);
}

我正在使用文件信息和属性的查询,并以 500 毫秒的间隔调用它。

我的问题是如何优化此功能,因为名称和类型在录制过程中不太可能发生变化。

谢谢

4

0 回答 0