comparison asfdec.c @ 6481:123ebc5da327 libavformat

Fix aspect ratio for files that have it stored in ff_asf_extended_content_header. Patch by Richard Buteau, rbuteau rgbnetworks com
author cehoyos
date Thu, 23 Sep 2010 03:40:06 +0000
parents 3800dce5a40a
children c59fad269e39
comparison
equal deleted inserted replaced
6480:d55dd9679e52 6481:123ebc5da327
465 get_str16_nolen(pb, name_len, name, sizeof(name)); 465 get_str16_nolen(pb, name_len, name, sizeof(name));
466 value_type = get_le16(pb); 466 value_type = get_le16(pb);
467 value_len = get_le16(pb); 467 value_len = get_le16(pb);
468 if (!value_type && value_len%2) 468 if (!value_type && value_len%2)
469 value_len += 1; 469 value_len += 1;
470 get_tag(s, name, value_type, value_len); 470 /**
471 * My sample has that stream set to 0 maybe that mean the container.
472 * Asf stream count start at 1. I am using 0 to the container value since it's unused
473 */
474 if (!strcmp(name, "AspectRatioX")){
475 dar[0].num= get_value(s->pb, value_type);
476 } else if(!strcmp(name, "AspectRatioY")){
477 dar[0].den= get_value(s->pb, value_type);
478 } else get_tag(s, name, value_type, value_len);
471 } 479 }
472 } else if (!guidcmp(&g, &ff_asf_metadata_header)) { 480 } else if (!guidcmp(&g, &ff_asf_metadata_header)) {
473 int n, stream_num, name_len, value_len, value_type, value_num; 481 int n, stream_num, name_len, value_len, value_type, value_num;
474 n = get_le16(pb); 482 n = get_le16(pb);
475 483
624 int stream_num= asf->asfid2avid[i]; 632 int stream_num= asf->asfid2avid[i];
625 if(stream_num>=0){ 633 if(stream_num>=0){
626 AVStream *st = s->streams[stream_num]; 634 AVStream *st = s->streams[stream_num];
627 if (!st->codec->bit_rate) 635 if (!st->codec->bit_rate)
628 st->codec->bit_rate = bitrate[i]; 636 st->codec->bit_rate = bitrate[i];
629 if (dar[i].num > 0 && dar[i].den > 0) 637 if (dar[i].num > 0 && dar[i].den > 0){
630 av_reduce(&st->sample_aspect_ratio.num, 638 av_reduce(&st->sample_aspect_ratio.num,
631 &st->sample_aspect_ratio.den, 639 &st->sample_aspect_ratio.den,
632 dar[i].num, dar[i].den, INT_MAX); 640 dar[i].num, dar[i].den, INT_MAX);
633 //av_log(s, AV_LOG_ERROR, "dar %d:%d sar=%d:%d\n", dar[i].num, dar[i].den, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); 641 } else if ((dar[0].num > 0) && (dar[0].den > 0) && (st->codec->codec_type==CODEC_TYPE_VIDEO)) // Use ASF container value if the stream doesn't AR set.
642 av_reduce(&st->sample_aspect_ratio.num,
643 &st->sample_aspect_ratio.den,
644 dar[0].num, dar[0].den, INT_MAX);
645
646 //av_log(s, AV_LOG_INFO, "i=%d, st->codec->codec_type:%d, dar %d:%d sar=%d:%d\n", i, st->codec->codec_type, dar[i].num, dar[i].den, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den);
634 647
635 // copy and convert language codes to the frontend 648 // copy and convert language codes to the frontend
636 if (asf->streams[i].stream_language_index < 128) { 649 if (asf->streams[i].stream_language_index < 128) {
637 const char *rfc1766 = asf->stream_languages[asf->streams[i].stream_language_index]; 650 const char *rfc1766 = asf->stream_languages[asf->streams[i].stream_language_index];
638 if (rfc1766 && strlen(rfc1766) > 1) { 651 if (rfc1766 && strlen(rfc1766) > 1) {