1

GStreamer でオーディオ ファイルを録音するアプリケーションを開発しています。このアプリの機能の 1 つは、ファイルの記録プロセスに関する情報 (名前、タイプ、サイズ) を含むラベルを含む 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