Index: libmpdemux/asf.h =================================================================== --- libmpdemux/asf.h (revisione 29084) +++ libmpdemux/asf.h (copia locale) @@ -50,7 +50,7 @@ uint64_t unk1; // Unknown, maybe reserved ( usually contains 0 ) UINT64 8 uint32_t type_size; //Total size of type-specific data UINT32 4 uint32_t stream_size; //Size of stream-specific data UINT32 4 - uint16_t stream_no; //Stream number UINT16 2 + uint16_t flags; // Stream number (7 bits), reserved (8 bits), encrypted flag (1 bit) UINT16 2 uint32_t unk2; //Unknown UINT32 4 } ASF_stream_header_t; @@ -134,7 +134,7 @@ (h)->unk1 = le2me_64((h)->unk1); \ (h)->type_size = le2me_32((h)->type_size); \ (h)->stream_size = le2me_32((h)->stream_size); \ - (h)->stream_no = le2me_16((h)->stream_no); \ + (h)->flags = le2me_16((h)->stream_no); \ (h)->unk2 = le2me_32((h)->unk2); \ } #define le2me_ASF_file_header_t(h) { \ Index: stream/asf_streaming.c =================================================================== --- stream/asf_streaming.c (revisione 29084) +++ stream/asf_streaming.c (copia locale) @@ -263,7 +263,7 @@ asf_ctrl->audio_streams = realloc(asf_ctrl->audio_streams, asf_ctrl->n_audio*sizeof(int)); } - asf_ctrl->audio_streams[asf_ctrl->n_audio-1] = AV_RL16(&streamh->stream_no); + asf_ctrl->audio_streams[asf_ctrl->n_audio-1] = AV_RL16(&streamh->flags) & 0x7F; break; case 0xBC19EFC0 : // video stream if(asf_ctrl->video_streams == NULL){ @@ -274,7 +274,7 @@ asf_ctrl->video_streams = realloc(asf_ctrl->video_streams, asf_ctrl->n_video*sizeof(int)); } - asf_ctrl->video_streams[asf_ctrl->n_video-1] = AV_RL16(&streamh->stream_no); + asf_ctrl->video_streams[asf_ctrl->n_video-1] = AV_RL16(&streamh->flags) & 0x7F; break; } } Index: libmpdemux/asfheader.c =================================================================== --- libmpdemux/asfheader.c (revisione 29084) +++ libmpdemux/asfheader.c (copia locale) @@ -426,12 +426,12 @@ le2me_ASF_stream_header_t(streamh); audio_pos += 64; //16+16+4+4+4+16+4; buffer = &hdr[audio_pos]; - sh_audio=new_sh_audio(demuxer,streamh->stream_no & 0x7F); - mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_AudioID, "asfheader", streamh->stream_no & 0x7F); + sh_audio=new_sh_audio(demuxer,streamh->flags & 0x7F); + mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_AudioID, "asfheader", streamh->flags & 0x7F); ++audio_streams; if (!asf_init_audio_stream(demuxer, asf, sh_audio, streamh, &audio_pos, &buffer, hdr, hdr_len)) goto len_err_out; - if (!get_ext_stream_properties(hdr, hdr_len, streamh->stream_no, asf, 0)) + if (!get_ext_stream_properties(hdr, hdr_len, streamh->flags & 0x7F, asf, 0)) goto len_err_out; } } @@ -453,7 +453,7 @@ asf_chunk_type(streamh->concealment)); mp_msg(MSGT_HEADER, MSGL_V, "type: %d bytes, stream: %d bytes ID: %d\n", (int)streamh->type_size, (int)streamh->stream_size, - (int)streamh->stream_no); + (int)streamh->flags & 0x7F); mp_msg(MSGT_HEADER, MSGL_V, "unk1: %lX unk2: %X\n", (unsigned long)streamh->unk1, (unsigned int)streamh->unk2); mp_msg(MSGT_HEADER, MSGL_V, "FILEPOS=0x%X\n", pos + start); @@ -463,19 +463,19 @@ if (pos > hdr_len) goto len_err_out; switch(ASF_LOAD_GUID_PREFIX(streamh->type)){ case ASF_GUID_PREFIX_audio_stream: { - sh_audio_t* sh_audio=new_sh_audio(demuxer,streamh->stream_no & 0x7F); - mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_AudioID, "asfheader", streamh->stream_no & 0x7F); + sh_audio_t* sh_audio=new_sh_audio(demuxer,streamh->flags & 0x7F); + mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_AudioID, "asfheader", streamh->flags & 0x7F); ++audio_streams; if (!asf_init_audio_stream(demuxer, asf, sh_audio, streamh, &pos, &buffer, hdr, hdr_len)) goto len_err_out; - //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.stream_no & 0x7F; + //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.flags & 0x7F; break; } case ASF_GUID_PREFIX_video_stream: { unsigned int len; float asp_ratio; - sh_video_t* sh_video=new_sh_video(demuxer,streamh->stream_no & 0x7F); - mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_VideoID, "asfheader", streamh->stream_no & 0x7F); + sh_video_t* sh_video=new_sh_video(demuxer,streamh->flags & 0x7F); + mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_VideoID, "asfheader", streamh->flags & 0x7F); len=streamh->type_size-(4+4+1+2); ++video_streams; // sh_video->bih=malloc(chunksize); memset(sh_video->bih,0,chunksize); @@ -493,17 +493,17 @@ asf->asf_is_dvr_ms=1; asf->dvr_last_vid_pts=0.0; } else asf->asf_is_dvr_ms=0; - if (!get_ext_stream_properties(hdr, hdr_len, streamh->stream_no, asf, 1)) + if (!get_ext_stream_properties(hdr, hdr_len, streamh->flags & 0x7F, asf, 1)) goto len_err_out; - if (get_meta(hdr, hdr_len, streamh->stream_no, &asp_ratio)) { + if (get_meta(hdr, hdr_len, streamh->flags & 0x7F, &asp_ratio)) { sh_video->aspect = asp_ratio * sh_video->bih->biWidth / sh_video->bih->biHeight; } sh_video->i_bps = asf->bps; 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; + //asf_video_id=streamh.flags & 0x7F; + //if(demuxer->video->id==-1) demuxer->video->id=streamh.flags & 0x7F; break; } }