Я хочу использовать Bento4 для разбора файла MP4 и проверить, есть ли у них 1 или несколько треков.Bento4, управление экземплярами (создание/выпуск)
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 обеспечивает функцию создания и защищало его dtor, вот почему существует release
функции.
Но в этом случае я использую указатель и ссылку на const, исходящую от синтаксического анализатора, инициализированного этим FileByteStream. Как мы можем ожидать, что return (trackList.ItemCount()>1);
работает после release
?
Основываясь на опыте, который я сделал, он работает, но мне может быть повезло! Есть ли у вас какие-либо идеи? Я думал о том, чтобы положить inputFileStream
в качестве shared_ptr
, чтобы освободить ресурсы только после оценки возврата. Это более безопасно?
нет Bento4 тегов и у меня не хватает репутации, чтобы создать его ... – alexbuisson