Lines Matching defs:psf

57 **	 - connect psf->channel_map and Opus channel mapping somehow?
281 static int ogg_opus_close (SF_PRIVATE *psf) ;
282 static void opus_print_header (SF_PRIVATE *psf, OpusHeader *h) ;
283 static int opus_read_header_packet (SF_PRIVATE *psf, OpusHeader *h, ogg_packet *opacket) ;
284 static int ogg_opus_read_header (SF_PRIVATE * psf) ;
285 static int ogg_opus_setup_decoder (SF_PRIVATE *psf, int input_samplerate) ;
287 static int ogg_opus_setup_encoder (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus) ;
288 static int ogg_opus_write_header (SF_PRIVATE * psf, int calc_length) ;
289 static void ogg_opus_flush (SF_PRIVATE *psf) ;
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) ;
295 static sf_count_t ogg_opus_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
296 static sf_count_t ogg_opus_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
297 static sf_count_t ogg_opus_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
298 static sf_count_t ogg_opus_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
300 static sf_count_t ogg_opus_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
301 static sf_count_t ogg_opus_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
302 static sf_count_t ogg_opus_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
303 static sf_count_t ogg_opus_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
305 static sf_count_t ogg_opus_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
306 static sf_count_t ogg_opus_null_read (SF_PRIVATE *psf, sf_count_t offset) ;
307 static sf_count_t ogg_opus_page_seek_manual (SF_PRIVATE *psf, uint64_t target_gp) ;
308 static int ogg_opus_page_seek_search (SF_PRIVATE *psf, uint64_t target_gp) ;
310 static int ogg_opus_analyze_file (SF_PRIVATE *psf) ;
311 static int ogg_opus_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
312 static int ogg_opus_byterate (SF_PRIVATE *psf) ;
324 ogg_opus_open (SF_PRIVATE *psf)
325 { OGG_PRIVATE* odata = psf->container_data ;
330 { psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
335 psf->codec_data = oopus ;
339 if (psf->file.mode == SFM_RDWR)
342 psf_log_printf (psf, "Opus library version: %s\n", opus_get_version_string ()) ;
344 psf->codec_close = ogg_opus_close ;
345 if (psf->file.mode == SFM_READ)
346 { if ((error = ogg_opus_read_header (psf)))
348 if ((error = ogg_opus_analyze_file (psf)))
351 psf->read_short = ogg_opus_read_s ;
352 psf->read_int = ogg_opus_read_i ;
353 psf->read_float = ogg_opus_read_f ;
354 psf->read_double = ogg_opus_read_d ;
357 if (psf->file.mode == SFM_WRITE)
358 { if ((error = ogg_opus_setup_encoder (psf, odata, oopus)))
361 psf->write_header = ogg_opus_write_header ;
362 psf->write_short = ogg_opus_write_s ;
363 psf->write_int = ogg_opus_write_i ;
364 psf->write_float = ogg_opus_write_f ;
365 psf->write_double = ogg_opus_write_d ;
367 psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
368 psf->strings.flags = SF_STR_ALLOW_START ;
369 psf->datalength = 0 ;
370 psf->dataoffset = 0 ; /* will be updated */
373 psf->seek = ogg_opus_seek ;
374 psf->command = ogg_opus_command ;
375 psf->byterate = ogg_opus_byterate ;
376 psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_OPUS ;
386 ogg_opus_close (SF_PRIVATE *psf)
387 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
388 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
393 if (psf->file.mode == SFM_WRITE)
394 { if (psf->have_written)
395 ogg_opus_flush (psf) ;
398 ogg_opus_write_header (psf, 0) ;
406 else if (psf->file.mode == SFM_READ)
413 psf->codec_data = NULL ;
422 opus_print_header (SF_PRIVATE *psf, OpusHeader *h)
423 { psf_log_printf (psf, "Opus Header Metadata\n") ;
424 psf_log_printf (psf, " OggOpus version : %d\n", (int) h->version) ;
425 psf_log_printf (psf, " Channels : %d\n", (int) h->channels) ;
426 psf_log_printf (psf, " Preskip : %d samples @48kHz\n", (int) h->preskip) ;
427 psf_log_printf (psf, " Input Samplerate : %d Hz\n", (int) h->input_samplerate) ;
428 psf_log_printf (psf, " Gain : %d.%d\n", (int) arith_shift_right (h->gain & 0xF0, 8), h->gain & 0x0F) ;
429 psf_log_printf (psf, " Channel Mapping : ") ;
431 { case 0 : psf_log_printf (psf, "0 (mono or stereo)\n") ; break ;
432 case 1 : psf_log_printf (psf, "1 (surround, AC3 channel order)\n") ; break ;
433 case 255 : psf_log_printf (psf, "255 (no channel order)\n") ; break ;
434 default : psf_log_printf (psf, "%d (unknown or unsupported)\n", (int) h->channel_mapping) ; break ;
439 psf_log_printf (psf, " streams total : %d\n", (int) h->nb_streams) ;
440 psf_log_printf (psf, " streams coupled : %d\n", (int) h->nb_coupled) ;
441 psf_log_printf (psf, " stream mapping : [") ;
443 psf_log_printf (psf, "%d,", (int) (h->stream_map [i])) ;
444 psf_log_printf (psf, "%d]\n", (int) (h->stream_map [i])) ;
449 opus_read_header_packet (SF_PRIVATE *psf, OpusHeader *h, ogg_packet *opacket)
468 count = psf_binheader_writef (psf, "ob", BHWo (0), BHWv (opacket->packet), BHWz (opacket->bytes)) ;
469 psf->header.end = count ;
471 count = psf_binheader_readf (psf, "ep1", 8, &h->version) ;
473 { psf_log_printf (psf, "Opus : Unknown / unsupported embedding scheme version: %d.\n", (int) h->version) ;
477 count += psf_binheader_readf (psf, "e12421", &h->channels, &h->preskip,
500 count += psf_binheader_readf (psf, "11", &h->nb_streams, &h->nb_coupled) ;
508 { count += psf_binheader_readf (psf, "1", &(h->stream_map [i])) ;
516 psf_log_printf (psf, "Opus : Error, extra data in Ogg Opus header.\n") ;
520 opus_print_header (psf, h) ;
526 ogg_opus_read_header (SF_PRIVATE *psf)
527 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
528 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
540 if ((error = opus_read_header_packet (psf, &oopus->header, &odata->opacket)))
549 { if (ogg_stream_next_page (psf, odata) != 1)
551 return psf->error ? psf->error : SFE_MALFORMED_FILE ;
555 if ((error = vorbiscomment_read_tags (psf, &odata->opacket, &opustags_ident)))
558 return ogg_opus_setup_decoder (psf, oopus->header.input_samplerate) ;
562 ogg_opus_setup_decoder (SF_PRIVATE *psf, int input_samplerate)
563 { OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
597 { psf_log_printf (psf, "Opus : Failed to create multistream decoder: %s\n",
611 psf->sf.samplerate = 48000 / sr_factor ;
612 psf->sf.channels = oopus->header.channels ;
641 oopus->buffersize = 20 * psf->sf.samplerate / 1000 ;
642 oopus->buffer = malloc (sizeof (float) * psf->sf.channels * oopus->buffersize) ;
650 ogg_opus_setup_encoder (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
659 switch (psf->sf.samplerate)
665 oopus->sr_factor = 48000 / psf->sf.samplerate ;
671 if (psf->sf.channels <= 2)
674 nb_coupled = psf->sf.channels - 1 ;
679 psf->sf.samplerate,
680 psf->sf.channels,
688 { if (psf->sf.channels <= 8)
698 psf->sf.samplerate,
699 psf->sf.channels,
710 { psf_log_printf (psf, "Opus : Error, opus_multistream_encoder_create returned %s\n", opus_strerror (error)) ;
717 psf_log_printf (psf, "Encoding at target bitrate of %dbps\n", oopus->u.encode.bitrate) ;
723 psf_log_printf (psf, "Opus : OPUS_SET_COMPLEXITY returned: %s\n", opus_strerror (error)) ;
734 { psf_log_printf (psf, "Opus : OPUS_GET_LOOKAHEAD returned: %s\n", opus_strerror (error)) ;
739 oopus->len = OGG_OPUS_ENCODE_PACKET_LEN (psf->sf.samplerate) ;
740 oopus->buffer = malloc (sizeof (float) * psf->sf.channels * oopus->len) ;
762 ogg_opus_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
763 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
764 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
769 oopus->header.channels = psf->sf.channels ;
774 if (psf->dataoffset > 0)
775 { if (psf->have_written)
783 if (psf_is_pipe (psf))
785 if (psf_fseek (psf, 0, SEEK_SET) < 0)
788 psf->dataoffset = 0 ;
791 opus_print_header (psf, &oopus->header) ;
793 psf->header.ptr [0] = 0 ;
794 psf->header.indx = 0 ;
797 psf_binheader_writef (psf, "eb", BHWv ("OpusHead"), BHWz (8)) ;
800 psf_binheader_writef (psf, "e112", BHW1 (oopus->header.version), BHW1 (psf->sf.channels), BHW2 (oopus->header.preskip)) ;
807 psf_binheader_writef (psf, "e4", BHW4 (oopus->header.input_samplerate)) ;
809 psf_binheader_writef (psf, "e4", BHW4 (psf->sf.samplerate)) ;
812 psf_binheader_writef (psf, "e21", BHW2 (oopus->header.gain), BHW1 (oopus->header.channel_mapping)) ;
816 { psf_binheader_writef (psf, "11", BHW1 (oopus->header.nb_streams), BHW1 (oopus->header.nb_coupled)) ;
818 psf_binheader_writef (psf, "1", BHW1 (oopus->header.stream_map [nn])) ;
821 op.packet = psf->header.ptr ;
822 op.bytes = psf->header.indx ;
831 { if (! (nn = ogg_write_page (psf, &odata->opage)))
832 { psf_log_printf (psf, "Opus : Failed to write header!\n") ;
833 if (psf->error)
834 return psf->error ;
837 psf->dataoffset += nn ;
850 vorbiscomment_write_tags (psf, &op, &opustags_ident, opus_get_version_string (), - (OGG_OPUS_COMMENT_PAD)) ;
854 { if (! (nn = ogg_write_page (psf, &odata->opage)))
855 { psf_log_printf (psf, "Opus : Failed to write comments!\n") ;
856 if (psf->error)
857 return psf->error ;
860 psf->dataoffset += nn ;
867 ogg_opus_flush (SF_PRIVATE *psf)
868 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
869 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
888 memset (&(oopus->buffer [oopus->loc * psf->sf.channels]), 0, sizeof (float) * psf->sf.channels * (oopus->len - oopus->loc)) ;
915 { psf_log_printf (psf, "Opus : opus_multistream_encode_float returned: %s\n", opus_strerror (nbytes)) ;
930 ogg_write_page (psf, &odata->opage) ;
934 ogg_write_page (psf, &odata->opage) ;
953 ogg_opus_unpack_next_page (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
956 nn = ogg_stream_unpack_page (psf, odata) ;
970 psf_log_printf (psf, "Opus : Hole found appears to be of length %D samples.\n",
988 ogg_opus_read_refill (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
994 { nn = ogg_opus_unpack_next_page (psf, odata, oopus) ;
1007 { nsamp = opus_packet_get_nb_samples (ppkt->packet, ppkt->bytes, psf->sf.samplerate) ;
1008 psf_log_printf (psf, "Growing decode buffer to hold %d samples from %d\n",
1011 { psf_log_printf (psf, "Packet is larger than maximum allowable of 120ms!? Skipping.\n") ;
1018 oopus->buffer = malloc (sizeof (float) * oopus->buffersize * psf->sf.channels) ;
1020 { psf->error = SFE_MALLOC_FAILED ;
1031 { psf_log_printf (psf, "Opus : opus_multistream_decode returned: %s\n",
1033 psf->error = SFE_INTERNAL ;
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) ;
1066 psf->error = SFE_MALFORMED_FILE ;
1074 oopus->buffer = malloc (sizeof (float) * oopus->buffersize * psf->sf.channels) ;
1076 { psf->error = SFE_MALLOC_FAILED ;
1098 ogg_opus_write_out (SF_PRIVATE *psf, OGG_PRIVATE *odata, OPUS_PRIVATE *oopus)
1109 { psf_log_printf (psf, "Opus : Error, opus_multistream_encode_float returned: %s\n", opus_strerror (nbytes)) ;
1110 psf->error = SFE_INTERNAL ;
1135 ogg_write_page (psf, &odata->opage) ;
1150 ogg_opus_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
1151 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1152 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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 ;
1169 if (psf->float_int_mult)
1170 { float inverse = 1.0 / psf->float_max ;
1180 oopus->loc += (readlen / psf->sf.channels) ;
1187 ogg_opus_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
1188 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1189 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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 ;
1206 if (psf->float_int_mult)
1207 { float inverse = 1.0 / psf->float_max ;
1217 oopus->loc += (readlen / psf->sf.channels) ;
1224 ogg_opus_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
1225 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1226 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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) ;
1247 ogg_opus_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
1248 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1249 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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 ;
1276 ogg_opus_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
1277 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1278 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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) ;
1308 ogg_opus_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
1309 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1310 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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) ;
1340 ogg_opus_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
1341 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1342 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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) ;
1367 ogg_opus_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
1368 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1369 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
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) ;
1399 ogg_opus_analyze_file (SF_PRIVATE *psf)
1400 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1401 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1406 psf->sf.sections = 1 ;
1407 psf->sf.frames = SF_COUNT_MAX ;
1411 psf->dataoffset = ogg_sync_ftell (psf) ;
1412 if (psf->filelength != SF_COUNT_MAX)
1413 psf->datalength = psf->filelength - psf->dataoffset ;
1415 psf->datalength = SF_COUNT_MAX ;
1433 error = ogg_opus_unpack_next_page (psf, odata, oopus) ;
1434 if (error < 0 && psf->error)
1435 return psf->error ;
1439 { psf_log_printf (psf, "Opus : Page duration of zero!\n") ;
1445 { psf_log_printf (psf, "Opus : First data page's granule position is less than total number of samples on the page!\n") ;
1451 { psf_log_printf (psf, "Opus : First data page is also the last, and granule position has an (ambigious) offset.\n") ;
1456 if (!psf->sf.seekable)
1463 saved_offset = ogg_sync_ftell (psf) ;
1466 last_page = ogg_sync_last_page_before (psf, odata, &oopus->u.decode.gp_end, psf->filelength, oopus->serialno) ;
1469 psf_log_printf (psf, "Ogg : Last page lacks an end-of-stream bit.\n") ;
1470 if (last_page + odata->opage.header_len + odata->opage.body_len < psf->filelength)
1471 psf_log_printf (psf, "Ogg : Junk after the last page.\n") ;
1475 { psf->sf.frames = (oopus->u.decode.gp_end - oopus->u.decode.gp_start
1481 psf_log_printf (psf, " Granule pos offset : %D\n", oopus->u.decode.gp_start) ;
1483 psf_log_printf (psf, " Last Granule pos : %D\n", oopus->u.decode.gp_end) ;
1486 ogg_sync_fseek (psf, saved_offset, SEEK_SET) ;
1497 ogg_opus_null_read (SF_PRIVATE *psf, sf_count_t offset)
1498 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1499 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1510 { if (ogg_opus_read_refill (psf, odata, oopus) <= 0)
1529 ogg_opus_page_seek_search (SF_PRIVATE *psf, uint64_t target_gp)
1530 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1531 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1542 begin = psf->dataoffset ;
1546 old_pos = ogg_sync_ftell (psf) ;
1547 ret = ogg_stream_seek_page_search (psf, odata, target_gp, pcm_start, pcm_end, &best_gp, begin, end, 48000) ;
1549 { ogg_sync_fseek (psf, old_pos, SEEK_SET) ;
1556 if ((ret = ogg_opus_unpack_next_page (psf, odata, oopus)) != 1)
1573 ogg_opus_page_seek_manual (SF_PRIVATE *psf, uint64_t target_gp)
1574 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1575 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1581 pos = ogg_sync_fseek (psf, psf->dataoffset, SEEK_SET) ;
1589 { nn = ogg_opus_unpack_next_page (psf, odata, oopus) ;
1598 ogg_opus_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
1599 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1600 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1605 if (mode != SFM_READ || psf->file.mode != SFM_READ)
1606 { psf->error = SFE_BAD_SEEK ;
1640 ogg_opus_page_seek_manual (psf, preroll_gp) ;
1643 { ret = ogg_opus_page_seek_search (psf, preroll_gp) ;
1651 ret = ogg_opus_page_seek_manual (psf, preroll_gp) ;
1657 if (!psf->error)
1658 psf->error = SFE_MALFORMED_FILE ;
1685 offset = ogg_opus_null_read (psf, target_gp / oopus->sr_factor) ;
1691 ogg_opus_command (SF_PRIVATE *psf, int command, void *data, int datasize)
1692 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1693 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1732 oopus->u.encode.bitrate = (int) (((1.0 - quality) * (250000.0)) + 6000.0) * psf->sf.channels ;
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) ;
1750 if (psf->file.mode == SFM_WRITE)
1751 { if (psf->have_written)
1758 if ((error = ogg_opus_setup_decoder (psf, *((int *) data))))
1763 psf->sf.frames = (oopus->u.decode.gp_end - oopus->u.decode.gp_start
1789 ogg_opus_byterate (SF_PRIVATE *psf)
1790 { OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
1791 OPUS_PRIVATE *oopus = (OPUS_PRIVATE *) psf->codec_data ;
1793 if (psf->file.mode == SFM_READ)
1795 { if (ogg_opus_unpack_next_page (psf, odata, oopus) < 0)
1804 if (psf->datalength != SF_COUNT_MAX)
1805 return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
1808 if (psf->file.mode == SFM_WRITE && oopus->u.encode.state != NULL)
1817 ogg_opus_open (SF_PRIVATE *psf)
1819 psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Opus support.\n") ;