39 Q_ASSERT(!filePath.isEmpty());
41 const QByteArray filePathUtf8 = filePath.toUtf8();
43 std::unique_ptr<
char,
decltype(&av_free)> url(
44 reinterpret_cast<
char *>(av_malloc(filePathUtf8.size() + 1)), &av_free);
45 memcpy(url.get(), filePathUtf8.constData(), filePathUtf8.size() + 1);
48 auto result = avio_open2(&m_avFormatContext->pb, url.get(), AVIO_FLAG_WRITE,
nullptr,
nullptr);
50 qCDebug(qLcEncodingFormatContext)
51 <<
"opened by file path:" << url.get() <<
", result:" << result;
53 Q_ASSERT(m_avFormatContext->url ==
nullptr);
55 m_avFormatContext->url = url.release();
57 openAVIOWithQFile(filePath);
97 if (m_avFormatContext->url && *m_avFormatContext->url !=
'\0') {
98 auto closeResult = avio_closep(&m_avFormatContext->pb);
99 Q_ASSERT(closeResult == 0);
101 av_free(std::exchange(m_avFormatContext->pb->buffer,
nullptr));
102 avio_context_free(&m_avFormatContext->pb);
107 av_freep(&m_avFormatContext->url);
108 m_outputFile.reset();
110 Q_ASSERT(!m_outputFile);