gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:26:59 25 4
gpt4 key购买 nike

我想用 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 提供创建函数并保护其 dtor,这就是为什么有 release 函数。

但在那种情况下,我使用来自用该 FileByteStream 初始化的解析器的指针和常量引用。我们如何期望 return (trackList.ItemCount()>1);release 之后工作?

根据我所做的实验,它有效,但我可能很幸运!你知道吗?我考虑过将 inputFileStream 作为 shared_ptr 以仅在返回评估后释放资源。它更安全吗?

最佳答案

简单的有什么问题

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

关于c++ - Bento4,实例管理(创建/发布),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18593264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com