6
6
PulseAudio is free software; you can redistribute it and/or modify
7
7
it under the terms of the GNU Lesser General Public License as published
8
by the Free Software Foundation; either version 2 of the License,
8
by the Free Software Foundation; either version 2.1 of the License,
9
9
or (at your option) any later version.
11
11
PulseAudio is distributed in the hope that it will be useful, but
91
91
pa_memblockq_set_maxlength(bq, maxlength);
92
92
pa_memblockq_set_tlength(bq, tlength);
93
pa_memblockq_set_minreq(bq, minreq);
93
94
pa_memblockq_set_prebuf(bq, prebuf);
94
pa_memblockq_set_minreq(bq, minreq);
95
95
pa_memblockq_set_maxrewind(bq, maxrewind);
97
97
pa_log_debug("memblockq sanitized: maxlength=%lu, tlength=%lu, base=%lu, prebuf=%lu, minreq=%lu maxrewind=%lu",
601
601
return l >= bq->minreq ? l : 0;
604
void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek) {
604
void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa_bool_t account) {
605
605
int64_t old, delta;
629
629
delta = bq->write_index - old;
631
if (delta >= (int64_t) bq->requested) {
632
delta -= (int64_t) bq->requested;
634
} else if (delta >= 0) {
635
bq->requested -= (size_t) delta;
632
if (delta >= (int64_t) bq->requested) {
633
delta -= (int64_t) bq->requested;
635
} else if (delta >= 0) {
636
bq->requested -= (size_t) delta;
639
641
bq->missing -= delta;
783
785
if (bq->tlength > bq->maxlength)
784
786
pa_memblockq_set_tlength(bq, bq->maxlength);
786
if (bq->prebuf > bq->maxlength)
787
pa_memblockq_set_prebuf(bq, bq->maxlength);
790
789
void pa_memblockq_set_tlength(pa_memblockq *bq, size_t tlength) {
791
790
size_t old_tlength;
793
if (tlength <= 0 || tlength == (size_t) -1)
795
794
tlength = bq->maxlength;
797
796
old_tlength = bq->tlength;
800
799
if (bq->tlength > bq->maxlength)
801
800
bq->tlength = bq->maxlength;
803
if (bq->prebuf > bq->tlength)
804
pa_memblockq_set_prebuf(bq, bq->tlength);
806
802
if (bq->minreq > bq->tlength)
807
803
pa_memblockq_set_minreq(bq, bq->tlength);
805
if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
806
pa_memblockq_set_prebuf(bq, bq->tlength+bq->base-bq->minreq);
809
808
bq->missing += (int64_t) bq->tlength - (int64_t) old_tlength;
811
void pa_memblockq_set_minreq(pa_memblockq *bq, size_t minreq) {
814
bq->minreq = (minreq/bq->base)*bq->base;
816
if (bq->minreq > bq->tlength)
817
bq->minreq = bq->tlength;
819
if (bq->minreq < bq->base)
820
bq->minreq = bq->base;
822
if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
823
pa_memblockq_set_prebuf(bq, bq->tlength+bq->base-bq->minreq);
812
826
void pa_memblockq_set_prebuf(pa_memblockq *bq, size_t prebuf) {
815
829
if (prebuf == (size_t) -1)
816
prebuf = bq->tlength;
830
prebuf = bq->tlength+bq->base-bq->minreq;
818
832
bq->prebuf = ((prebuf+bq->base-1)/bq->base)*bq->base;
820
834
if (prebuf > 0 && bq->prebuf < bq->base)
821
835
bq->prebuf = bq->base;
823
if (bq->prebuf > bq->tlength)
824
bq->prebuf = bq->tlength;
837
if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
838
bq->prebuf = bq->tlength+bq->base-bq->minreq;
826
840
if (bq->prebuf <= 0 || pa_memblockq_get_length(bq) >= bq->prebuf)
827
841
bq->in_prebuf = FALSE;
829
if (bq->minreq > bq->prebuf)
830
pa_memblockq_set_minreq(bq, bq->prebuf);
833
void pa_memblockq_set_minreq(pa_memblockq *bq, size_t minreq) {
836
bq->minreq = (minreq/bq->base)*bq->base;
838
if (bq->minreq > bq->tlength)
839
bq->minreq = bq->tlength;
841
if (bq->minreq > bq->prebuf)
842
bq->minreq = bq->prebuf;
844
if (bq->minreq < bq->base)
845
bq->minreq = bq->base;
848
844
void pa_memblockq_set_maxrewind(pa_memblockq *bq, size_t maxrewind) {
851
847
bq->maxrewind = (maxrewind/bq->base)*bq->base;
850
void pa_memblockq_apply_attr(pa_memblockq *bq, const pa_buffer_attr *a) {
854
pa_memblockq_set_maxlength(bq, a->maxlength);
855
pa_memblockq_set_tlength(bq, a->tlength);
856
pa_memblockq_set_prebuf(bq, a->prebuf);
857
pa_memblockq_set_minreq(bq, a->minreq);
860
void pa_memblockq_get_attr(pa_memblockq *bq, pa_buffer_attr *a) {
864
a->maxlength = (uint32_t) pa_memblockq_get_maxlength(bq);
865
a->tlength = (uint32_t) pa_memblockq_get_tlength(bq);
866
a->prebuf = (uint32_t) pa_memblockq_get_prebuf(bq);
867
a->minreq = (uint32_t) pa_memblockq_get_minreq(bq);
854
870
int pa_memblockq_splice(pa_memblockq *bq, pa_memblockq *source) {
876
892
pa_memblock_unref(chunk.memblock);
878
pa_memblockq_seek(bq, (int64_t) chunk.length, PA_SEEK_RELATIVE);
894
pa_memblockq_seek(bq, (int64_t) chunk.length, PA_SEEK_RELATIVE, TRUE);
880
896
pa_memblockq_drop(bq, chunk.length);