mirror of https://github.com/mpv-player/mpv
some code clanup (first step to libdemuxer)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1290 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
1d2298b284
commit
3cd2f6eb27
|
@ -165,7 +165,7 @@ if(verbose){
|
||||||
stream_read(demuxer->stream,(char*) buffer,streamh.type_size);
|
stream_read(demuxer->stream,(char*) buffer,streamh.type_size);
|
||||||
switch(*((unsigned int*)&streamh.type)){
|
switch(*((unsigned int*)&streamh.type)){
|
||||||
case 0xF8699E40: { // guid_audio_stream
|
case 0xF8699E40: { // guid_audio_stream
|
||||||
sh_audio_t* sh_audio=new_sh_audio(streamh.stream_no & 0x7F);
|
sh_audio_t* sh_audio=new_sh_audio(demuxer,streamh.stream_no & 0x7F);
|
||||||
sh_audio->wf=calloc((streamh.type_size<sizeof(WAVEFORMATEX))?sizeof(WAVEFORMATEX):streamh.type_size,1);
|
sh_audio->wf=calloc((streamh.type_size<sizeof(WAVEFORMATEX))?sizeof(WAVEFORMATEX):streamh.type_size,1);
|
||||||
memcpy(sh_audio->wf,buffer,streamh.type_size);
|
memcpy(sh_audio->wf,buffer,streamh.type_size);
|
||||||
if(verbose>=1) print_wave_header(sh_audio->wf);
|
if(verbose>=1) print_wave_header(sh_audio->wf);
|
||||||
|
@ -183,7 +183,7 @@ if(verbose){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0xBC19EFC0: { // guid_video_stream
|
case 0xBC19EFC0: { // guid_video_stream
|
||||||
sh_video_t* sh_video=new_sh_video(streamh.stream_no & 0x7F);
|
sh_video_t* sh_video=new_sh_video(demuxer,streamh.stream_no & 0x7F);
|
||||||
int len=streamh.type_size-(4+4+1+2);
|
int len=streamh.type_size-(4+4+1+2);
|
||||||
// sh_video->bih=malloc(chunksize); memset(sh_video->bih,0,chunksize);
|
// sh_video->bih=malloc(chunksize); memset(sh_video->bih,0,chunksize);
|
||||||
sh_video->bih=calloc((len<sizeof(BITMAPINFOHEADER))?sizeof(BITMAPINFOHEADER):len,1);
|
sh_video->bih=calloc((len<sizeof(BITMAPINFOHEADER))?sizeof(BITMAPINFOHEADER):len,1);
|
||||||
|
|
|
@ -70,11 +70,11 @@ while(1){
|
||||||
chunksize-=MIN(size2,sizeof(h));
|
chunksize-=MIN(size2,sizeof(h));
|
||||||
++stream_id;
|
++stream_id;
|
||||||
if(h.fccType==streamtypeVIDEO){
|
if(h.fccType==streamtypeVIDEO){
|
||||||
sh_video=new_sh_video(stream_id);
|
sh_video=new_sh_video(demuxer,stream_id);
|
||||||
memcpy(&sh_video->video,&h,sizeof(h));
|
memcpy(&sh_video->video,&h,sizeof(h));
|
||||||
} else
|
} else
|
||||||
if(h.fccType==streamtypeAUDIO){
|
if(h.fccType==streamtypeAUDIO){
|
||||||
sh_audio=new_sh_audio(stream_id);
|
sh_audio=new_sh_audio(demuxer,stream_id);
|
||||||
memcpy(&sh_audio->audio,&h,sizeof(h));
|
memcpy(&sh_audio->audio,&h,sizeof(h));
|
||||||
}
|
}
|
||||||
last_fccType=h.fccType;
|
last_fccType=h.fccType;
|
||||||
|
|
14
dec_audio.c
14
dec_audio.c
|
@ -31,11 +31,11 @@ int fakemono=0;
|
||||||
#include "loader/DirectShow/DS_AudioDec.h"
|
#include "loader/DirectShow/DS_AudioDec.h"
|
||||||
|
|
||||||
|
|
||||||
static sh_audio_t* ac3_audio_sh=NULL;
|
static sh_audio_t* dec_audio_sh=NULL;
|
||||||
|
|
||||||
// AC3 decoder buffer callback:
|
// AC3 decoder buffer callback:
|
||||||
static void ac3_fill_buffer(uint8_t **start,uint8_t **end){
|
static void ac3_fill_buffer(uint8_t **start,uint8_t **end){
|
||||||
int len=ds_get_packet(ac3_audio_sh->ds,start);
|
int len=ds_get_packet(dec_audio_sh->ds,start);
|
||||||
//printf("<ac3:%d>\n",len);
|
//printf("<ac3:%d>\n",len);
|
||||||
if(len<0)
|
if(len<0)
|
||||||
*start = *end = NULL;
|
*start = *end = NULL;
|
||||||
|
@ -43,6 +43,13 @@ static void ac3_fill_buffer(uint8_t **start,uint8_t **end){
|
||||||
*end = *start + len;
|
*end = *start + len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MP3 decoder buffer callback:
|
||||||
|
int mplayer_audio_read(char *buf,int size){
|
||||||
|
int len;
|
||||||
|
len=demux_read_data(dec_audio_sh->ds,buf,size);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int init_audio(sh_audio_t *sh_audio){
|
int init_audio(sh_audio_t *sh_audio){
|
||||||
|
|
||||||
|
@ -177,7 +184,7 @@ case 8: {
|
||||||
}
|
}
|
||||||
case 3: {
|
case 3: {
|
||||||
// Dolby AC3 audio:
|
// Dolby AC3 audio:
|
||||||
ac3_audio_sh=sh_audio; // save sh_audio for the callback:
|
dec_audio_sh=sh_audio; // save sh_audio for the callback:
|
||||||
ac3_config.fill_buffer_callback = ac3_fill_buffer;
|
ac3_config.fill_buffer_callback = ac3_fill_buffer;
|
||||||
ac3_config.num_output_ch = 2;
|
ac3_config.num_output_ch = 2;
|
||||||
ac3_config.flags = 0;
|
ac3_config.flags = 0;
|
||||||
|
@ -221,6 +228,7 @@ case 6: {
|
||||||
}
|
}
|
||||||
case 1: {
|
case 1: {
|
||||||
// MPEG Audio:
|
// MPEG Audio:
|
||||||
|
dec_audio_sh=sh_audio; // save sh_audio for the callback:
|
||||||
#ifdef USE_FAKE_MONO
|
#ifdef USE_FAKE_MONO
|
||||||
MP3_Init(fakemono);
|
MP3_Init(fakemono);
|
||||||
#else
|
#else
|
||||||
|
|
10
demux_mpg.c
10
demux_mpg.c
|
@ -36,8 +36,8 @@ static unsigned int read_mpeg_timestamp(stream_t *s,int c){
|
||||||
//static char dvdaudio_table[256];
|
//static char dvdaudio_table[256];
|
||||||
//static unsigned int packet_start_pos=0;
|
//static unsigned int packet_start_pos=0;
|
||||||
|
|
||||||
extern void *new_sh_audio(int id);
|
extern void *new_sh_audio(demuxer_t *demux,int id);
|
||||||
extern void *new_sh_video(int id);
|
extern void *new_sh_video(demuxer_t *demux,int id);
|
||||||
|
|
||||||
static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
||||||
int d;
|
int d;
|
||||||
|
@ -157,7 +157,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
||||||
// aid=128+(aid&0x7F);
|
// aid=128+(aid&0x7F);
|
||||||
// aid=0x80..0xBF
|
// aid=0x80..0xBF
|
||||||
|
|
||||||
if(!demux->a_streams[aid]) new_sh_audio(aid);
|
if(!demux->a_streams[aid]) new_sh_audio(demux,aid);
|
||||||
if(demux->audio->id==-1) demux->audio->id=aid;
|
if(demux->audio->id==-1) demux->audio->id=aid;
|
||||||
|
|
||||||
if(demux->audio->id==aid){
|
if(demux->audio->id==aid){
|
||||||
|
@ -210,7 +210,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
||||||
if(id>=0x1C0 && id<=0x1DF){
|
if(id>=0x1C0 && id<=0x1DF){
|
||||||
// mpeg audio
|
// mpeg audio
|
||||||
int aid=id-0x1C0;
|
int aid=id-0x1C0;
|
||||||
if(!demux->a_streams[aid]) new_sh_audio(aid);
|
if(!demux->a_streams[aid]) new_sh_audio(demux,aid);
|
||||||
if(demux->audio->id==-1) demux->audio->id=aid;
|
if(demux->audio->id==-1) demux->audio->id=aid;
|
||||||
if(demux->audio->id==aid){
|
if(demux->audio->id==aid){
|
||||||
ds=demux->audio;
|
ds=demux->audio;
|
||||||
|
@ -221,7 +221,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
|
||||||
if(id>=0x1E0 && id<=0x1EF){
|
if(id>=0x1E0 && id<=0x1EF){
|
||||||
// mpeg video
|
// mpeg video
|
||||||
int aid=id-0x1E0;
|
int aid=id-0x1E0;
|
||||||
if(!demux->v_streams[aid]) new_sh_video(aid);
|
if(!demux->v_streams[aid]) new_sh_video(demux,aid);
|
||||||
if(demux->video->id==-1) demux->video->id=aid;
|
if(demux->video->id==-1) demux->video->id=aid;
|
||||||
if(demux->video->id==aid){
|
if(demux->video->id==aid){
|
||||||
ds=demux->video;
|
ds=demux->video;
|
||||||
|
|
89
mplayer.c
89
mplayer.c
|
@ -20,15 +20,15 @@
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#if defined(sun)
|
#ifdef __FreeBSD__
|
||||||
#define DEFAULT_CDROM_DEVICE "/vol/dev/aliases/cdrom0"
|
|
||||||
#elif defined(__FreeBSD__)
|
|
||||||
#define DEFAULT_CDROM_DEVICE "/dev/cdrom"
|
|
||||||
#include <sys/cdrio.h>
|
#include <sys/cdrio.h>
|
||||||
#else
|
|
||||||
#define DEFAULT_CDROM_DEVICE "/dev/cdrom"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef sun
|
||||||
|
#define DEFAULT_CDROM_DEVICE "/vol/dev/aliases/cdrom0"
|
||||||
|
#else
|
||||||
|
#define DEFAULT_CDROM_DEVICE "/dev/cdrom"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef MAX_OUTBURST
|
#ifndef MAX_OUTBURST
|
||||||
#error "============================================="
|
#error "============================================="
|
||||||
|
@ -74,14 +74,9 @@
|
||||||
|
|
||||||
#include "opendivx/decore.h"
|
#include "opendivx/decore.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef X11_FULLSCREEN
|
|
||||||
extern int vo_screenwidth;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern char* win32_codec_name; // must be set before calling DrvOpen() !!!
|
extern char* win32_codec_name; // must be set before calling DrvOpen() !!!
|
||||||
|
|
||||||
extern int errno;
|
// extern int errno;
|
||||||
|
|
||||||
#include "linux/getch2.h"
|
#include "linux/getch2.h"
|
||||||
#include "linux/keycodes.h"
|
#include "linux/keycodes.h"
|
||||||
|
@ -109,7 +104,6 @@ int verbose=0;
|
||||||
|
|
||||||
#define ABS(x) (((x)>=0)?(x):(-(x)))
|
#define ABS(x) (((x)>=0)?(x):(-(x)))
|
||||||
|
|
||||||
static subtitle* subtitles=NULL;
|
|
||||||
void find_sub(subtitle* subtitles,int key);
|
void find_sub(subtitle* subtitles,int key);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -160,27 +154,24 @@ char *get_path(char *filename){
|
||||||
return buff;
|
return buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int max_framesize=0;
|
|
||||||
|
|
||||||
//static int show_packets=0;
|
|
||||||
|
|
||||||
//**************************************************************************//
|
//**************************************************************************//
|
||||||
//**************************************************************************//
|
//**************************************************************************//
|
||||||
// Input media streaming & demultiplexer:
|
// Input media streaming & demultiplexer:
|
||||||
//**************************************************************************//
|
//**************************************************************************//
|
||||||
|
|
||||||
|
static int max_framesize=0;
|
||||||
|
//static int show_packets=0;
|
||||||
|
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include "demuxer.h"
|
#include "demuxer.h"
|
||||||
|
|
||||||
#include "stheader.h"
|
#include "stheader.h"
|
||||||
|
|
||||||
int avi_bitrate=0;
|
static int avi_bitrate=0;
|
||||||
|
|
||||||
demuxer_t *demuxer=NULL;
|
|
||||||
|
|
||||||
//#include "aviprint.c"
|
//#include "aviprint.c"
|
||||||
|
|
||||||
sh_audio_t* new_sh_audio(int id){
|
sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id){
|
||||||
if(demuxer->a_streams[id]){
|
if(demuxer->a_streams[id]){
|
||||||
printf("Warning! Audio stream header %d redefined!\n",id);
|
printf("Warning! Audio stream header %d redefined!\n",id);
|
||||||
} else {
|
} else {
|
||||||
|
@ -191,7 +182,7 @@ sh_audio_t* new_sh_audio(int id){
|
||||||
return demuxer->a_streams[id];
|
return demuxer->a_streams[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
sh_video_t* new_sh_video(int id){
|
sh_video_t* new_sh_video(demuxer_t *demuxer,int id){
|
||||||
if(demuxer->v_streams[id]){
|
if(demuxer->v_streams[id]){
|
||||||
printf("Warning! video stream header %d redefined!\n",id);
|
printf("Warning! video stream header %d redefined!\n",id);
|
||||||
} else {
|
} else {
|
||||||
|
@ -202,13 +193,6 @@ sh_video_t* new_sh_video(int id){
|
||||||
return demuxer->v_streams[id];
|
return demuxer->v_streams[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
demux_stream_t *d_audio=NULL;
|
|
||||||
demux_stream_t *d_video=NULL;
|
|
||||||
demux_stream_t *d_dvdsub=NULL;
|
|
||||||
|
|
||||||
sh_audio_t *sh_audio=NULL;
|
|
||||||
sh_video_t *sh_video=NULL;
|
|
||||||
|
|
||||||
char* encode_name=NULL;
|
char* encode_name=NULL;
|
||||||
char* encode_index_name=NULL;
|
char* encode_index_name=NULL;
|
||||||
int encode_bitrate=0;
|
int encode_bitrate=0;
|
||||||
|
@ -242,24 +226,12 @@ static const int frameratecode2framerate[16] = {
|
||||||
1*10000,5*10000,10*10000,12*10000,15*10000,0,0
|
1*10000,5*10000,10*10000,12*10000,15*10000,0,0
|
||||||
};
|
};
|
||||||
|
|
||||||
//**************************************************************************//
|
|
||||||
// Audio codecs:
|
|
||||||
//**************************************************************************//
|
|
||||||
|
|
||||||
// MP3 decoder buffer callback:
|
|
||||||
int mplayer_audio_read(char *buf,int size){
|
|
||||||
int len;
|
|
||||||
len=demux_read_data(sh_audio->ds,buf,size);
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
//#include "dec_audio.c"
|
|
||||||
|
|
||||||
#ifndef NEW_DECORE
|
|
||||||
//**************************************************************************//
|
//**************************************************************************//
|
||||||
// The OpenDivX stuff:
|
// The OpenDivX stuff:
|
||||||
//**************************************************************************//
|
//**************************************************************************//
|
||||||
|
|
||||||
|
#ifndef NEW_DECORE
|
||||||
|
|
||||||
unsigned char *opendivx_src[3];
|
unsigned char *opendivx_src[3];
|
||||||
int opendivx_stride[3];
|
int opendivx_stride[3];
|
||||||
|
|
||||||
|
@ -289,13 +261,13 @@ void convert_linux(unsigned char *puc_y, int stride_y,
|
||||||
//**************************************************************************//
|
//**************************************************************************//
|
||||||
|
|
||||||
static vo_functions_t *video_out=NULL;
|
static vo_functions_t *video_out=NULL;
|
||||||
ao_functions_t *audio_out=NULL;
|
static ao_functions_t *audio_out=NULL;
|
||||||
|
|
||||||
double video_time_usage=0;
|
static double video_time_usage=0;
|
||||||
double vout_time_usage=0;
|
static double vout_time_usage=0;
|
||||||
double audio_time_usage=0;
|
static double audio_time_usage=0;
|
||||||
int total_time_usage_start=0;
|
static int total_time_usage_start=0;
|
||||||
int benchmark=0;
|
static int benchmark=0;
|
||||||
|
|
||||||
static int play_in_bg=0;
|
static int play_in_bg=0;
|
||||||
|
|
||||||
|
@ -496,6 +468,17 @@ if ((conffile = get_path("")) == NULL) {
|
||||||
int mplayer(int argc,char* argv[], char *envp[]){
|
int mplayer(int argc,char* argv[], char *envp[]){
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static subtitle* subtitles=NULL;
|
||||||
|
|
||||||
|
static demuxer_t *demuxer=NULL;
|
||||||
|
|
||||||
|
static demux_stream_t *d_audio=NULL;
|
||||||
|
static demux_stream_t *d_video=NULL;
|
||||||
|
static demux_stream_t *d_dvdsub=NULL;
|
||||||
|
|
||||||
|
static sh_audio_t *sh_audio=NULL;
|
||||||
|
static sh_video_t *sh_video=NULL;
|
||||||
|
|
||||||
char* filename=NULL; //"MI2-Trailer.avi";
|
char* filename=NULL; //"MI2-Trailer.avi";
|
||||||
stream_t* stream=NULL;
|
stream_t* stream=NULL;
|
||||||
int file_format=DEMUXER_TYPE_UNKNOWN;
|
int file_format=DEMUXER_TYPE_UNKNOWN;
|
||||||
|
@ -816,7 +799,7 @@ if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MOV){
|
||||||
demuxer=new_demuxer(stream,DEMUXER_TYPE_MOV,audio_id,video_id,dvdsub_id);
|
demuxer=new_demuxer(stream,DEMUXER_TYPE_MOV,audio_id,video_id,dvdsub_id);
|
||||||
// stream_seek(demuxer->stream,seek_to_byte);
|
// stream_seek(demuxer->stream,seek_to_byte);
|
||||||
if(mov_check_file(demuxer)){
|
if(mov_check_file(demuxer)){
|
||||||
printf("Detected MOV file format!\n");
|
printf("Detected QuickTime/MOV file format!\n");
|
||||||
file_format=DEMUXER_TYPE_MOV;
|
file_format=DEMUXER_TYPE_MOV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -832,10 +815,6 @@ if(file_format==DEMUXER_TYPE_UNKNOWN){
|
||||||
d_audio=demuxer->audio;
|
d_audio=demuxer->audio;
|
||||||
d_video=demuxer->video;
|
d_video=demuxer->video;
|
||||||
d_dvdsub=demuxer->sub;
|
d_dvdsub=demuxer->sub;
|
||||||
//d_audio->sh=sh_audio;
|
|
||||||
//d_video->sh=sh_video;
|
|
||||||
//sh_audio=d_audio->sh;sh_audio->ds=d_audio;
|
|
||||||
//sh_video=d_video->sh;sh_video->ds=d_video;
|
|
||||||
|
|
||||||
sh_audio=NULL;
|
sh_audio=NULL;
|
||||||
sh_video=NULL;
|
sh_video=NULL;
|
||||||
|
@ -973,7 +952,7 @@ switch(file_format){
|
||||||
case DEMUXER_TYPE_MPEG_ES: {
|
case DEMUXER_TYPE_MPEG_ES: {
|
||||||
d_audio->type=0;
|
d_audio->type=0;
|
||||||
has_audio=0;sh_audio=NULL; // ES streams has no audio channel
|
has_audio=0;sh_audio=NULL; // ES streams has no audio channel
|
||||||
d_video->sh=new_sh_video(0); // create dummy video stream header, id=0
|
d_video->sh=new_sh_video(demuxer,0); // create dummy video stream header, id=0
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DEMUXER_TYPE_MPEG_PS: {
|
case DEMUXER_TYPE_MPEG_PS: {
|
||||||
|
|
|
@ -60,6 +60,6 @@ typedef struct {
|
||||||
HIC hic; // handle
|
HIC hic; // handle
|
||||||
} sh_video_t;
|
} sh_video_t;
|
||||||
|
|
||||||
sh_audio_t* new_sh_audio(int id);
|
sh_audio_t* new_sh_audio(demuxer_t *demuxer,int id);
|
||||||
sh_video_t* new_sh_video(int id);
|
sh_video_t* new_sh_video(demuxer_t *demuxer,int id);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue