[MPlayer-users] some question about libmpdemux
Zongyao QU
zongyao.qu at gmail.com
Fri Mar 26 05:38:44 CET 2010
This is not a bug report,
but some barrier I met when I want to do some hack to mplayer.
My goal is to get the info of all the a/v streams,
such as how many audio/video streams in the file,
and fps, sample rate, codec... of each stream.
I found the demuxer may be the right place start to understand the overall.
in the definition of demuxer_t(which is in demuxer.h)
there are members of
void* a_streams[MAX_A_STREAMS]; // audio streams (sh_audio_t)
void* v_streams[MAX_V_STREAMS]; // video sterams (sh_video_t)
each of them is an array of the sh_audio_t/sh_video_t pointers.
so just before the playback, I added my code,
which are for-loops to look into these arrays.
sh_audio_t *a;
int num =0;
for (int i=0;i < MAX_A_STREAMS; i++) {
if (a = demuxer[i]) {
num++;
printf("%d, aid:%d",i,a->aid);
}
}
My questions are:
1. is there any way more direct to get the number of a/v streams
and their infos, rather than a for loop?
2. if there is none...
In the for-loop above, the loop will always run MAX_A_STREAMS times,
is there any condition to judge so that I could exit the loop earlier?
which means how I could make sure there is no sh_audio_t* anymore
in the array.
3. I have tested my code at some level,
I found that in the array,
the valid sh_audio_t* does not always start at index 0 in the array.
and the aid is also not always start from 0. for example:
------------------------
a mp4 file, which has only one audio stream:
1, aid:1
------------------------
------------------------
a mkv file, which has two audio streams:
2, aid:0
3, aid:1
------------------------
so how really does the demuxer work with these ids?
More information about the MPlayer-users
mailing list