comparison asf-enc.c @ 1775:3562fd629c37 libavformat

fix broken memset(padding, 0) code add a few asserts
author michael
date Fri, 09 Feb 2007 20:49:12 +0000
parents 49b67c70e9c9
children 4f4edbced58a
comparison
equal deleted inserted replaced
1774:814fbf5732eb 1775:3562fd629c37
535 int ppi_size, i; 535 int ppi_size, i;
536 int64_t start= url_ftell(pb); 536 int64_t start= url_ftell(pb);
537 537
538 int iLengthTypeFlags = ASF_PPI_LENGTH_TYPE_FLAGS; 538 int iLengthTypeFlags = ASF_PPI_LENGTH_TYPE_FLAGS;
539 539
540 padsize -= PACKET_HEADER_MIN_SIZE;
541 if(asf->multi_payloads_present)
542 padsize--;
543 assert(padsize>=0);
544
540 put_byte(pb, ASF_PACKET_ERROR_CORRECTION_FLAGS); 545 put_byte(pb, ASF_PACKET_ERROR_CORRECTION_FLAGS);
541 for (i = 0; i < ASF_PACKET_ERROR_CORRECTION_DATA_SIZE; i++){ 546 for (i = 0; i < ASF_PACKET_ERROR_CORRECTION_DATA_SIZE; i++){
542 put_byte(pb, 0x0); 547 put_byte(pb, 0x0);
543 } 548 }
544 549
585 asf->packet_timestamp_end - asf->packet_timestamp_start, 590 asf->packet_timestamp_end - asf->packet_timestamp_start,
586 asf->packet_nb_payloads, 591 asf->packet_nb_payloads,
587 asf->packet_size_left 592 asf->packet_size_left
588 ); 593 );
589 594
590 packet_filled_size = PACKET_SIZE - packet_hdr_size - asf->packet_size_left; 595 packet_filled_size = PACKET_SIZE - asf->packet_size_left;
596 assert(packet_hdr_size <= asf->packet_size_left);
591 memset(asf->packet_buf + packet_filled_size, 0, asf->packet_size_left); 597 memset(asf->packet_buf + packet_filled_size, 0, asf->packet_size_left);
592 598
593 put_buffer(&s->pb, asf->packet_buf, asf->packet_size - packet_hdr_size); 599 put_buffer(&s->pb, asf->packet_buf, asf->packet_size - packet_hdr_size);
594 600
595 put_flush_packet(&s->pb); 601 put_flush_packet(&s->pb);
654 while (m_obj_offset < m_obj_size) { 660 while (m_obj_offset < m_obj_size) {
655 payload_len = m_obj_size - m_obj_offset; 661 payload_len = m_obj_size - m_obj_offset;
656 if (asf->packet_timestamp_start == -1) { 662 if (asf->packet_timestamp_start == -1) {
657 asf->multi_payloads_present = (payload_len < MULTI_PAYLOAD_CONSTANT); 663 asf->multi_payloads_present = (payload_len < MULTI_PAYLOAD_CONSTANT);
658 664
665 asf->packet_size_left = PACKET_SIZE;
659 if (asf->multi_payloads_present){ 666 if (asf->multi_payloads_present){
660 asf->packet_size_left = PACKET_SIZE; //For debug
661 asf->packet_size_left = PACKET_SIZE - PACKET_HEADER_MIN_SIZE - 1;
662 frag_len1 = MULTI_PAYLOAD_CONSTANT - 1; 667 frag_len1 = MULTI_PAYLOAD_CONSTANT - 1;
663 } 668 }
664 else { 669 else {
665 asf->packet_size_left = PACKET_SIZE - PACKET_HEADER_MIN_SIZE;
666 frag_len1 = SINGLE_PAYLOAD_DATA_LENGTH; 670 frag_len1 = SINGLE_PAYLOAD_DATA_LENGTH;
667 } 671 }
668 asf->packet_timestamp_start = timestamp; 672 asf->packet_timestamp_start = timestamp;
669 } 673 }
670 else { 674 else {
671 // multi payloads 675 // multi payloads
672 frag_len1 = asf->packet_size_left - PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS; 676 frag_len1 = asf->packet_size_left - PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS - PACKET_HEADER_MIN_SIZE - 1;
673 677
674 asf->packet_timestamp_start = timestamp; 678 asf->packet_timestamp_start = timestamp;
675 } 679 }
676 if (frag_len1 > 0) { 680 if (frag_len1 > 0) {
677 if (payload_len > frag_len1) 681 if (payload_len > frag_len1)
695 m_obj_offset += payload_len; 699 m_obj_offset += payload_len;
696 buf += payload_len; 700 buf += payload_len;
697 701
698 if (!asf->multi_payloads_present) 702 if (!asf->multi_payloads_present)
699 flush_packet(s); 703 flush_packet(s);
700 else if (asf->packet_size_left <= (PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS + 1)) 704 else if (asf->packet_size_left <= (PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS + PACKET_HEADER_MIN_SIZE + 1))
701 flush_packet(s); 705 flush_packet(s);
702 } 706 }
703 stream->seq++; 707 stream->seq++;
704 } 708 }
705 709