Lines Matching defs:oopus

287 static int			ogg_opus_setup_encoder (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus) ;
290 static int ogg_opus_unpack_next_page (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus) ;
292 static int ogg_opus_read_refill (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus) ;
293 static int ogg_opus_write_out (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus) ;
326 OPUS_PRIVATE* oopus = calloc (1, sizeof (OPUS_PRIVATE)) ;
331 free (oopus) ;
335 psf->codec_data = oopus ;
336 if (oopus == NULL)
358 { if ((error = ogg_opus_setup_encoder (psf, odata, oopus)))
388 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
390 if (!oopus)
401 if (oopus->u.encode.state)
402 { opus_multistream_encoder_destroy (oopus->u.encode.state) ;
403 oopus->u.encode.state = NULL ;
407 { if (oopus->u.decode.state)
408 { opus_multistream_decoder_destroy (oopus->u.decode.state) ;
409 oopus->u.decode.state = NULL ;
414 if (oopus->buffer)
415 free (oopus->buffer) ;
416 free (oopus) ;
528 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
539 oopus->serialno = ogg_page_serialno (&odata->opage) ;
540 if ((error = opus_read_header_packet (psf, &oopus->header, &odata->opacket)))
558 return ogg_opus_setup_decoder (psf, oopus->header.input_samplerate) ;
563 { OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
590 oopus->header.channels,
591 oopus->header.nb_streams,
592 oopus->header.nb_coupled,
593 oopus->header.stream_map,
606 if (oopus->u.decode.state)
607 opus_multistream_decoder_destroy (oopus->u.decode.state) ;
608 oopus->u.decode.state = decoder ;
610 oopus->sr_factor = sr_factor ;
612 psf->sf.channels = oopus->header.channels ;
613 oopus->loc = oopus->len = 0 ;
626 opus_multistream_decoder_ctl (oopus->u.decode.state, OPUS_SET_GAIN (oopus->header.gain)) ;
637 if (oopus->buffer)
638 { free (oopus->buffer) ;
639 oopus->buffer = NULL ;
641 oopus->buffersize = 20 * psf->sf.samplerate / 1000 ;
642 oopus->buffer = malloc (sizeof (float) * psf->sf.channels * oopus->buffersize) ;
643 if (oopus->buffer == NULL)
650 ogg_opus_setup_encoder (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
657 oopus->u.encode.latency = 1000 * 48 ;
665 oopus->sr_factor = 48000 / psf->sf.samplerate ;
672 { oopus->header.channel_mapping = 0 ;
675 oopus->header.stream_map [0] = 0 ;
676 oopus->header.stream_map [1] = 1 ;
678 oopus->u.encode.state = opus_multistream_encoder_create (
683 oopus->header.stream_map,
690 oopus->header.channel_mapping = 1 ;
694 oopus->header.channel_mapping = 255 ;
697 oopus->u.encode.state = opus_multistream_surround_encoder_create (
700 oopus->header.channel_mapping,
703 oopus->header.stream_map,
713 oopus->header.nb_streams = nb_streams ;
714 oopus->header.nb_coupled = nb_coupled ;
716 opus_multistream_encoder_ctl (oopus->u.encode.state, OPUS_GET_BITRATE (&oopus->u.encode.bitrate)) ;
717 psf_log_printf (psf, "Encoding at target bitrate of %dbps\n", oopus->u.encode.bitrate) ;
720 error = opus_multistream_encoder_ctl (oopus->u.encode.state, OPUS_SET_COMPLEXITY (10)) ;
732 error = opus_multistream_encoder_ctl (oopus->u.encode.state, OPUS_GET_LOOKAHEAD (&lookahead)) ;
737 oopus->header.preskip = lookahead * oopus->sr_factor ;
739 oopus->len = OGG_OPUS_ENCODE_PACKET_LEN (psf->sf.samplerate) ;
740 oopus->buffer = malloc (sizeof (float) * psf->sf.channels * oopus->len) ;
741 if (oopus->buffer == NULL)
749 oopus->buffersize = (1275 * 3 + 7) * oopus->header.nb_streams ;
750 odata->opacket.packet = malloc (oopus->buffersize) ;
755 oopus->serialno = psf_rand_int32 () ;
756 ogg_stream_init (&odata->ostream, oopus->serialno) ;
764 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
768 oopus->header.version = 1 ;
769 oopus->header.channels = psf->sf.channels ;
772 oopus->header.gain = 0 ;
787 ogg_stream_reset_serialno (&odata->ostream, oopus->serialno) ;
791 opus_print_header (psf, &oopus->header) ;
800 psf_binheader_writef (psf, "e112", BHW1 (oopus->header.version), BHW1 (psf->sf.channels), BHW2 (oopus->header.preskip)) ;
806 if (oopus->header.input_samplerate)
807 psf_binheader_writef (psf, "e4", BHW4 (oopus->header.input_samplerate)) ;
812 psf_binheader_writef (psf, "e21", BHW2 (oopus->header.gain), BHW1 (oopus->header.channel_mapping)) ;
815 if (oopus->header.channel_mapping > 0)
816 { psf_binheader_writef (psf, "11", BHW1 (oopus->header.nb_streams), BHW1 (oopus->header.nb_coupled)) ;
817 for (nn = 0 ; nn < oopus->header.channels ; nn++)
818 psf_binheader_writef (psf, "1", BHW1 (oopus->header.stream_map [nn])) ;
869 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
886 last_granulepos = oopus->pkt_pos + (oopus->sr_factor * oopus->loc) + oopus->header.preskip ;
888 memset (&(oopus->buffer [oopus->loc * psf->sf.channels]), 0, sizeof (float) * psf->sf.channels * (oopus->len - oopus->loc)) ;
891 { oopus->pkt_pos += oopus->len * oopus->sr_factor ;
892 if (oopus->pkt_pos >= last_granulepos)
898 len = (oopus->len * oopus->sr_factor) - (oopus->pkt_pos - last_granulepos) ;
900 len = 120 / oopus->sr_factor ;
902 len = 240 / oopus->sr_factor ;
904 len = 480 / oopus->sr_factor ;
906 len = oopus->len ;
909 len = oopus->len ;
911 nbytes = opus_multistream_encode_float (oopus->u.encode.state, oopus->buffer,
912 len, odata->opacket.packet, oopus->buffersize) ;
926 odata->opacket.granulepos = (ogg_int64_t) oopus->pkt_pos ;
953 ogg_opus_unpack_next_page (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
959 { oopus->pkt_pos = oopus->pg_pos ;
960 oopus->pg_pos = odata->pkt [odata->pkt_len - 1].granulepos ;
966 last_page = oopus->pg_pos ;
967 oopus->pg_pos = odata->pkt [odata->pkt_len - 1].granulepos ;
969 oopus->pkt_pos = oopus->pg_pos - gp ;
971 (oopus->pkt_pos - last_page) / (uint64_t) oopus->sr_factor) ;
988 ogg_opus_read_refill (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
994 { nn = ogg_opus_unpack_next_page (psf, odata, oopus) ;
1003 nsamp = opus_multistream_decode_float (oopus->u.decode.state,
1004 ppkt->packet, ppkt->bytes, oopus->buffer, oopus->buffersize, 0) ;
1009 nsamp, oopus->buffersize) ;
1014 oopus->buffersize = nsamp ;
1016 free (oopus->buffer) ;
1017 oopus->buffer = NULL ;
1018 oopus->buffer = malloc (sizeof (float) * oopus->buffersize * psf->sf.channels) ;
1019 if (oopus->buffer == NULL)
1021 oopus->buffersize = 0 ;
1025 nsamp = opus_multistream_decode_float (oopus->u.decode.state,
1026 ppkt->packet, ppkt->bytes, oopus->buffer, oopus->buffersize, 0) ;
1043 pkt_granulepos = oopus->pkt_pos + (nsamp * oopus->sr_factor) ;
1044 if (pkt_granulepos <= oopus->pg_pos)
1045 { oopus->len = nsamp ;
1053 oopus->len = SF_MAX ((int) (oopus->pg_pos - oopus->pkt_pos) / oopus->sr_factor, 0) ;
1065 psf_log_printf (psf, "Opus : Mid-stream page's granule position %D is less than total samples of %D\n", oopus->pg_pos, pkt_granulepos) ;
1071 if (oopus->len > oopus->buffersize)
1072 { free (oopus->buffer) ;
1073 oopus->buffersize = oopus->len ;
1074 oopus->buffer = malloc (sizeof (float) * oopus->buffersize * psf->sf.channels) ;
1075 if (oopus->buffer == NULL)
1077 oopus->buffersize = 0 ;
1087 if (oopus->pkt_pos < (unsigned) oopus->header.preskip)
1088 oopus->loc = SF_MIN ((oopus->header.preskip - (int) oopus->pkt_pos) / oopus->sr_factor, oopus->len) ;
1090 oopus->loc = 0 ;
1092 oopus->pkt_pos = pkt_granulepos ;
1098 ogg_opus_write_out (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
1101 if (oopus->u.encode.lsb != oopus->u.encode.lsb_last)
1102 opus_multistream_encoder_ctl (oopus->u.encode.state, OPUS_SET_LSB_DEPTH (oopus->u.encode.lsb)) ;
1104 nbytes = opus_multistream_encode_float (oopus->u.encode.state,
1105 oopus->buffer, oopus->len,
1106 odata->opacket.packet, oopus->buffersize) ;
1114 oopus->u.encode.last_segments += (nbytes + 255) / 255 ;
1115 oopus->pkt_pos += oopus->len * oopus->sr_factor ;
1117 odata->opacket.granulepos = oopus->pkt_pos ;
1128 { if (oopus->pkt_pos - oopus->pg_pos >= oopus->u.encode.latency || oopus->u.encode.last_segments >= 255)
1133 { oopus->u.encode.last_segments -= ogg_page_segments (&odata->opage) ;
1134 oopus->pg_pos = oopus->pkt_pos ;
1142 oopus->loc = 0 ;
1143 oopus->u.encode.lsb_last = oopus->u.encode.lsb ;
1144 oopus->u.encode.lsb = 0 ;
1152 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1158 { if (oopus->loc == oopus->len)
1159 { if (ogg_opus_read_refill (psf, odata, oopus) <= 0)
1163 readlen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1165 { iptr = oopus->buffer + oopus->loc * psf->sf.channels ;
1180 oopus->loc += (readlen / psf->sf.channels) ;
1189 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1195 { if (oopus->loc == oopus->len)
1196 { if (ogg_opus_read_refill (psf, odata, oopus) <= 0)
1200 readlen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1202 { iptr = oopus->buffer + oopus->loc * psf->sf.channels ;
1217 oopus->loc += (readlen / psf->sf.channels) ;
1226 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1231 { if (oopus->loc == oopus->len)
1232 { if (ogg_opus_read_refill (psf, odata, oopus) <= 0)
1236 readlen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1238 { memcpy (&(ptr [total]), &(oopus->buffer [oopus->loc * psf->sf.channels]), sizeof (float) * readlen) ;
1240 oopus->loc += (readlen / psf->sf.channels) ;
1249 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1255 { if (oopus->loc >= oopus->len)
1256 { if (ogg_opus_read_refill (psf, odata, oopus) <= 0)
1260 readlen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1263 { fptr = oopus->buffer + oopus->loc * psf->sf.channels ;
1269 oopus->loc += readlen / psf->sf.channels ;
1278 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1283 if (oopus->u.encode.lsb < 16)
1284 oopus->u.encode.lsb = 16 ;
1287 { if (oopus->loc >= oopus->len)
1289 if (ogg_opus_write_out (psf, odata, oopus) <= 0)
1293 writelen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1295 { optr = oopus->buffer + oopus->loc * psf->sf.channels ;
1301 oopus->loc += (writelen / psf->sf.channels) ;
1310 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1315 if (oopus->u.encode.lsb < 24)
1316 oopus->u.encode.lsb = 24 ;
1319 { if (oopus->loc >= oopus->len)
1321 if (ogg_opus_write_out (psf, odata, oopus) <= 0)
1325 writelen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1327 { optr = oopus->buffer + oopus->loc * psf->sf.channels ;
1333 oopus->loc += (writelen / psf->sf.channels) ;
1342 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1346 if (oopus->u.encode.lsb < 24)
1347 oopus->u.encode.lsb = 24 ;
1350 { if (oopus->loc >= oopus->len)
1352 if (ogg_opus_write_out (psf, odata, oopus) <= 0)
1356 writelen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1358 { memcpy (&(oopus->buffer [oopus->loc * psf->sf.channels]), &(ptr [total]), sizeof (float) * writelen) ;
1360 oopus->loc += (writelen / psf->sf.channels) ;
1369 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1374 if (oopus->u.encode.lsb < 24)
1375 oopus->u.encode.lsb = 24 ;
1378 { if (oopus->loc >= oopus->len)
1380 if (ogg_opus_write_out (psf, odata, oopus) <= 0)
1384 writelen = SF_MIN (len - total, (sf_count_t) (oopus->len - oopus->loc) * psf->sf.channels) ;
1386 { optr = oopus->buffer + oopus->loc * psf->sf.channels ;
1392 oopus->loc += (writelen / psf->sf.channels) ;
1401 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1408 oopus->u.decode.gp_end = (uint64_t) -1 ;
1409 oopus->u.decode.last_offset = SF_COUNT_MAX ;
1433 error = ogg_opus_unpack_next_page (psf, odata, oopus) ;
1444 { if (gp > oopus->pg_pos)
1448 oopus->pkt_pos = oopus->pg_pos - gp ;
1450 else if (gp < oopus->pg_pos)
1454 oopus->u.decode.gp_start = oopus->pkt_pos ;
1466 last_page = ogg_sync_last_page_before (psf, odata, &oopus->u.decode.gp_end, psf->filelength, oopus->serialno) ;
1472 oopus->u.decode.last_offset = last_page ;
1474 if (oopus->u.decode.gp_end != (uint64_t) -1)
1475 { psf->sf.frames = (oopus->u.decode.gp_end - oopus->u.decode.gp_start
1476 - oopus->header.preskip) / oopus->sr_factor ;
1481 psf_log_printf (psf, " Granule pos offset : %D\n", oopus->u.decode.gp_start) ;
1482 if (oopus->u.decode.gp_end != (uint64_t) -1)
1483 psf_log_printf (psf, " Last Granule pos : %D\n", oopus->u.decode.gp_end) ;
1499 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1502 total = (oopus->pkt_pos / oopus->sr_factor) - (oopus->len - oopus->loc) ;
1504 { sf_count_t readlen = SF_MIN ((int) (offset - total), (oopus->len - oopus->loc)) ;
1507 oopus->loc += readlen ;
1509 if (oopus->loc == oopus->len)
1510 { if (ogg_opus_read_refill (psf, odata, oopus) <= 0)
1516 oopus->loc = 0 ;
1531 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1540 best_gp = pcm_start = oopus->u.decode.gp_start ;
1541 pcm_end = oopus->u.decode.gp_end ;
1543 end = oopus->u.decode.last_offset ;
1554 oopus->loc = 0 ;
1555 oopus->len = 0 ;
1556 if ((ret = ogg_opus_unpack_next_page (psf, odata, oopus)) != 1)
1558 oopus->pkt_pos = best_gp ;
1561 opus_multistream_decoder_ctl (oopus->u.decode.state, OPUS_RESET_STATE) ;
1575 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1579 if (oopus->pg_pos > target_gp)
1584 oopus->pg_pos = oopus->u.decode.gp_start ;
1585 opus_multistream_decoder_ctl (oopus->u.decode.state, OPUS_RESET_STATE) ;
1588 while (oopus->pg_pos < target_gp)
1589 { nn = ogg_opus_unpack_next_page (psf, odata, oopus) ;
1600 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1613 oopus->loc = 0 ;
1614 current_gp = oopus->pkt_pos - (uint64_t) (oopus->len * oopus->sr_factor) ;
1618 target_gp = offset * oopus->sr_factor ;
1619 target_gp += oopus->u.decode.gp_start ;
1620 target_gp += oopus->header.preskip ;
1628 if (target_gp >= OGG_OPUS_PREROLL + oopus->u.decode.gp_start + (uint64_t) oopus->header.preskip)
1632 { preroll_gp = oopus->u.decode.gp_start + (uint64_t) oopus->header.preskip ;
1635 if (oopus->u.decode.gp_end == (uint64_t) -1)
1672 if (oopus->pkt_pos + nsamp < preroll_gp)
1673 { oopus->pkt_pos += nsamp ;
1685 offset = ogg_opus_null_read (psf, target_gp / oopus->sr_factor) ;
1686 return offset - ((oopus->header.preskip + oopus->u.decode.gp_start) / oopus->sr_factor) ;
1693 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1719 oopus->u.encode.latency = ((unsigned long) latency) * 48 ;
1732 oopus->u.encode.bitrate = (int) (((1.0 - quality) * (250000.0)) + 6000.0) * psf->sf.channels ;
1733 if (opus_multistream_encoder_ctl (oopus->u.encode.state, OPUS_SET_BITRATE (oopus->u.encode.bitrate)) == OPUS_OK)
1734 { psf_log_printf (psf, "User changed encoding target bitrate to %dbps\n", oopus->u.encode.bitrate) ;
1737 psf_log_printf (psf, "Failed to set user encoding target bitrate of %dbps\n", oopus->u.encode.bitrate) ;
1753 oopus->header.input_samplerate = *((int *) data) ;
1756 if (oopus->pkt_pos > oopus->u.decode.gp_start || oopus->loc > 0)
1762 if (oopus->u.decode.gp_end != (uint64_t) -1)
1763 psf->sf.frames = (oopus->u.decode.gp_end - oopus->u.decode.gp_start
1764 - oopus->header.preskip) / oopus->sr_factor ;
1771 *((int *) data) = oopus->header.input_samplerate ;
1791 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1795 { if (ogg_opus_unpack_next_page (psf, odata, oopus) < 0)
1808 if (psf->file.mode == SFM_WRITE && oopus->u.encode.state != NULL)
1809 return (oopus->u.encode.bitrate + 7) / 8 ;