Lines Matching refs:stream
53 static guint8 psmux_stream_pes_header_length (PsMuxStream * stream);
54 static void psmux_stream_write_pes_header (PsMuxStream * stream, guint8 * data);
55 static void psmux_stream_find_pts_dts_within (PsMuxStream * stream, guint bound,
70 PsMuxStream *stream = g_slice_new0 (PsMuxStream); in psmux_stream_new() local
73 stream->stream_type = stream_type; in psmux_stream_new()
74 stream->is_audio_stream = FALSE; in psmux_stream_new()
75 stream->is_video_stream = FALSE; in psmux_stream_new()
76 stream->stream_id = 0; in psmux_stream_new()
77 stream->max_buffer_size = 0; in psmux_stream_new()
83 stream->max_buffer_size = 2484; /* ISO/IEC 13818 2.5.2.4 */ in psmux_stream_new()
87 stream->stream_id = info->id_mpga++; in psmux_stream_new()
88 stream->stream_id_ext = 0; in psmux_stream_new()
89 stream->is_audio_stream = TRUE; in psmux_stream_new()
98 stream->stream_id = info->id_mpgv++; in psmux_stream_new()
99 stream->stream_id_ext = 0; in psmux_stream_new()
100 stream->is_video_stream = TRUE; in psmux_stream_new()
106 stream->stream_id = PSMUX_PRIVATE_STREAM_1; in psmux_stream_new()
107 stream->stream_id_ext = info->id_ac3++; in psmux_stream_new()
108 stream->is_audio_stream = TRUE; in psmux_stream_new()
110 stream->pi.flags |= PSMUX_PACKET_FLAG_PES_DATA_ALIGN; in psmux_stream_new()
123 stream->stream_id = PSMUX_PRIVATE_STREAM_1; in psmux_stream_new()
124 stream->stream_id_ext = info->id_dts++; in psmux_stream_new()
125 stream->is_audio_stream = TRUE; in psmux_stream_new()
131 stream->stream_id = PSMUX_PRIVATE_STREAM_1; in psmux_stream_new()
132 stream->stream_id_ext = info->id_lpcm++; in psmux_stream_new()
133 stream->is_audio_stream = TRUE; in psmux_stream_new()
138 stream->stream_id = PSMUX_EXTENDED_STREAM; in psmux_stream_new()
139 stream->stream_id_ext = info->id_dirac++; in psmux_stream_new()
140 stream->is_video_stream = TRUE; in psmux_stream_new()
147 if (stream->stream_id == 0) { in psmux_stream_new()
149 stream->stream_type); in psmux_stream_new()
150 g_slice_free (PsMuxStream, stream); in psmux_stream_new()
155 if (stream->stream_id == PSMUX_EXTENDED_STREAM) in psmux_stream_new()
156 stream->pi.flags |= PSMUX_PACKET_FLAG_PES_EXT_STREAMID; in psmux_stream_new()
159 if (stream->stream_id == PSMUX_PROGRAM_STREAM_MAP || in psmux_stream_new()
160 stream->stream_id == PSMUX_PADDING_STREAM || in psmux_stream_new()
161 stream->stream_id == PSMUX_PRIVATE_STREAM_2 || in psmux_stream_new()
162 stream->stream_id == PSMUX_ECM || in psmux_stream_new()
163 stream->stream_id == PSMUX_EMM || in psmux_stream_new()
164 stream->stream_id == PSMUX_PROGRAM_STREAM_DIRECTORY || in psmux_stream_new()
165 stream->stream_id == PSMUX_DSMCC_STREAM || in psmux_stream_new()
166 stream->stream_id == PSMUX_ITU_T_H222_1_TYPE_E) in psmux_stream_new()
167 stream->pi.flags &= ~PSMUX_PACKET_FLAG_PES_FULL_HEADER; in psmux_stream_new()
169 stream->pi.flags |= PSMUX_PACKET_FLAG_PES_FULL_HEADER; in psmux_stream_new()
171 stream->buffers = NULL; in psmux_stream_new()
172 stream->bytes_avail = 0; in psmux_stream_new()
173 stream->cur_buffer = NULL; in psmux_stream_new()
174 stream->cur_buffer_consumed = 0; in psmux_stream_new()
176 stream->cur_pes_payload_size = 0; in psmux_stream_new()
178 stream->pts = -1; in psmux_stream_new()
179 stream->dts = -1; in psmux_stream_new()
180 stream->last_pts = -1; in psmux_stream_new()
183 stream->audio_sampling = 0; in psmux_stream_new()
184 stream->audio_channels = 0; in psmux_stream_new()
185 stream->audio_bitrate = 0; in psmux_stream_new()
187 if (stream->max_buffer_size == 0) { in psmux_stream_new()
189 if (stream->is_video_stream) in psmux_stream_new()
190 stream->max_buffer_size = 400 * 1024; in psmux_stream_new()
191 else if (stream->is_audio_stream) in psmux_stream_new()
192 stream->max_buffer_size = 4 * 1024; in psmux_stream_new()
197 return stream; in psmux_stream_new()
207 psmux_stream_free (PsMuxStream * stream) in psmux_stream_free() argument
209 g_return_if_fail (stream != NULL); in psmux_stream_free()
211 if (psmux_stream_bytes_in_buffer (stream)) { in psmux_stream_free()
214 g_slice_free (PsMuxStream, stream); in psmux_stream_free()
220 psmux_stream_consume (PsMuxStream * stream, guint len) in psmux_stream_consume() argument
222 g_assert (stream->cur_buffer != NULL); in psmux_stream_consume()
223 g_assert (len <= stream->cur_buffer->map.size - stream->cur_buffer_consumed); in psmux_stream_consume()
225 stream->cur_buffer_consumed += len; in psmux_stream_consume()
226 stream->bytes_avail -= len; in psmux_stream_consume()
228 if (stream->cur_buffer_consumed == 0) in psmux_stream_consume()
231 if (stream->cur_buffer->pts != -1) in psmux_stream_consume()
232 stream->last_pts = stream->cur_buffer->pts; in psmux_stream_consume()
234 if (stream->cur_buffer_consumed == stream->cur_buffer->map.size) { in psmux_stream_consume()
236 stream->buffers = g_list_delete_link (stream->buffers, stream->buffers); in psmux_stream_consume()
238 gst_buffer_unmap (stream->cur_buffer->buf, &stream->cur_buffer->map); in psmux_stream_consume()
239 gst_buffer_unref (stream->cur_buffer->buf); in psmux_stream_consume()
240 g_slice_free (PsMuxStreamBuffer, stream->cur_buffer); in psmux_stream_consume()
241 stream->cur_buffer = NULL; in psmux_stream_consume()
255 psmux_stream_bytes_in_buffer (PsMuxStream * stream) in psmux_stream_bytes_in_buffer() argument
257 g_return_val_if_fail (stream != NULL, 0); in psmux_stream_bytes_in_buffer()
259 return stream->bytes_avail; in psmux_stream_bytes_in_buffer()
273 psmux_stream_get_data (PsMuxStream * stream, guint8 * buf, guint len) in psmux_stream_get_data() argument
278 g_return_val_if_fail (stream != NULL, FALSE); in psmux_stream_get_data()
282 stream->cur_pes_payload_size = in psmux_stream_get_data()
283 MIN (psmux_stream_bytes_in_buffer (stream), len - PSMUX_PES_MAX_HDR_LEN); in psmux_stream_get_data()
290 psmux_stream_find_pts_dts_within (stream, stream->cur_pes_payload_size, in psmux_stream_get_data()
291 &stream->pts, &stream->dts); in psmux_stream_get_data()
294 stream->pi.flags &= ~(PSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS | in psmux_stream_get_data()
297 if (stream->pts != -1 && stream->dts != -1) in psmux_stream_get_data()
298 stream->pi.flags |= PSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS; in psmux_stream_get_data()
300 if (stream->pts != -1) in psmux_stream_get_data()
301 stream->pi.flags |= PSMUX_PACKET_FLAG_PES_WRITE_PTS; in psmux_stream_get_data()
304 pes_hdr_length = psmux_stream_pes_header_length (stream); in psmux_stream_get_data()
308 pes_hdr_length, stream->cur_pes_payload_size); in psmux_stream_get_data()
309 psmux_stream_write_pes_header (stream, buf); in psmux_stream_get_data()
312 w = stream->cur_pes_payload_size; /* number of bytes of payload to write */ in psmux_stream_get_data()
318 if (stream->cur_buffer == NULL) { in psmux_stream_get_data()
320 if (stream->buffers == NULL) in psmux_stream_get_data()
322 stream->cur_buffer = (PsMuxStreamBuffer *) (stream->buffers->data); in psmux_stream_get_data()
323 stream->cur_buffer_consumed = 0; in psmux_stream_get_data()
327 avail = stream->cur_buffer->map.size - stream->cur_buffer_consumed; in psmux_stream_get_data()
328 cur = stream->cur_buffer->map.data + stream->cur_buffer_consumed; in psmux_stream_get_data()
331 psmux_stream_consume (stream, avail); in psmux_stream_get_data()
337 psmux_stream_consume (stream, w); in psmux_stream_get_data()
343 return pes_hdr_length + stream->cur_pes_payload_size; in psmux_stream_get_data()
347 psmux_stream_pes_header_length (PsMuxStream * stream) in psmux_stream_pes_header_length() argument
356 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_FULL_HEADER) { in psmux_stream_pes_header_length()
360 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS) { in psmux_stream_pes_header_length()
362 } else if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_WRITE_PTS) { in psmux_stream_pes_header_length()
365 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_EXT_STREAMID) { in psmux_stream_pes_header_length()
378 psmux_stream_find_pts_dts_within (PsMuxStream * stream, guint bound, in psmux_stream_find_pts_dts_within() argument
391 for (cur = g_list_first (stream->buffers); cur != NULL; in psmux_stream_find_pts_dts_within()
416 psmux_stream_write_pes_header (PsMuxStream * stream, guint8 * data) in psmux_stream_write_pes_header() argument
419 guint8 hdr_len = psmux_stream_pes_header_length (stream); in psmux_stream_write_pes_header()
425 data[3] = stream->stream_id; in psmux_stream_write_pes_header()
428 length_to_write = hdr_len - 6 + stream->cur_pes_payload_size; in psmux_stream_write_pes_header()
432 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_FULL_HEADER) { in psmux_stream_write_pes_header()
437 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_DATA_ALIGN) in psmux_stream_write_pes_header()
443 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS) in psmux_stream_write_pes_header()
445 else if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_WRITE_PTS) in psmux_stream_write_pes_header()
447 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_EXT_STREAMID) in psmux_stream_write_pes_header()
456 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_WRITE_PTS_DTS) { in psmux_stream_write_pes_header()
457 psmux_put_ts (&data, 0x3, stream->pts); in psmux_stream_write_pes_header()
458 psmux_put_ts (&data, 0x1, stream->dts); in psmux_stream_write_pes_header()
459 } else if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_WRITE_PTS) { in psmux_stream_write_pes_header()
460 psmux_put_ts (&data, 0x2, stream->pts); in psmux_stream_write_pes_header()
463 if (stream->pi.flags & PSMUX_PACKET_FLAG_PES_EXT_STREAMID) { in psmux_stream_write_pes_header()
471 *data++ = 0x80 | stream->stream_id_ext; /* stream_id_extension_flag | extended_stream_id */ in psmux_stream_write_pes_header()
490 psmux_stream_add_data (PsMuxStream * stream, GstBuffer * buffer, in psmux_stream_add_data() argument
495 g_return_if_fail (stream != NULL); in psmux_stream_add_data()
511 if (stream->bytes_avail == 0) in psmux_stream_add_data()
512 stream->last_pts = pts; in psmux_stream_add_data()
514 stream->bytes_avail += packet->map.size; in psmux_stream_add_data()
516 stream->buffers = g_list_append (stream->buffers, packet); in psmux_stream_add_data()
532 psmux_stream_get_es_descrs (PsMuxStream * stream, guint8 * buf, guint16 * len) in psmux_stream_get_es_descrs() argument
536 g_return_if_fail (stream != NULL); in psmux_stream_get_es_descrs()
549 switch (stream->stream_type) { in psmux_stream_get_es_descrs()
604 switch (stream->audio_sampling) { in psmux_stream_get_es_descrs()
620 switch (stream->audio_bitrate) { in psmux_stream_get_es_descrs()
684 switch (stream->audio_channels) { in psmux_stream_get_es_descrs()
734 psmux_stream_get_pts (PsMuxStream * stream) in psmux_stream_get_pts() argument
736 g_return_val_if_fail (stream != NULL, -1); in psmux_stream_get_pts()
738 return stream->last_pts; in psmux_stream_get_pts()