static void gavf_stream_free(gavf_stream_t * s) { if(s->asrc) gavl_audio_source_destroy(s->asrc); if(s->vsrc) gavl_video_source_destroy(s->vsrc); if(s->psrc) gavl_packet_source_destroy(s->psrc); if(s->asink) gavl_audio_sink_destroy(s->asink); if(s->vsink) gavl_video_sink_destroy(s->vsink); if(s->psink) gavl_packet_sink_destroy(s->psink); if(s->pb) gavf_packet_buffer_destroy(s->pb); if(s->aframe) { gavl_audio_frame_null(s->aframe); gavl_audio_frame_destroy(s->aframe); } if(s->vframe) { gavl_video_frame_null(s->vframe); gavl_video_frame_destroy(s->vframe); } }
void gavf_close(gavf_t * g) { int i; if(g->wr) { if(g->streams) { /* Flush packets if any */ gavf_flush_packets(g, NULL); /* Append final sync header */ write_sync_header(g, -1, NULL); } /* Write footer */ if(!gavf_footer_write(g)) return; } /* Free stuff */ if(g->streams) { for(i = 0; i < g->ph.num_streams; i++) gavf_stream_free(&g->streams[i]); free(g->streams); } gavf_sync_index_free(&g->si); gavf_packet_index_free(&g->pi); gavf_program_header_free(&g->ph); if(g->cl) gavl_chapter_list_destroy(g->cl); if(g->write_vframe) { gavl_video_frame_null(g->write_vframe); gavl_video_frame_destroy(g->write_vframe); } if(g->write_aframe) { gavl_audio_frame_null(g->write_aframe); gavl_audio_frame_destroy(g->write_aframe); } if(g->sync_pts) free(g->sync_pts); gavl_packet_free(&g->write_pkt); gavf_buffer_free(&g->pkt_buf); gavf_buffer_free(&g->meta_buf); gavl_metadata_free(&g->metadata); free(g); }
static void close_gavf_audio(bgav_stream_t * s) { gavf_audio_t * priv = s->decoder_priv; if(priv->frame) { gavl_audio_frame_null(priv->frame); gavl_audio_frame_destroy(priv->frame); } free(priv); }