2 #include "mpeg3protos.h"
6 mpeg3_atrack_t
* mpeg3_new_atrack(mpeg3_t
*file
,
9 mpeg3_demuxer_t
*demuxer
,
12 mpeg3_atrack_t
*new_atrack
;
14 new_atrack
= calloc(1, sizeof(mpeg3_atrack_t
));
15 if(file
->channel_counts
)
16 new_atrack
->channels
= file
->channel_counts
[number
];
17 new_atrack
->sample_rate
= 0;
18 new_atrack
->total_samples
= 0;
19 new_atrack
->demuxer
= mpeg3_new_demuxer(file
, 1, 0, custom_id
);
22 mpeg3demux_copy_titles(new_atrack
->demuxer
, demuxer
);
24 new_atrack
->current_position
= 0;
25 new_atrack
->pid
= custom_id
;
29 if(file
->sample_offsets
)
31 new_atrack
->sample_offsets
= file
->sample_offsets
[number
];
32 new_atrack
->total_sample_offsets
= file
->total_sample_offsets
[number
];
33 new_atrack
->demuxer
->stream_end
= file
->audio_eof
[number
];
36 new_atrack
->audio
= mpeg3audio_new(file
,
40 if(!new_atrack
->audio
)
43 mpeg3_delete_atrack(file
, new_atrack
);
50 int mpeg3_delete_atrack(mpeg3_t
*file
, mpeg3_atrack_t
*atrack
)
52 if(atrack
->audio
) mpeg3audio_delete(atrack
->audio
);
53 if(atrack
->demuxer
) mpeg3_delete_demuxer(atrack
->demuxer
);
54 if(atrack
->sample_offsets
&& atrack
->private_offsets
)
56 free(atrack
->sample_offsets
);
62 void mpeg3_append_samples(mpeg3_atrack_t
*atrack
, int64_t offset
)
64 if(atrack
->total_sample_offsets
>= atrack
->sample_offsets_allocated
)
66 atrack
->sample_offsets_allocated
=
67 MAX(atrack
->total_sample_offsets
* 2, 1024);
68 atrack
->sample_offsets
= realloc(atrack
->sample_offsets
,
69 sizeof(int64_t) * atrack
->sample_offsets_allocated
);
71 atrack
->sample_offsets
[atrack
->total_sample_offsets
++] =
73 atrack
->private_offsets
= 1;