mirror of https://github.com/mpv-player/mpv
made vorbis_info a member of ogg_stream rather than ogg_demuxer;
this change paves the way for multi audio track support git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21535 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c33458b7e4
commit
4a5164d995
|
@ -109,6 +109,9 @@ typedef struct ogg_stream {
|
|||
int text;
|
||||
int id;
|
||||
|
||||
vorbis_info vi;
|
||||
int vi_inited;
|
||||
|
||||
void *ogg_d;
|
||||
} ogg_stream_t;
|
||||
|
||||
|
@ -129,9 +132,6 @@ typedef struct ogg_demuxer {
|
|||
int n_text;
|
||||
int *text_ids;
|
||||
char **text_langs;
|
||||
|
||||
vorbis_info vi;
|
||||
int vi_inited;
|
||||
} ogg_demuxer_t;
|
||||
|
||||
#define NUM_VORBIS_HDR_PACKETS 3
|
||||
|
@ -328,13 +328,13 @@ static unsigned char* demux_ogg_read_packet(ogg_stream_t* os,ogg_packet* pack,vo
|
|||
if(os->vorbis) {
|
||||
if(*pack->packet & PACKET_TYPE_HEADER)
|
||||
os->hdr_packets++;
|
||||
else if (ogg_d->vi_inited)
|
||||
else if (os->vi_inited)
|
||||
{
|
||||
vorbis_info *vi;
|
||||
int32_t blocksize;
|
||||
|
||||
// When we dump the audio, there is no vi, but we don't care of timestamp in this case
|
||||
vi = &(ogg_d->vi);
|
||||
vi = &(os->vi);
|
||||
blocksize = vorbis_packet_blocksize(vi,pack) / samplesize;
|
||||
// Calculate the timestamp if the packet don't have any
|
||||
if(pack->granulepos == -1) {
|
||||
|
@ -748,9 +748,10 @@ static void fixup_vorbis_wf(sh_audio_t *sh, ogg_demuxer_t *od)
|
|||
unsigned char *buf[3];
|
||||
unsigned char *ptr;
|
||||
unsigned int len;
|
||||
ogg_stream_t *os = &od->subs[sh->ds->id];
|
||||
vorbis_comment vc;
|
||||
|
||||
vorbis_info_init(&od->vi);
|
||||
vorbis_info_init(&os->vi);
|
||||
vorbis_comment_init(&vc);
|
||||
for(i = 0; i < 3; i++) {
|
||||
op[i].bytes = ds_get_packet(sh->ds, &(op[i].packet));
|
||||
|
@ -765,7 +766,7 @@ static void fixup_vorbis_wf(sh_audio_t *sh, ogg_demuxer_t *od)
|
|||
memcpy(buf[i], op[i].packet, op[i].bytes);
|
||||
|
||||
op[i].b_o_s = (i==0);
|
||||
ris = vorbis_synthesis_headerin(&(od->vi),&vc,&(op[i]));
|
||||
ris = vorbis_synthesis_headerin(&(os->vi),&vc,&(op[i]));
|
||||
if(ris < 0) {
|
||||
init_error = 1;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_ERR,"DEMUX_OGG: header n. %d broken! len=%ld, code: %d\n", i, op[i].bytes, ris);
|
||||
|
@ -773,7 +774,7 @@ static void fixup_vorbis_wf(sh_audio_t *sh, ogg_demuxer_t *od)
|
|||
}
|
||||
vorbis_comment_clear(&vc);
|
||||
if(!init_error)
|
||||
od->vi_inited = 1;
|
||||
os->vi_inited = 1;
|
||||
|
||||
len = op[0].bytes + op[1].bytes + op[2].bytes;
|
||||
sh->wf = calloc(1, sizeof(WAVEFORMATEX) + len + len/255 + 64);
|
||||
|
@ -1437,7 +1438,7 @@ static void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_de
|
|||
/* demux_ogg_read_packet needs decoder context for Vorbis streams */
|
||||
if(((sh_audio_t*)demuxer->audio->sh)->format == FOURCC_VORBIS)
|
||||
context = ((sh_audio_t*)demuxer->audio->sh)->context;
|
||||
vi = &(ogg_d->vi);
|
||||
vi = &(os->vi);
|
||||
rate = (float)vi->rate;
|
||||
samplesize = ((sh_audio_t*)ds->sh)->samplesize;
|
||||
}
|
||||
|
@ -1585,6 +1586,7 @@ static void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_de
|
|||
|
||||
static void demux_close_ogg(demuxer_t* demuxer) {
|
||||
ogg_demuxer_t* ogg_d = demuxer->priv;
|
||||
ogg_stream_t* os = NULL;
|
||||
int i;
|
||||
|
||||
if(!ogg_d)
|
||||
|
@ -1610,7 +1612,11 @@ static void demux_close_ogg(demuxer_t* demuxer) {
|
|||
if (ogg_d->text_langs[i]) free(ogg_d->text_langs[i]);
|
||||
free(ogg_d->text_langs);
|
||||
}
|
||||
vorbis_info_clear(&ogg_d->vi);
|
||||
if(demuxer->audio->id > -1) {
|
||||
os = &ogg_d->subs[demuxer->audio->id];
|
||||
if(os && os->vi_inited)
|
||||
vorbis_info_clear(&os->vi);
|
||||
}
|
||||
free(ogg_d);
|
||||
}
|
||||
|
||||
|
@ -1624,7 +1630,7 @@ static int demux_ogg_control(demuxer_t *demuxer,int cmd, void *arg){
|
|||
rate = os->samplerate;
|
||||
} else {
|
||||
os = &ogg_d->subs[demuxer->audio->id];
|
||||
rate = ogg_d->vi.rate;
|
||||
rate = os->vi.rate;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue