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
より安全ですか?