繁体   English   中英

Bento4,实例管理(创建/发布)

[英]Bento4, instance management (create/release)

我想使用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来仅在返回评估之后才释放资源。 它更安全吗?

简单有什么问题

bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM