Lines Matching refs:stream

94 static guint8 tsmux_stream_pes_header_length (TsMuxStream * stream);
95 static void tsmux_stream_write_pes_header (TsMuxStream * stream, guint8 * data);
96 static void tsmux_stream_find_pts_dts_within (TsMuxStream * stream, guint bound,
127 TsMuxStream *stream = g_slice_new0 (TsMuxStream); in tsmux_stream_new() local
129 stream->state = TSMUX_STREAM_STATE_HEADER; in tsmux_stream_new()
130 stream->pi.pid = pid; in tsmux_stream_new()
131 stream->stream_type = stream_type; in tsmux_stream_new()
133 stream->pes_payload_size = 0; in tsmux_stream_new()
134 stream->cur_pes_payload_size = 0; in tsmux_stream_new()
135 stream->pes_bytes_written = 0; in tsmux_stream_new()
144 stream->id = 0xE0; in tsmux_stream_new()
145 stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER; in tsmux_stream_new()
146 stream->is_video_stream = TRUE; in tsmux_stream_new()
149 stream->id = 0xBD; in tsmux_stream_new()
150 stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER; in tsmux_stream_new()
151 stream->is_video_stream = TRUE; in tsmux_stream_new()
157 stream->is_audio = TRUE; in tsmux_stream_new()
158 stream->id = 0xC0; in tsmux_stream_new()
159 stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER; in tsmux_stream_new()
165 stream->id = 0xFD; in tsmux_stream_new()
169 stream->id_extended = 0x60; in tsmux_stream_new()
170 stream->is_video_stream = TRUE; in tsmux_stream_new()
173 stream->is_audio = TRUE; in tsmux_stream_new()
174 stream->id_extended = 0x80; in tsmux_stream_new()
177 stream->is_audio = TRUE; in tsmux_stream_new()
178 stream->id_extended = 0x71; in tsmux_stream_new()
181 stream->is_audio = TRUE; in tsmux_stream_new()
182 stream->id_extended = 0x82; in tsmux_stream_new()
187 stream->pi.flags |= in tsmux_stream_new()
193 stream->pi.pes_header_length = 36; in tsmux_stream_new()
197 stream->id = 0xBD; in tsmux_stream_new()
198 stream->is_dvb_sub = TRUE; in tsmux_stream_new()
199 stream->stream_type = TSMUX_ST_PRIVATE_DATA; in tsmux_stream_new()
200 stream->pi.flags |= in tsmux_stream_new()
207 stream->id = 0xBD; in tsmux_stream_new()
208 stream->stream_type = TSMUX_ST_PRIVATE_DATA; in tsmux_stream_new()
209 stream->is_meta = TRUE; in tsmux_stream_new()
210 stream->pi.flags |= in tsmux_stream_new()
216 stream->id = 0xBD; in tsmux_stream_new()
217 stream->is_audio = TRUE; in tsmux_stream_new()
218 stream->stream_type = TSMUX_ST_PRIVATE_DATA; in tsmux_stream_new()
219 stream->is_opus = TRUE; in tsmux_stream_new()
220 stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER; in tsmux_stream_new()
227 stream->last_pts = GST_CLOCK_STIME_NONE; in tsmux_stream_new()
228 stream->last_dts = GST_CLOCK_STIME_NONE; in tsmux_stream_new()
230 stream->pcr_ref = 0; in tsmux_stream_new()
231 stream->last_pcr = -1; in tsmux_stream_new()
233 return stream; in tsmux_stream_new()
245 tsmux_stream_get_pid (TsMuxStream * stream) in tsmux_stream_get_pid() argument
247 g_return_val_if_fail (stream != NULL, G_MAXUINT16); in tsmux_stream_get_pid()
249 return stream->pi.pid; in tsmux_stream_get_pid()
259 tsmux_stream_free (TsMuxStream * stream) in tsmux_stream_free() argument
263 g_return_if_fail (stream != NULL); in tsmux_stream_free()
266 for (cur = stream->buffers; cur; cur = cur->next) { in tsmux_stream_free()
269 if (stream->buffer_release) in tsmux_stream_free()
270 stream->buffer_release (tmbuf->data, tmbuf->user_data); in tsmux_stream_free()
273 g_list_free (stream->buffers); in tsmux_stream_free()
275 g_slice_free (TsMuxStream, stream); in tsmux_stream_free()
288 tsmux_stream_set_buffer_release_func (TsMuxStream * stream, in tsmux_stream_set_buffer_release_func() argument
291 g_return_if_fail (stream != NULL); in tsmux_stream_set_buffer_release_func()
293 stream->buffer_release = func; in tsmux_stream_set_buffer_release_func()
299 tsmux_stream_consume (TsMuxStream * stream, guint len) in tsmux_stream_consume() argument
301 g_assert (stream->cur_buffer != NULL); in tsmux_stream_consume()
302 g_assert (len <= stream->cur_buffer->size - stream->cur_buffer_consumed); in tsmux_stream_consume()
304 stream->cur_buffer_consumed += len; in tsmux_stream_consume()
305 stream->bytes_avail -= len; in tsmux_stream_consume()
307 if (stream->cur_buffer_consumed == 0 && stream->cur_buffer->size != 0) in tsmux_stream_consume()
310 if (GST_CLOCK_STIME_IS_VALID (stream->cur_buffer->pts)) { in tsmux_stream_consume()
311 stream->last_pts = stream->cur_buffer->pts; in tsmux_stream_consume()
312 stream->last_dts = stream->cur_buffer->dts; in tsmux_stream_consume()
313 } else if (GST_CLOCK_STIME_IS_VALID (stream->cur_buffer->dts)) in tsmux_stream_consume()
314 stream->last_dts = stream->cur_buffer->dts; in tsmux_stream_consume()
316 if (stream->cur_buffer_consumed == stream->cur_buffer->size) { in tsmux_stream_consume()
318 stream->buffers = g_list_delete_link (stream->buffers, stream->buffers); in tsmux_stream_consume()
320 if (stream->buffer_release) { in tsmux_stream_consume()
321 stream->buffer_release (stream->cur_buffer->data, in tsmux_stream_consume()
322 stream->cur_buffer->user_data); in tsmux_stream_consume()
325 g_slice_free (TsMuxStreamBuffer, stream->cur_buffer); in tsmux_stream_consume()
326 stream->cur_buffer = NULL; in tsmux_stream_consume()
330 if (stream->cur_pes_payload_size == 0) { in tsmux_stream_consume()
331 stream->state = TSMUX_STREAM_STATE_HEADER; in tsmux_stream_consume()
332 stream->pes_bytes_written = 0; in tsmux_stream_consume()
346 tsmux_stream_at_pes_start (TsMuxStream * stream) in tsmux_stream_at_pes_start() argument
348 g_return_val_if_fail (stream != NULL, FALSE); in tsmux_stream_at_pes_start()
350 return stream->state == TSMUX_STREAM_STATE_HEADER; in tsmux_stream_at_pes_start()
362 _tsmux_stream_bytes_avail (TsMuxStream * stream) in _tsmux_stream_bytes_avail() argument
366 g_return_val_if_fail (stream != NULL, 0); in _tsmux_stream_bytes_avail()
368 if (stream->cur_pes_payload_size != 0) in _tsmux_stream_bytes_avail()
369 bytes_avail = stream->cur_pes_payload_size - stream->pes_bytes_written; in _tsmux_stream_bytes_avail()
371 bytes_avail = stream->bytes_avail; in _tsmux_stream_bytes_avail()
373 bytes_avail = MIN (bytes_avail, stream->bytes_avail); in _tsmux_stream_bytes_avail()
376 if (stream->state == TSMUX_STREAM_STATE_HEADER) in _tsmux_stream_bytes_avail()
377 bytes_avail += tsmux_stream_pes_header_length (stream); in _tsmux_stream_bytes_avail()
383 tsmux_stream_bytes_avail (TsMuxStream * stream) in tsmux_stream_bytes_avail() argument
385 g_return_val_if_fail (stream != NULL, 0); in tsmux_stream_bytes_avail()
387 return _tsmux_stream_bytes_avail (stream); in tsmux_stream_bytes_avail()
399 tsmux_stream_bytes_in_buffer (TsMuxStream * stream) in tsmux_stream_bytes_in_buffer() argument
401 g_return_val_if_fail (stream != NULL, 0); in tsmux_stream_bytes_in_buffer()
403 return stream->bytes_avail; in tsmux_stream_bytes_in_buffer()
415 tsmux_stream_initialize_pes_packet (TsMuxStream * stream) in tsmux_stream_initialize_pes_packet() argument
417 if (stream->state != TSMUX_STREAM_STATE_HEADER) in tsmux_stream_initialize_pes_packet()
420 if (stream->pes_payload_size != 0) { in tsmux_stream_initialize_pes_packet()
422 stream->cur_pes_payload_size = stream->pes_payload_size; in tsmux_stream_initialize_pes_packet()
423 tsmux_stream_find_pts_dts_within (stream, stream->cur_pes_payload_size, in tsmux_stream_initialize_pes_packet()
424 &stream->pts, &stream->dts); in tsmux_stream_initialize_pes_packet()
427 stream->cur_pes_payload_size = stream->bytes_avail; in tsmux_stream_initialize_pes_packet()
428 tsmux_stream_find_pts_dts_within (stream, stream->cur_pes_payload_size, in tsmux_stream_initialize_pes_packet()
429 &stream->pts, &stream->dts); in tsmux_stream_initialize_pes_packet()
432 stream->pi.flags &= ~(TSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS | in tsmux_stream_initialize_pes_packet()
435 if (GST_CLOCK_STIME_IS_VALID (stream->pts) in tsmux_stream_initialize_pes_packet()
436 && GST_CLOCK_STIME_IS_VALID (stream->dts) in tsmux_stream_initialize_pes_packet()
437 && stream->pts != stream->dts) in tsmux_stream_initialize_pes_packet()
438 stream->pi.flags |= TSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS; in tsmux_stream_initialize_pes_packet()
440 if (GST_CLOCK_STIME_IS_VALID (stream->pts)) in tsmux_stream_initialize_pes_packet()
441 stream->pi.flags |= TSMUX_PACKET_FLAG_PES_WRITE_PTS; in tsmux_stream_initialize_pes_packet()
444 if (stream->buffers) { in tsmux_stream_initialize_pes_packet()
445 TsMuxStreamBuffer *buf = (TsMuxStreamBuffer *) (stream->buffers->data); in tsmux_stream_initialize_pes_packet()
447 stream->pi.flags |= TSMUX_PACKET_FLAG_RANDOM_ACCESS; in tsmux_stream_initialize_pes_packet()
448 stream->pi.flags |= TSMUX_PACKET_FLAG_ADAPTATION; in tsmux_stream_initialize_pes_packet()
452 if (stream->is_video_stream) { in tsmux_stream_initialize_pes_packet()
455 hdr_len = tsmux_stream_pes_header_length (stream); in tsmux_stream_initialize_pes_packet()
458 if ((stream->cur_pes_payload_size + hdr_len - 6) > G_MAXUINT16) in tsmux_stream_initialize_pes_packet()
459 stream->cur_pes_payload_size = 0; in tsmux_stream_initialize_pes_packet()
476 tsmux_stream_get_data (TsMuxStream * stream, guint8 * buf, guint len) in tsmux_stream_get_data() argument
478 g_return_val_if_fail (stream != NULL, FALSE); in tsmux_stream_get_data()
481 if (stream->state == TSMUX_STREAM_STATE_HEADER) { in tsmux_stream_get_data()
484 pes_hdr_length = tsmux_stream_pes_header_length (stream); in tsmux_stream_get_data()
491 pes_hdr_length, stream->cur_pes_payload_size); in tsmux_stream_get_data()
492 tsmux_stream_write_pes_header (stream, buf); in tsmux_stream_get_data()
497 stream->state = TSMUX_STREAM_STATE_PACKET; in tsmux_stream_get_data()
500 if (len > (guint) _tsmux_stream_bytes_avail (stream)) in tsmux_stream_get_data()
503 stream->pes_bytes_written += len; in tsmux_stream_get_data()
505 if (stream->cur_pes_payload_size != 0 && in tsmux_stream_get_data()
506 stream->pes_bytes_written == stream->cur_pes_payload_size) { in tsmux_stream_get_data()
508 stream->state = TSMUX_STREAM_STATE_HEADER; in tsmux_stream_get_data()
509 stream->pes_bytes_written = 0; in tsmux_stream_get_data()
516 if (stream->cur_buffer == NULL) { in tsmux_stream_get_data()
518 if (stream->buffers == NULL) in tsmux_stream_get_data()
520 stream->cur_buffer = (TsMuxStreamBuffer *) (stream->buffers->data); in tsmux_stream_get_data()
521 stream->cur_buffer_consumed = 0; in tsmux_stream_get_data()
525 avail = stream->cur_buffer->size - stream->cur_buffer_consumed; in tsmux_stream_get_data()
526 cur = stream->cur_buffer->data + stream->cur_buffer_consumed; in tsmux_stream_get_data()
529 tsmux_stream_consume (stream, avail); in tsmux_stream_get_data()
535 tsmux_stream_consume (stream, len); in tsmux_stream_get_data()
545 tsmux_stream_pes_header_length (TsMuxStream * stream) in tsmux_stream_pes_header_length() argument
554 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_FULL_HEADER) { in tsmux_stream_pes_header_length()
558 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS) { in tsmux_stream_pes_header_length()
560 } else if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_WRITE_PTS) { in tsmux_stream_pes_header_length()
563 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_EXT_STREAMID) { in tsmux_stream_pes_header_length()
568 if (stream->pi.pes_header_length) { in tsmux_stream_pes_header_length()
570 g_assert (packet_len <= stream->pi.pes_header_length + 6 + 3); in tsmux_stream_pes_header_length()
571 packet_len = stream->pi.pes_header_length + 6 + 3; in tsmux_stream_pes_header_length()
581 tsmux_stream_find_pts_dts_within (TsMuxStream * stream, guint bound, in tsmux_stream_find_pts_dts_within() argument
589 for (cur = stream->buffers; cur; cur = cur->next) { in tsmux_stream_find_pts_dts_within()
614 tsmux_stream_write_pes_header (TsMuxStream * stream, guint8 * data) in tsmux_stream_write_pes_header() argument
617 guint8 hdr_len = tsmux_stream_pes_header_length (stream); in tsmux_stream_write_pes_header()
624 data[3] = stream->id; in tsmux_stream_write_pes_header()
629 if (stream->cur_pes_payload_size != 0) { in tsmux_stream_write_pes_header()
630 length_to_write = hdr_len + stream->cur_pes_payload_size - 6; in tsmux_stream_write_pes_header()
637 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_FULL_HEADER) { in tsmux_stream_write_pes_header()
642 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_DATA_ALIGNMENT) in tsmux_stream_write_pes_header()
648 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS) in tsmux_stream_write_pes_header()
650 else if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_WRITE_PTS) in tsmux_stream_write_pes_header()
652 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_EXT_STREAMID) in tsmux_stream_write_pes_header()
661 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS) { in tsmux_stream_write_pes_header()
662 tsmux_put_ts (&data, 0x3, stream->pts); in tsmux_stream_write_pes_header()
663 tsmux_put_ts (&data, 0x1, stream->dts); in tsmux_stream_write_pes_header()
664 } else if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_WRITE_PTS) { in tsmux_stream_write_pes_header()
665 tsmux_put_ts (&data, 0x2, stream->pts); in tsmux_stream_write_pes_header()
667 if (stream->pi.flags & TSMUX_PACKET_FLAG_PES_EXT_STREAMID) { in tsmux_stream_write_pes_header()
676 *data++ = stream->id_extended; in tsmux_stream_write_pes_header()
679 if (stream->pi.pes_header_length) in tsmux_stream_write_pes_header()
680 while (data < orig_data + stream->pi.pes_header_length + 9) in tsmux_stream_write_pes_header()
703 tsmux_stream_add_data (TsMuxStream * stream, guint8 * data, guint len, in tsmux_stream_add_data() argument
708 g_return_if_fail (stream != NULL); in tsmux_stream_add_data()
719 if (stream->bytes_avail == 0) in tsmux_stream_add_data()
720 stream->last_pts = pts; in tsmux_stream_add_data()
722 stream->bytes_avail += len; in tsmux_stream_add_data()
723 stream->buffers = g_list_append (stream->buffers, packet); in tsmux_stream_add_data()
738 tsmux_stream_get_es_descrs (TsMuxStream * stream, in tsmux_stream_get_es_descrs() argument
743 g_return_if_fail (stream != NULL); in tsmux_stream_get_es_descrs()
746 if (stream->is_audio && stream->language[0] != '\0') { in tsmux_stream_get_es_descrs()
747 descriptor = gst_mpegts_descriptor_from_iso_639_language (stream->language); in tsmux_stream_get_es_descrs()
755 switch (stream->stream_type) { in tsmux_stream_get_es_descrs()
798 guint8 level = stream->profile_and_level & 0xF; in tsmux_stream_get_es_descrs()
822 gst_byte_writer_put_uint16_be (&writer, stream->profile_and_level); in tsmux_stream_get_es_descrs()
823 gst_byte_writer_put_uint32_be (&writer, stream->horizontal_size); in tsmux_stream_get_es_descrs()
824 gst_byte_writer_put_uint32_be (&writer, stream->vertical_size); in tsmux_stream_get_es_descrs()
826 gst_byte_writer_put_uint32_be (&writer, stream->max_bitrate); in tsmux_stream_get_es_descrs()
827 gst_byte_writer_put_uint16_be (&writer, stream->den); in tsmux_stream_get_es_descrs()
828 gst_byte_writer_put_uint16_be (&writer, stream->num); in tsmux_stream_get_es_descrs()
829 gst_byte_writer_put_uint8 (&writer, stream->color_spec); in tsmux_stream_get_es_descrs()
831 if (stream->interlace_mode) in tsmux_stream_get_es_descrs()
871 switch (stream->audio_sampling) { in tsmux_stream_get_es_descrs()
887 switch (stream->audio_bitrate) { in tsmux_stream_get_es_descrs()
951 switch (stream->audio_channels) { in tsmux_stream_get_es_descrs()
1005 if (stream->is_dvb_sub) { in tsmux_stream_get_es_descrs()
1006 GST_DEBUG ("Stream language %s", stream->language); in tsmux_stream_get_es_descrs()
1012 gst_mpegts_descriptor_from_dvb_subtitling (stream->language, 0x10, in tsmux_stream_get_es_descrs()
1018 if (stream->is_opus) { in tsmux_stream_get_es_descrs()
1025 &stream->opus_channel_config_code, 1); in tsmux_stream_get_es_descrs()
1029 if (stream->is_meta) { in tsmux_stream_get_es_descrs()
1046 tsmux_stream_pcr_ref (TsMuxStream * stream) in tsmux_stream_pcr_ref() argument
1048 g_return_if_fail (stream != NULL); in tsmux_stream_pcr_ref()
1050 stream->pcr_ref++; in tsmux_stream_pcr_ref()
1060 tsmux_stream_pcr_unref (TsMuxStream * stream) in tsmux_stream_pcr_unref() argument
1062 g_return_if_fail (stream != NULL); in tsmux_stream_pcr_unref()
1064 stream->pcr_ref--; in tsmux_stream_pcr_unref()
1076 tsmux_stream_is_pcr (TsMuxStream * stream) in tsmux_stream_is_pcr() argument
1078 return stream->pcr_ref != 0; in tsmux_stream_is_pcr()
1091 tsmux_stream_get_pts (TsMuxStream * stream) in tsmux_stream_get_pts() argument
1093 g_return_val_if_fail (stream != NULL, GST_CLOCK_STIME_NONE); in tsmux_stream_get_pts()
1095 return stream->last_pts; in tsmux_stream_get_pts()