Lines Matching defs:wav
147 WAVMuxContext *wav = s->priv_data;
149 av_freep(&wav->peak_maxpos);
150 av_freep(&wav->peak_maxneg);
151 av_freep(&wav->peak_output);
156 WAVMuxContext *wav = s->priv_data;
168 wav->peak_bps = av_get_bits_per_sample(par->codec_id) / 8;
170 if (wav->peak_bps == 1 && wav->peak_format == PEAK_FORMAT_UINT16) {
175 if (par->ch_layout.nb_channels > INT_MAX / (wav->peak_bps * wav->peak_ppv))
177 wav->size_increment = par->ch_layout.nb_channels * wav->peak_bps * wav->peak_ppv;
179 wav->peak_maxpos = av_calloc(par->ch_layout.nb_channels, sizeof(*wav->peak_maxpos));
180 wav->peak_maxneg = av_calloc(par->ch_layout.nb_channels, sizeof(*wav->peak_maxneg));
181 if (!wav->peak_maxpos || !wav->peak_maxneg)
193 WAVMuxContext *wav = s->priv_data;
195 unsigned new_size = wav->peak_outbuf_bytes + wav->size_increment;
200 wav->write_peak = PEAK_OFF;
203 tmp = av_fast_realloc(wav->peak_output, &wav->peak_outbuf_size, new_size);
205 wav->write_peak = PEAK_OFF;
208 wav->peak_output = tmp;
211 wav->peak_maxneg[c] = -wav->peak_maxneg[c];
213 if (wav->peak_bps == 2 && wav->peak_format == PEAK_FORMAT_UINT8) {
214 wav->peak_maxpos[c] = wav->peak_maxpos[c] / 256;
215 wav->peak_maxneg[c] = wav->peak_maxneg[c] / 256;
218 if (wav->peak_ppv == 1)
219 wav->peak_maxpos[c] =
220 FFMAX(wav->peak_maxpos[c], wav->peak_maxneg[c]);
222 if (wav->peak_format == PEAK_FORMAT_UINT8) {
223 wav->peak_output[wav->peak_outbuf_bytes++] =
224 wav->peak_maxpos[c];
225 if (wav->peak_ppv == 2) {
226 wav->peak_output[wav->peak_outbuf_bytes++] =
227 wav->peak_maxneg[c];
230 AV_WL16(wav->peak_output + wav->peak_outbuf_bytes,
231 wav->peak_maxpos[c]);
232 wav->peak_outbuf_bytes += 2;
233 if (wav->peak_ppv == 2) {
234 AV_WL16(wav->peak_output + wav->peak_outbuf_bytes,
235 wav->peak_maxneg[c]);
236 wav->peak_outbuf_bytes += 2;
239 wav->peak_maxpos[c] = 0;
240 wav->peak_maxneg[c] = 0;
242 wav->peak_num_frames++;
249 WAVMuxContext *wav = s->priv_data;
258 if (wav->peak_block_pos) {
279 avio_wl32(pb, wav->peak_format); /* 8 or 16 bit */
280 avio_wl32(pb, wav->peak_ppv); /* positive and negative */
281 avio_wl32(pb, wav->peak_block_size); /* frames per value */
283 avio_wl32(pb, wav->peak_num_frames); /* number of peak frames */
289 avio_write(pb, wav->peak_output, wav->peak_outbuf_bytes);
293 if (!wav->data)
294 wav->data = peak;
301 WAVMuxContext *wav = s->priv_data;
310 if (wav->rf64 == RF64_ALWAYS) {
320 if (wav->rf64 != RF64_NEVER) {
322 ffio_wfourcc(pb, wav->rf64 == RF64_ALWAYS ? "ds64" : "JUNK");
324 wav->ds64 = avio_tell(pb);
328 if (wav->write_peak != PEAK_ONLY) {
341 wav->fact_pos = ff_start_tag(pb, "fact");
343 ff_end_tag(pb, wav->fact_pos);
346 if (wav->write_bext)
349 if (wav->write_peak) {
356 wav->maxpts = wav->last_duration = 0;
357 wav->minpts = INT64_MAX;
359 if (wav->write_peak != PEAK_ONLY) {
364 wav->data = ff_start_tag(pb, "data");
373 WAVMuxContext *wav = s->priv_data;
375 if (wav->write_peak != PEAK_ONLY)
378 if (wav->write_peak) {
381 for (i = 0; i < pkt->size; i += wav->peak_bps) {
382 if (wav->peak_bps == 1) {
383 wav->peak_maxpos[c] = FFMAX(wav->peak_maxpos[c], *(int8_t*)(pkt->data + i));
384 wav->peak_maxneg[c] = FFMIN(wav->peak_maxneg[c], *(int8_t*)(pkt->data + i));
386 wav->peak_maxpos[c] = FFMAX(wav->peak_maxpos[c], (int16_t)AV_RL16(pkt->data + i));
387 wav->peak_maxneg[c] = FFMIN(wav->peak_maxneg[c], (int16_t)AV_RL16(pkt->data + i));
391 if (++wav->peak_block_pos == wav->peak_block_size) {
395 wav->peak_block_pos = 0;
402 wav->minpts = FFMIN(wav->minpts, pkt->pts);
403 wav->maxpts = FFMAX(wav->maxpts, pkt->pts);
404 wav->last_duration = pkt->duration;
413 WAVMuxContext *wav = s->priv_data;
420 if (wav->write_peak != PEAK_ONLY && avio_tell(pb) - wav->data < UINT32_MAX) {
421 ff_end_tag(pb, wav->data);
424 if (wav->write_peak && wav->peak_output) {
430 data_size = file_size - wav->data;
431 if (wav->rf64 == RF64_ALWAYS || (wav->rf64 == RF64_AUTO && file_size - 8 > UINT32_MAX)) {
439 "Filesize %"PRId64" invalid for wav, output file will be broken\n",
442 number_of_samples = av_rescale_q(wav->maxpts - wav->minpts + wav->last_duration,
448 avio_seek(pb, wav->fact_pos, SEEK_SET);
449 if (rf64 || (wav->rf64 == RF64_AUTO && number_of_samples > UINT32_MAX)) {
465 avio_seek(pb, wav->ds64 - 8, SEEK_SET);
474 avio_seek(pb, wav->data - 4, SEEK_SET);
490 { "on", "Append peak chunk after wav data.", 0, AV_OPT_TYPE_CONST, { .i64 = PEAK_ON }, 0, 0, ENC, "peak" },
491 { "only", "Write only peak chunk, omit wav data.", 0, AV_OPT_TYPE_CONST, { .i64 = PEAK_ONLY }, 0, 0, ENC, "peak" },
510 .name = "wav",
512 .mime_type = "audio/x-wav",
513 .extensions = "wav",
551 WAVMuxContext *wav = s->priv_data;
569 start_guid(pb, ff_w64_guid_fact, &wav->fact_pos);
571 end_guid(pb, wav->fact_pos);
574 start_guid(pb, ff_w64_guid_data, &wav->data);
582 WAVMuxContext *wav = s->priv_data;
586 end_guid(pb, wav->data);
595 number_of_samples = av_rescale(wav->maxpts - wav->minpts + wav->last_duration,
598 avio_seek(pb, wav->fact_pos + 24, SEEK_SET);