1

gstreamer-1.0 に基づいて、playbin を使用して特定のファイルをループ用にデコードする簡単なコードを作成しました。playbin が要素 mpeg2dec 要素を作成するたびに、要素には新しい名前が付けられます。最初の名前は「mepg2dec0」である可能性があり、ファイルが再度再生されると、接尾辞インデックスが「mpeg2dec1」、「mpeg2dec2」などに増加します。

コードの引用の一部を次に示します。

do {
    playbin=gst_element_factory_make("playbin", "play");
    g_object_set(G_OBJECT(playbin), "uri", "file:///home/gst/Videos/1.ts", NULL);
    /* add message receivers ... */
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_PAUSED);
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_PLAY);
    /* wait until got EOS */
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_PAUSED);
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_NULL);
    gst_object_unref(GST_ELEMENT(playbin));
} while(1);

このサフィックス インデックスの増加は、解放されていない要素のメモリ リークの可能性を意味しますか?

4

1 に答える 1

0

サフィックスの増分は主に、何かが現在のサフィックスを追跡することを意味します。

これは、gstreamer がすべての要素を割り当て、それらのリストを維持している可能性があります新しい要素が追加されると、gstreamer は現在割り当てられている要素名をチェックし、この知識に基づいて新しい名前を生成できます (たとえば、最初に「mepg2dec0」を名前として試し、それが既に使用されている場合は「mepg2dec1」を試します。 、自由な名前が見つかるまで)。

ただし、この何かは、新しい要素が作成されるたびに単調に増加する (要素タイプごとに) 単一の整数になることもあります (インデックスの再利用なし) (そして、要素が破棄されるかどうか、およびどの要素が破棄されるかは完全に無視されます)。

あなたの質問に答えるために:

いいえ、各要素に新しい名前を付けても、メモリ リークがあるかどうかを示すものではありません。

于 2013-04-22T12:18:25.120 に答える