Lines Matching refs:ty

2  * TiVo ty stream demuxer
169 TYDemuxContext *ty = s->priv_data;
222 ty->tivo_series = TIVO_SERIES1;
223 ty->pes_length = SERIES1_PES_LENGTH;
226 ty->tivo_series = TIVO_SERIES2;
227 ty->pes_length = SERIES2_PES_LENGTH;
231 ty->audio_type = TIVO_AUDIO_AC3;
232 ty->tivo_type = TIVO_TYPE_DTIVO;
233 ty->pts_offset = AC3_PTS_OFFSET;
234 ty->pes_length = AC3_PES_LENGTH;
236 ty->audio_type = TIVO_AUDIO_MPEG;
242 if (ty->tivo_type == TIVO_TYPE_UNKNOWN) {
257 if (ty->tivo_series == TIVO_SERIES1)
259 ty->tivo_type = TIVO_TYPE_SA;
260 ty->pts_offset = SA_PTS_OFFSET;
262 if (ty->tivo_series == TIVO_SERIES1)
264 ty->tivo_type = TIVO_TYPE_DTIVO;
265 ty->pts_offset = DTIVO_PTS_OFFSET;
280 TYDemuxContext *ty = s->priv_data;
285 ty->first_audio_pts = AV_NOPTS_VALUE;
286 ty->last_audio_pts = AV_NOPTS_VALUE;
287 ty->last_video_pts = AV_NOPTS_VALUE;
290 avio_read(pb, ty->chunk, CHUNK_SIZE);
292 ret = analyze_chunk(s, ty->chunk);
295 if (ty->tivo_series != TIVO_SERIES_UNKNOWN &&
296 ty->audio_type != TIVO_AUDIO_UNKNOWN &&
297 ty->tivo_type != TIVO_TYPE_UNKNOWN)
301 if (ty->tivo_series == TIVO_SERIES_UNKNOWN ||
302 ty->audio_type == TIVO_AUDIO_UNKNOWN ||
303 ty->tivo_type == TIVO_TYPE_UNKNOWN)
319 if (ty->audio_type == TIVO_AUDIO_MPEG) {
327 ty->first_chunk = 1;
336 TYDemuxContext *ty = s->priv_data;
340 ff_dlog(s, "parsing ty chunk #%d\n", ty->cur_chunk);
347 read_size = avio_read(pb, ty->chunk, CHUNK_SIZE);
348 ty->cur_chunk++;
350 if ((read_size < 4) || (AV_RB32(ty->chunk) == 0)) {
355 if (AV_RB32(ty->chunk) == TIVO_PES_FILEID) {
361 if (ty->chunk[3] & 0x80) {
363 ty->num_recs = num_recs = (ty->chunk[1] << 8) + ty->chunk[0];
366 ty->num_recs = num_recs = ty->chunk[0];
368 ty->cur_rec = 0;
369 ty->first_chunk = 0;
372 ty->cur_chunk_pos = 4;
374 av_freep(&ty->rec_hdrs);
379 ty->rec_hdrs = parse_chunk_headers(ty->chunk + 4, num_recs);
380 if (!ty->rec_hdrs)
382 ty->cur_chunk_pos += 16 * num_recs;
389 TYDemuxContext *ty = s->priv_data;
400 es_offset1 = find_es_header(ty_VideoPacket, ty->chunk + ty->cur_chunk_pos, 5);
402 ty->last_video_pts = ff_parse_pes_pts(
403 ty->chunk + ty->cur_chunk_pos + es_offset1 + VIDEO_PTS_OFFSET);
411 ty->cur_chunk_pos += VIDEO_PES_LENGTH + es_offset1;
414 memcpy(pkt->data, ty->chunk + ty->cur_chunk_pos, size);
415 ty->cur_chunk_pos += size;
422 ty->cur_chunk_pos += rec_size;
431 ty->cur_chunk_pos += rec_size;
438 memcpy(pkt->data, ty->chunk + ty->cur_chunk_pos, rec_size);
439 ty->cur_chunk_pos += rec_size;
449 ty->last_ty_pts = rec_hdr->ty_pts;
457 ty->last_ty_pts += 35000000;
458 //ty->last_ty_pts += 33366667;
461 if (ty->last_video_pts > AV_NOPTS_VALUE) {
462 pkt->pts = ty->last_video_pts;
466 ty->last_video_pts = AV_NOPTS_VALUE;
476 TYDemuxContext *ty = s->priv_data;
478 if (offset < 0 || offset + ty->pes_length > rec_len) {
484 memset(ty->pes_buffer, 0, 4);
485 ty->pes_buf_cnt = 4;
491 memcpy(ty->pes_buffer, pkt->data + offset, rec_len - offset);
492 ty->pes_buf_cnt = rec_len - offset;
502 ty->last_audio_pts = ff_parse_pes_pts(&pkt->data[ offset + ty->pts_offset]);
503 if (ty->first_audio_pts == AV_NOPTS_VALUE)
504 ty->first_audio_pts = ty->last_audio_pts;
505 pkt->pts = ty->last_audio_pts;
506 memmove(pkt->data + offset, pkt->data + offset + ty->pes_length, rec_len - ty->pes_length);
507 pkt->size -= ty->pes_length;
513 TYDemuxContext *ty = s->priv_data;
525 if (ty->pes_buf_cnt > 0) {
526 need = ty->pes_length - ty->pes_buf_cnt;
532 memcpy(ty->pes_buffer + ty->pes_buf_cnt, ty->chunk + ty->cur_chunk_pos, rec_size);
533 ty->cur_chunk_pos += rec_size;
534 ty->pes_buf_cnt += rec_size;
539 memcpy(ty->pes_buffer + ty->pes_buf_cnt, ty->chunk + ty->cur_chunk_pos, need);
540 ty->cur_chunk_pos += need;
542 if (ty->audio_type == TIVO_AUDIO_MPEG) {
544 ty->pes_buffer, 5);
547 ty->pes_buffer, 5);
552 ty->last_audio_pts = ff_parse_pes_pts(
553 &ty->pes_buffer[es_offset1 + ty->pts_offset]);
554 pkt->pts = ty->last_audio_pts;
556 ty->pes_buf_cnt = 0;
561 memcpy(pkt->data, ty->chunk + ty->cur_chunk_pos, rec_size - need);
562 ty->cur_chunk_pos += rec_size - need;
571 if (ty->audio_type == TIVO_AUDIO_AC3 &&
572 ty->tivo_series == TIVO_SERIES2) {
573 if (ty->ac3_pkt_size + pkt->size > AC3_PKT_LENGTH) {
575 ty->ac3_pkt_size = 0;
577 ty->ac3_pkt_size += pkt->size;
583 memcpy(pkt->data, ty->chunk + ty->cur_chunk_pos, rec_size);
584 ty->cur_chunk_pos += rec_size;
593 ty->last_audio_pts = ff_parse_pes_pts(&pkt->data[SA_PTS_OFFSET]);
594 if (ty->first_audio_pts == AV_NOPTS_VALUE)
595 ty->first_audio_pts = ty->last_audio_pts;
614 memcpy(pkt->data, ty->chunk + ty->cur_chunk_pos, rec_size);
615 ty->cur_chunk_pos += rec_size;
617 pkt->pts = ty->last_audio_pts;
621 memcpy(pkt->data, ty->chunk + ty->cur_chunk_pos, rec_size);
622 ty->cur_chunk_pos += rec_size ;
636 if (ty->tivo_series == TIVO_SERIES2) {
639 ty->ac3_pkt_size = 0;
641 ty->ac3_pkt_size = pkt->size;
646 ty->cur_chunk_pos += rec_size;
655 TYDemuxContext *ty = s->priv_data;
665 if (!ty->rec_hdrs || ty->first_chunk || ty->cur_rec >= ty->num_recs) {
666 if (get_chunk(s) < 0 || ty->num_recs <= 0)
670 rec = &ty->rec_hdrs[ty->cur_rec];
672 ty->cur_rec++;
677 if (ty->cur_chunk_pos + rec->rec_size > CHUNK_SIZE)
696 ty->cur_chunk_pos += rec->rec_size;
706 TYDemuxContext *ty = s->priv_data;
708 av_freep(&ty->rec_hdrs);
714 .name = "ty",
721 .extensions = "ty,ty+",