On Sun, Jul 31, 2016 at 01:03:45PM -0300, James Almer wrote: > Signed-off-by: James Almer <[email protected]> [...] > +#include "apetag.h" > +#include "avformat.h" > +#include "avio_internal.h" > +#include "internal.h" > + > +typedef struct TTAMuxContext { > + AVIOContext *seek_table; > + AVIOContext *data; > + uint32_t nb_samples; > + int frame_size; > + int last_frame; > +} TTAMuxContext; > + > +static int tta_write_header(AVFormatContext *s) > +{ > + TTAMuxContext *tta = s->priv_data; > + AVCodecParameters *par = s->streams[0]->codecpar; > + int ret; > + > + if (s->nb_streams > 1) {
should be == 1, the code would not work with 0 streams
> + av_log(s, AV_LOG_ERROR, "Only one stream is supported\n");
> + return AVERROR(EINVAL);
> + }
> + if (par->codec_id != AV_CODEC_ID_TTA) {
> + av_log(s, AV_LOG_ERROR, "Unsupported codec\n");
> + return AVERROR(EINVAL);
> + }
> + if (par->extradata && par->extradata_size < 22) {
> + av_log(s, AV_LOG_ERROR, "Invalid TTA extradata\n");
> + return AVERROR_INVALIDDATA;
> + }
> +
> + if ((ret = avio_open_dyn_buf(&tta->seek_table)) < 0)
> + return ret;
> + if ((ret = avio_open_dyn_buf(&tta->data)) < 0) {
> + ffio_free_dyn_buf(&tta->seek_table);
> + return ret;
> + }
> +
> + /* Ignore most extradata information if present. It can be innacurate
> + if for example remuxing from Matroska */
> + ffio_init_checksum(s->pb, ff_crcEDB88320_update, UINT32_MAX);
> + ffio_init_checksum(tta->seek_table, ff_crcEDB88320_update, UINT32_MAX);
> + avio_write(s->pb, "TTA1", 4);
> + avio_wl16(s->pb, par->extradata ? AV_RL16(par->extradata + 4) : 1);
> + avio_wl16(s->pb, par->channels);
> + avio_wl16(s->pb, par->bits_per_raw_sample);
> + avio_wl32(s->pb, par->sample_rate);
> + tta->frame_size = par->sample_rate * 256 / 245;
should use 64bit to avoid overflow
[...]
> diff --git a/tests/ref/acodec/tta b/tests/ref/acodec/tta
> index 0f60345..8e183f9 100644
> --- a/tests/ref/acodec/tta
> +++ b/tests/ref/acodec/tta
> @@ -1,4 +1,4 @@
> -6c260836d7a32e4bd714453a3546c0d5 *tests/data/fate/acodec-tta.matroska
> -331148 tests/data/fate/acodec-tta.matroska
> +847d065f082ac94825728b5f1af853eb *tests/data/fate/acodec-tta.tta
> +330583 tests/data/fate/acodec-tta.tta
> 95e54b261530a1bcf6de6fe3b21dc5f6 *tests/data/fate/acodec-tta.out.wav
> stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400
> diff --git a/tests/ref/lavf/mka b/tests/ref/lavf/mka
> new file mode 100644
> index 0000000..962b254
> --- /dev/null
> +++ b/tests/ref/lavf/mka
> @@ -0,0 +1,3 @@
> +b2e3746787b885d0191a1a26f3faa58f *./tests/data/lavf/lavf.mka
> +43654 ./tests/data/lavf/lavf.mka
> +./tests/data/lavf/lavf.mka CRC=0x3a1da17e
> diff --git a/tests/ref/lavf/tta b/tests/ref/lavf/tta
> new file mode 100644
> index 0000000..745e8d2
> --- /dev/null
> +++ b/tests/ref/lavf/tta
> @@ -0,0 +1,3 @@
> +f2721d06704ac43d89fdd25835b43598 *./tests/data/lavf/lavf.tta
> +43200 ./tests/data/lavf/lavf.tta
> +./tests/data/lavf/lavf.tta CRC=0x3a1da17e
fate tests
Tested-by: Michael on x86 32 / 64, mingw 32/64, mips , arm
Reviewed-by: Michael
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Freedom in capitalist society always remains about the same as it was in
ancient Greek republics: Freedom for slave owners. -- Vladimir Lenin
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
