我想使用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函数的原因。
但在这种情况下,我使用指针和const引用,它们来自用FileByteStream初始化的解析器。我们怎么能期望return (trackList.ItemCount()>1);在release之后工作呢?
根据我所做的实验,它是有效的,但我可能是幸运的!你知不知道?我考虑将inputFileStream作为一个shared_ptr,只在返回评估之后才释放资源。它更安全吗?
发布于 2013-09-03 13:44:26
任何简单的错误
bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;https://stackoverflow.com/questions/18593264
复制相似问题