while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) {
GstBuffer *buf;
+ if (op.e_o_s) {
+ GstAudioEncoder *enc = GST_AUDIO_ENCODER (vorbisenc);
+ GstClockTime duration;
+
+ GST_DEBUG_OBJECT (vorbisenc, "Got EOS packet from libvorbis");
+ GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+ if (!GST_CLOCK_TIME_IS_VALID (enc->output_segment.stop)) {
+ GST_DEBUG_OBJECT (vorbisenc,
+ "Output segment has no end time, setting");
+ duration =
+ gst_util_uint64_scale (op.granulepos, GST_SECOND,
+ vorbisenc->frequency);
+ enc->output_segment.stop = enc->output_segment.start + duration;
+ GST_DEBUG_OBJECT (enc, "new output segment %" GST_SEGMENT_FORMAT,
+ &enc->output_segment);
+ gst_pad_push_event (GST_AUDIO_ENCODER_SRC_PAD (enc),
+ gst_event_new_segment (&enc->output_segment));
+ }
+ GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+ }
+
GST_LOG_OBJECT (vorbisenc, "pushing out a data packet");
buf =
gst_audio_encoder_allocate_output_buffer (GST_AUDIO_ENCODER