Lines Matching defs:psds
51 int (*reader) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
52 int (*writer) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
71 static int sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
73 static int sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
88 static int sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
89 static int sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
90 static int sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
92 static int sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *iptr, int readcount) ;
94 static int sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
95 static int sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
96 static int sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
98 static int sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *iptr, int writecount) ;
106 { SDS_PRIVATE *psds ;
112 if (! (psds = calloc (1, sizeof (SDS_PRIVATE))))
114 psf->codec_data = psds ;
117 { if ((error = sds_read_header (psf, psds)))
133 if ((error = sds_init (psf, psds)) != 0)
152 { SDS_PRIVATE *psds ;
154 if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
159 if (psds->write_count > 0)
160 { memset (&(psds->write_data [psds->write_count]), 0, (psds->samplesperblock - psds->write_count) * sizeof (int)) ;
161 psds->writer (psf, psds) ;
171 sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds)
173 if (psds->bitwidth < 8 || psds->bitwidth > 28)
176 if (psds->bitwidth < 14)
177 { psds->reader = sds_2byte_read ;
178 psds->writer = sds_2byte_write ;
179 psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 2 ;
181 else if (psds->bitwidth < 21)
182 { psds->reader = sds_3byte_read ;
183 psds->writer = sds_3byte_write ;
184 psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 3 ;
187 { psds->reader = sds_4byte_read ;
188 psds->writer = sds_4byte_write ;
189 psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 4 ;
199 psds->reader (psf, psds) ;
213 sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds)
236 psds->bitwidth = bitwidth ;
238 if (psds->bitwidth > 1)
239 psf_log_printf (psf, " Bit Width : %d\n", psds->bitwidth) ;
241 { psf_log_printf (psf, " Bit Width : %d (should be > 1)\n", psds->bitwidth) ;
264 psf->sf.frames = psds->frames = data_length ;
294 psds->total_blocks = blockcount ;
296 psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / ((psds->bitwidth + 6) / 7) ;
297 psf_log_printf (psf, "Samples/Block : %d\n", psds->samplesperblock) ;
299 psf_log_printf (psf, "Frames : %d\n", blockcount * psds->samplesperblock) ;
309 switch ((psds->bitwidth + 7) / 8)
327 psf_log_printf (psf, "*** Weird byte width (%d)\n", (psds->bitwidth + 7) / 8) ;
338 { SDS_PRIVATE *psds ;
343 if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
354 psf->sf.frames = psds->total_written ;
356 if (psds->write_count > 0)
357 { int current_count = psds->write_count ;
358 int current_block = psds->write_block ;
360 psds->writer (psf, psds) ;
364 psds->write_count = current_count ;
365 psds->write_block = current_block ;
379 psds->bitwidth = 8 ;
382 psds->bitwidth = 16 ;
385 psds->bitwidth = 24 ;
393 psf_binheader_writef (psf, "e213", BHW2 (0), BHW1 (psds->bitwidth), BHW3 (samp_period)) ;
395 data_length = SDS_INT_TO_3BYTE_ENCODE (psds->total_written) ;
408 psf->datalength = psds->write_block * SDS_BLOCK_SIZE ;
421 sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
426 psds->read_block ++ ;
427 psds->read_count = 0 ;
429 if (psds->read_block * psds->samplesperblock > psds->frames)
430 { memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
434 if ((k = (int) psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
437 if (psds->read_data [0] != 0xF0)
438 { printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
441 checksum = psds->read_data [1] ;
447 checksum ^= psds->read_data [k] ;
451 if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
452 { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
455 ucptr = psds->read_data + 5 ;
458 psds->read_samples [k / 2] = (int) (sample - 0x80000000) ;
465 sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
470 psds->read_block ++ ;
471 psds->read_count = 0 ;
473 if (psds->read_block * psds->samplesperblock > psds->frames)
474 { memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
478 if ((k = (int) psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
481 if (psds->read_data [0] != 0xF0)
482 { printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
485 checksum = psds->read_data [1] ;
491 checksum ^= psds->read_data [k] ;
495 if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
496 { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
499 ucptr = psds->read_data + 5 ;
502 psds->read_samples [k / 3] = (int) (sample - 0x80000000) ;
509 sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
514 psds->read_block ++ ;
515 psds->read_count = 0 ;
517 if (psds->read_block * psds->samplesperblock > psds->frames)
518 { memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
522 if ((k = (int) psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
525 if (psds->read_data [0] != 0xF0)
526 { printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
529 checksum = psds->read_data [1] ;
535 checksum ^= psds->read_data [k] ;
539 if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
540 { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
543 ucptr = psds->read_data + 5 ;
546 psds->read_samples [k / 4] = (int) (sample - 0x80000000) ;
556 SDS_PRIVATE *psds ;
563 psds = (SDS_PRIVATE*) psf->codec_data ;
569 count = sds_read (psf, psds, iptr, readcount) ;
581 { SDS_PRIVATE *psds ;
586 psds = (SDS_PRIVATE*) psf->codec_data ;
588 total = sds_read (psf, psds, ptr, len) ;
596 SDS_PRIVATE *psds ;
604 psds = (SDS_PRIVATE*) psf->codec_data ;
609 normfact = 1.0 / (1 << psds->bitwidth) ;
615 count = sds_read (psf, psds, iptr, readcount) ;
628 SDS_PRIVATE *psds ;
636 psds = (SDS_PRIVATE*) psf->codec_data ;
641 normfact = 1.0 / (1 << psds->bitwidth) ;
647 count = sds_read (psf, psds, iptr, readcount) ;
658 sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *ptr, int len)
662 { if (psds->read_block * psds->samplesperblock >= psds->frames)
667 if (psds->read_count >= psds->samplesperblock)
668 psds->reader (psf, psds) ;
670 count = (psds->samplesperblock - psds->read_count) ;
673 memcpy (&(ptr [total]), &(psds->read_samples [psds->read_count]), count * sizeof (int)) ;
675 psds->read_count += count ;
686 { SDS_PRIVATE *psds ;
690 if ((psds = psf->codec_data) == NULL)
705 if (mode == SFM_READ && psds->write_count > 0)
706 psds->writer (psf, psds) ;
708 newblock = seek_from_start / psds->samplesperblock ;
709 newsample = seek_from_start % psds->samplesperblock ;
713 if (newblock > psds->total_blocks)
725 psds->read_block = newblock ;
726 psds->reader (psf, psds) ;
727 psds->read_count = newsample ;
731 if (newblock > psds->total_blocks)
743 psds->write_block = newblock ;
744 psds->reader (psf, psds) ;
745 psds->write_count = newsample ;
770 sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
775 psds->write_data [0] = 0xF0 ;
776 psds->write_data [1] = 0x7E ;
777 psds->write_data [2] = 0 ; /* Channel number */
778 psds->write_data [3] = 2 ;
779 psds->write_data [4] = psds->write_block & 0x7F ; /* Packet number */
781 ucptr = psds->write_data + 5 ;
783 { sample = psds->write_samples [k / 2] ;
789 checksum = psds->write_data [1] ;
791 checksum ^= psds->write_data [k] ;
794 psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
795 psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
797 if ((k = (int) psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
800 psds->write_block ++ ;
801 psds->write_count = 0 ;
803 if (psds->write_block > psds->total_blocks)
804 psds->total_blocks = psds->write_block ;
805 psds->frames = psds->total_blocks * psds->samplesperblock ;
811 sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
816 psds->write_data [0] = 0xF0 ;
817 psds->write_data [1] = 0x7E ;
818 psds->write_data [2] = 0 ; /* Channel number */
819 psds->write_data [3] = 2 ;
820 psds->write_data [4] = psds->write_block & 0x7F ; /* Packet number */
822 ucptr = psds->write_data + 5 ;
824 { sample = psds->write_samples [k / 3] ;
831 checksum = psds->write_data [1] ;
833 checksum ^= psds->write_data [k] ;
836 psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
837 psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
839 if ((k = (int) psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
842 psds->write_block ++ ;
843 psds->write_count = 0 ;
845 if (psds->write_block > psds->total_blocks)
846 psds->total_blocks = psds->write_block ;
847 psds->frames = psds->total_blocks * psds->samplesperblock ;
853 sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
858 psds->write_data [0] = 0xF0 ;
859 psds->write_data [1] = 0x7E ;
860 psds->write_data [2] = 0 ; /* Channel number */
861 psds->write_data [3] = 2 ;
862 psds->write_data [4] = psds->write_block & 0x7F ; /* Packet number */
864 ucptr = psds->write_data + 5 ;
866 { sample = psds->write_samples [k / 4] ;
874 checksum = psds->write_data [1] ;
876 checksum ^= psds->write_data [k] ;
879 psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
880 psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
882 if ((k = (int) psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
885 psds->write_block ++ ;
886 psds->write_count = 0 ;
888 if (psds->write_block > psds->total_blocks)
889 psds->total_blocks = psds->write_block ;
890 psds->frames = psds->total_blocks * psds->samplesperblock ;
898 SDS_PRIVATE *psds ;
905 psds = (SDS_PRIVATE*) psf->codec_data ;
906 psds->total_written += len ;
914 count = sds_write (psf, psds, iptr, writecount) ;
924 { SDS_PRIVATE *psds ;
929 psds = (SDS_PRIVATE*) psf->codec_data ;
930 psds->total_written += len ;
932 total = sds_write (psf, psds, ptr, len) ;
940 SDS_PRIVATE *psds ;
948 psds = (SDS_PRIVATE*) psf->codec_data ;
949 psds->total_written += len ;
954 normfact = 1.0 * (1 << psds->bitwidth) ;
962 count = sds_write (psf, psds, iptr, writecount) ;
973 SDS_PRIVATE *psds ;
981 psds = (SDS_PRIVATE*) psf->codec_data ;
982 psds->total_written += len ;
987 normfact = 1.0 * (1 << psds->bitwidth) ;
995 count = sds_write (psf, psds, iptr, writecount) ;
1004 sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *ptr, int len)
1008 { count = psds->samplesperblock - psds->write_count ;
1012 memcpy (&(psds->write_samples [psds->write_count]), &(ptr [total]), count * sizeof (int)) ;
1014 psds->write_count += count ;
1016 if (psds->write_count >= psds->samplesperblock)
1017 psds->writer (psf, psds) ;