extern "C" {
#include <libavformat/avformat.h>
+#include <libavutil/channel_layout.h>
}
using namespace std;
bool write_buffered_frames(AVFormatContext *avctx, const vector<BufferedFrame> &buffered_frames)
{
for (const BufferedFrame &frame : buffered_frames) {
- AVPacket pkt;
- av_init_packet(&pkt);
- pkt.stream_index = frame.video_stream_idx;
- pkt.data = (uint8_t *)frame.data.data();
- pkt.size = frame.data.size();
- pkt.pts = frame.pts;
- pkt.dts = frame.pts;
- pkt.flags = AV_PKT_FLAG_KEY;
+ AVPacketWithDeleter pkt = av_packet_alloc_unique();
+ pkt->stream_index = frame.video_stream_idx;
+ pkt->data = (uint8_t *)frame.data.data();
+ pkt->size = frame.data.size();
+ pkt->pts = frame.pts;
+ pkt->dts = frame.pts;
+ pkt->flags = AV_PKT_FLAG_KEY;
- if (av_write_frame(avctx, &pkt) < 0) {
+ if (av_write_frame(avctx, pkt.get()) < 0) {
return false;
}
}
avstream_audio->time_base = AVRational{ 1, TIMEBASE };
avstream_audio->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
avstream_audio->codecpar->codec_id = AV_CODEC_ID_PCM_S32LE;
- avstream_audio->codecpar->channel_layout = AV_CH_LAYOUT_STEREO;
- avstream_audio->codecpar->channels = 2;
+ avstream_audio->codecpar->ch_layout.order = AV_CHANNEL_ORDER_NATIVE;
+ avstream_audio->codecpar->ch_layout.nb_channels = 2;
+ avstream_audio->codecpar->ch_layout.u.mask = AV_CH_LAYOUT_STEREO;
avstream_audio->codecpar->sample_rate = OUTPUT_FREQUENCY;
audio_streams.push_back(avstream_audio);
}