--- libmpdemux/asfheader.c 2008-01-17 16:45:12.000000000 -0500 +++ libmpdemux/asfheader.c 2008-01-17 16:43:29.000000000 -0500 @@ -436,11 +436,17 @@ uint16_t stream_count=0; int best_video = -1; int best_audio = -1; + unsigned int best_abps = 0; + int asf_scrambling_h, asf_scrambling_w, asf_scrambling_b; + struct asf_priv *best_asf = NULL; uint64_t data_len; ASF_stream_header_t *streamh; uint8_t *buffer; int audio_pos=0; + best_asf = calloc(1, sizeof(struct asf_priv)); + best_asf->bps = 0; + if(hdr_len < 0) { mp_msg(MSGT_HEADER, MSGL_FATAL, "Header size is too small.\n"); return 0; @@ -530,6 +536,15 @@ ++audio_streams; if (!asf_init_audio_stream(demuxer, asf, sh_audio, streamh, &pos, &buffer, hdr, hdr_len)) goto len_err_out; + //if the bytes/sec is the largest so far, + if (sh_audio->wf->nAvgBytesPerSec > best_abps) { + //save off the new audio values + best_audio = streamh->stream_no; + best_abps = sh_audio->wf->nAvgBytesPerSec; + asf_scrambling_h = asf->scrambling_h; + asf_scrambling_w = asf->scrambling_w; + asf_scrambling_b = asf->scrambling_b; + } //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.stream_no & 0x7F; break; } @@ -566,12 +581,25 @@ if( mp_msg_test(MSGT_DEMUX,MSGL_V) ) print_video_header(sh_video->bih, MSGL_V); //asf_video_id=streamh.stream_no & 0x7F; //if(demuxer->video->id==-1) demuxer->video->id=streamh.stream_no & 0x7F; + + //if the bps is the largest so far, + if (asf->bps >= best_asf->bps) { + //save off the new video values + memcpy(best_asf, asf, sizeof(struct asf_priv)); + best_video = streamh->stream_no; + } break; } } // stream-specific data: // stream_read(demuxer->stream,(char*) buffer,streamh.stream_size); } + //overwrite asf with the best video and audio stream values + memcpy(asf, best_asf, sizeof(struct asf_priv)); + asf->scrambling_h = asf_scrambling_h; + asf->scrambling_w = asf_scrambling_w; + asf->scrambling_b = asf_scrambling_b; + if(best_asf) free(best_asf); // find file header pos = find_asf_guid(hdr, asf_file_header_guid, 0, hdr_len);