comparison mpeg12.c @ 383:e6b64bc3bc87 libavcodec

- repeat_pict meaning changed, now it signals the extra delay for the decoded frame. - extra_delay = (repeat_pict / 2) * (1/fps)
author pulento
date Tue, 14 May 2002 19:56:42 +0000
parents 0d73175fbded
children ddb1be8aa479
comparison
equal deleted inserted replaced
382:b1663b0ffbbc 383:e6b64bc3bc87
1336 s->chroma_420_type = get_bits1(&s->gb); 1336 s->chroma_420_type = get_bits1(&s->gb);
1337 s->progressive_frame = get_bits1(&s->gb); 1337 s->progressive_frame = get_bits1(&s->gb);
1338 /* composite display not parsed */ 1338 /* composite display not parsed */
1339 dprintf("intra_dc_precision=%d\n", s->intra_dc_precision); 1339 dprintf("intra_dc_precision=%d\n", s->intra_dc_precision);
1340 dprintf("picture_structure=%d\n", s->picture_structure); 1340 dprintf("picture_structure=%d\n", s->picture_structure);
1341 dprintf("top field first=%d\n", s->top_field_first);
1342 dprintf("repeat first field=%d\n", s->repeat_first_field);
1341 dprintf("conceal=%d\n", s->concealment_motion_vectors); 1343 dprintf("conceal=%d\n", s->concealment_motion_vectors);
1342 dprintf("intra_vlc_format=%d\n", s->intra_vlc_format); 1344 dprintf("intra_vlc_format=%d\n", s->intra_vlc_format);
1343 dprintf("alternate_scan=%d\n", s->alternate_scan); 1345 dprintf("alternate_scan=%d\n", s->alternate_scan);
1344 dprintf("frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct); 1346 dprintf("frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct);
1345 dprintf("progressive_frame=%d\n", s->progressive_frame); 1347 dprintf("progressive_frame=%d\n", s->progressive_frame);
1585 return 0; 1587 return 0;
1586 } 1588 }
1587 1589
1588 buf_ptr = buf; 1590 buf_ptr = buf;
1589 buf_end = buf + buf_size; 1591 buf_end = buf + buf_size;
1590 1592
1591 if (s->repeat_field % 2 == 1 && avctx->repeat_pict) { 1593 #if 0
1594 if (s->repeat_field % 2 == 1) {
1592 s->repeat_field++; 1595 s->repeat_field++;
1593 //fprintf(stderr,"\nRepeating last frame: %d -> %d! pict: %d %d", avctx->frame_number-1, avctx->frame_number, 1596 //fprintf(stderr,"\nRepeating last frame: %d -> %d! pict: %d %d", avctx->frame_number-1, avctx->frame_number,
1594 // s2->picture_number, s->repeat_field); 1597 // s2->picture_number, s->repeat_field);
1595 *data_size = sizeof(AVPicture); 1598 if (avctx->flags & CODEC_FLAG_REPEAT_FIELD) {
1596 goto the_end; 1599 *data_size = sizeof(AVPicture);
1597 } 1600 goto the_end;
1598 1601 }
1602 }
1603 #endif
1599 while (buf_ptr < buf_end) { 1604 while (buf_ptr < buf_end) {
1600 buf_start = buf_ptr; 1605 buf_start = buf_ptr;
1601 /* find start next code */ 1606 /* find start next code */
1602 code = find_start_code(&buf_ptr, buf_end, &s->header_state); 1607 code = find_start_code(&buf_ptr, buf_end, &s->header_state);
1603 if (code >= 0) { 1608 if (code >= 0) {
1643 ret = mpeg_decode_slice(avctx, picture, 1648 ret = mpeg_decode_slice(avctx, picture,
1644 start_code, s->buffer, input_size); 1649 start_code, s->buffer, input_size);
1645 if (ret == 1) { 1650 if (ret == 1) {
1646 /* got a picture: exit */ 1651 /* got a picture: exit */
1647 /* first check if we must repeat the frame */ 1652 /* first check if we must repeat the frame */
1653 avctx->repeat_pict = 0;
1654 #if 0
1648 if (s2->progressive_frame && s2->repeat_first_field) { 1655 if (s2->progressive_frame && s2->repeat_first_field) {
1649 //fprintf(stderr,"\nRepeat this frame: %d! pict: %d",avctx->frame_number,s2->picture_number); 1656 //fprintf(stderr,"\nRepeat this frame: %d! pict: %d",avctx->frame_number,s2->picture_number);
1650 s2->repeat_first_field = 0; 1657 //s2->repeat_first_field = 0;
1651 s2->progressive_frame = 0; 1658 //s2->progressive_frame = 0;
1652 if (++s->repeat_field > 2) 1659 if (++s->repeat_field > 2)
1653 s->repeat_field = 0; 1660 s->repeat_field = 0;
1661 avctx->repeat_pict = 1;
1654 } 1662 }
1663 #endif
1664 if (s2->repeat_first_field) {
1665 if (s2->progressive_sequence) {
1666 if (s2->top_field_first)
1667 avctx->repeat_pict = 4;
1668 else
1669 avctx->repeat_pict = 2;
1670 } else if (s2->progressive_frame) {
1671 avctx->repeat_pict = 1;
1672 }
1673 }
1655 *data_size = sizeof(AVPicture); 1674 *data_size = sizeof(AVPicture);
1656 goto the_end; 1675 goto the_end;
1657 } 1676 }
1658 } 1677 }
1659 break; 1678 break;