#include "libavutil/crc.h"
#include "libavutil/intreadwrite.h"
+#include "libavcodec/packet_internal.h"
#include "apetag.h"
#include "avformat.h"
#include "avio_internal.h"
typedef struct TTAMuxContext {
AVIOContext *seek_table;
- AVPacketList *queue, *queue_end;
+ PacketList *queue, *queue_end;
uint32_t nb_samples;
int frame_size;
int last_frame;
TTAMuxContext *tta = s->priv_data;
int ret;
- ret = ff_packet_list_put(&tta->queue, &tta->queue_end, pkt,
- FF_PACKETLIST_FLAG_REF_PACKET);
+ ret = avpriv_packet_list_put(&tta->queue, &tta->queue_end, pkt,
+ av_packet_ref, 0);
if (ret < 0) {
return ret;
}
AVPacket pkt;
while (tta->queue) {
- ff_packet_list_get(&tta->queue, &tta->queue_end, &pkt);
+ avpriv_packet_list_get(&tta->queue, &tta->queue_end, &pkt);
avio_write(s->pb, pkt.data, pkt.size);
av_packet_unref(&pkt);
}
/* Write Seek table */
crc = ffio_get_checksum(tta->seek_table) ^ UINT32_MAX;
avio_wl32(tta->seek_table, crc);
- size = avio_close_dyn_buf(tta->seek_table, &ptr);
+ size = avio_get_dyn_buf(tta->seek_table, &ptr);
avio_write(s->pb, ptr, size);
- av_free(ptr);
/* Write audio data */
tta_queue_flush(s);
ff_ape_write_tag(s);
- avio_flush(s->pb);
return 0;
}
-AVOutputFormat ff_tta_muxer = {
+static void tta_deinit(AVFormatContext *s)
+{
+ TTAMuxContext *tta = s->priv_data;
+
+ ffio_free_dyn_buf(&tta->seek_table);
+ avpriv_packet_list_free(&tta->queue, &tta->queue_end);
+}
+
+const AVOutputFormat ff_tta_muxer = {
.name = "tta",
.long_name = NULL_IF_CONFIG_SMALL("TTA (True Audio)"),
.mime_type = "audio/x-tta",
.audio_codec = AV_CODEC_ID_TTA,
.video_codec = AV_CODEC_ID_NONE,
.init = tta_init,
+ .deinit = tta_deinit,
.write_header = tta_write_header,
.write_packet = tta_write_packet,
.write_trailer = tta_write_trailer,