この質問では、QImage オブジェクトに関連付けられた外部バッファー オブジェクトの寿命を維持するためのベスト プラクティスを知りたいと思います。
バックグラウンド
QTで非圧縮画像ファイルビューアを開発しています。ファイルから YV12 データを読み取り、RGB フレーム バッファーに変換し、QImage オブジェクトを構築し、レンダリングのために UI レイヤーに渡します。
YV12ファイルリーダーはこんな感じ。
class YV12Frame
{
public:
YV12Frame(std::string const& fileName)
{
// Initialize m_frameBuffer
// ... (Omitted for brevity)
}
QImage GetQImage()
{
// Build QImage object
return QImage(m_frameBuffer, WIDTH, HEIGHT, QImage::Format_RGB32);
}
private:
unsigned char m_frameBuffer[WIDTH * HEIGHT * 4];
};
QT のドキュメントにあるように、QImage オブジェクトの存続期間中、YV12Frame オブジェクトを有効に維持する必要があります。
UI レイヤーは、浅いコピーまたは深いコピーを介して QImage オブジェクトをコピーできます。つまり、一度にフレーム バッファを参照する QImage オブジェクトの数が不明な場合があります。
質問
YV12Frame オブジェクトを安全に削除するタイミングを知るにはどうすればよいですか?
予想される答え
「ねえ、私はフレーム バッファを参照する最後の QImage オブジェクトであり、削除されようとしています。今すぐフレーム バッファを安全に削除できます。」という通知 (コールバックなど) があります。
しかし、そのような通知は見つかりませんでした。