|
|
|
@@ -34,7 +34,6 @@ typedef struct PulseData { |
|
|
|
const char *stream_name; |
|
|
|
const char *device; |
|
|
|
pa_simple *pa; |
|
|
|
unsigned int stream_index; |
|
|
|
int64_t timestamp; |
|
|
|
} PulseData; |
|
|
|
|
|
|
|
@@ -43,23 +42,15 @@ static av_cold int pulse_write_header(AVFormatContext *h) |
|
|
|
PulseData *s = h->priv_data; |
|
|
|
AVStream *st = NULL; |
|
|
|
int ret; |
|
|
|
unsigned int i; |
|
|
|
pa_sample_spec ss; |
|
|
|
pa_buffer_attr attr = { -1, -1, -1, -1, -1 }; |
|
|
|
const char *stream_name = s->stream_name; |
|
|
|
|
|
|
|
for (i = 0; i < h->nb_streams; i++) { |
|
|
|
if (h->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) { |
|
|
|
st = h->streams[i]; |
|
|
|
s->stream_index = i; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!st) { |
|
|
|
av_log(s, AV_LOG_ERROR, "No audio stream found.\n"); |
|
|
|
if (h->nb_streams != 1 || h->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO) { |
|
|
|
av_log(s, AV_LOG_ERROR, "Only a single audio stream is supported.\n"); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
st = h->streams[0]; |
|
|
|
|
|
|
|
if (!stream_name) { |
|
|
|
if (h->filename[0]) |
|
|
|
@@ -114,16 +105,13 @@ static int pulse_write_packet(AVFormatContext *h, AVPacket *pkt) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
if (s->stream_index != pkt->stream_index) |
|
|
|
return 0; |
|
|
|
|
|
|
|
if (pkt->dts != AV_NOPTS_VALUE) |
|
|
|
s->timestamp = pkt->dts; |
|
|
|
|
|
|
|
if (pkt->duration) { |
|
|
|
s->timestamp += pkt->duration;; |
|
|
|
} else { |
|
|
|
AVStream *st = h->streams[s->stream_index]; |
|
|
|
AVStream *st = h->streams[0]; |
|
|
|
AVCodecContext *codec_ctx = st->codec; |
|
|
|
AVRational r = { 1, codec_ctx->sample_rate }; |
|
|
|
int64_t samples = pkt->size / (av_get_bytes_per_sample(codec_ctx->sample_fmt) * codec_ctx->channels); |
|
|
|
|