0

Bento4 を使用して MP4 ファイルを解析し、1 つまたは複数のトラックがあるかどうかを確認したいと考えています。

    AP4_ByteStream* inputFileStream = NULL;
    AP4_Result res = AP4_FileByteStream::Create(file.c_str(), AP4_FileByteStream::STREAM_MODE_READ, inputFileStream);
    if(res != AP4_SUCCESS || inputFileStream == NULL) {throw std::logic_error("Error while analyzing " + file);}

    AP4_File inputFileParser(*inputFileStream);
    AP4_Movie* pMovie = inputFileParser.GetMovie();
    const AP4_List< AP4_Track >& trackList = pMovie->GetTracks();
    inputFileStream->Release();
    return (trackList.ItemCount()>1);

クラス AP4_FileByteStream は create 関数を提供し、その dtor が保護されているため、release関数が存在します。

ただし、その場合、その FileByteStream で初期化されたパーサーからのポインターと const 参照を使用します。return (trackList.ItemCount()>1);の後の作業をどのように期待できreleaseますか?

私が行った実験に基づいて、それは動作しますが、私は幸運かもしれません! 何か考えはありますか?リターン評価後にのみリソースを解放するためにinputFileStream、 を配置することを考えました。shared_ptrより安全ですか?

4

1 に答える 1

1

単純に何か問題があります

bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;
于 2013-09-03T13:44:26.533 に答える