# HG changeset patch # User arpi_esp # Date 987042281 0 # Node ID 28cc43e013fda5f77f845a3ff0da067e2167ae37 # Parent cc3f84df9baf2f176e401b07bb65fecae9f65fa0 some cleanup of init_video diff -r cc3f84df9baf -r 28cc43e013fd mplayer.c --- a/mplayer.c Thu Apr 12 00:52:22 2001 +0000 +++ b/mplayer.c Thu Apr 12 02:24:41 2001 +0000 @@ -692,21 +692,31 @@ pts_from_bps=1; // force BPS sync! } } - if(!ds_fill_buffer(d_video)){ printf("AVI: missing video stream!? contact the author, it may be a bug :(\n"); exit(1); } - sh_video->format=sh_video->bih.biCompression; if(has_audio){ - if(verbose) printf("AVI: Searching for audio stream (id:%d)\n",d_audio->id); + if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id); if(!ds_fill_buffer(d_audio)){ - printf("AVI: No Audio stream found... ->nosound\n"); + printf("ASF: No Audio stream found... ->nosound\n"); has_audio=0; - } + } else sh_audio->format=sh_audio->wf.wFormatTag; } - if(has_audio) sh_audio->format=sh_audio->wf.wFormatTag; + // calculating video bitrate: default_fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; + avi_header.bitrate=avi_header.movi_end-avi_header.movi_start-avi_header.idx_size*8; + if(sh_audio) avi_header.bitrate-=sh_audio->audio.dwLength; + if(verbose) printf("AVI video length=%d\n",avi_header.bitrate); + avi_header.bitrate=((float)avi_header.bitrate/(float)sh_video->video.dwLength)*default_fps; + printf("VIDEO: [%.4s] %dx%d %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", + &sh_video->bih.biCompression, + sh_video->bih.biWidth, + sh_video->bih.biHeight, + sh_video->bih.biBitCount, + default_fps, + avi_header.bitrate*0.008f, + avi_header.bitrate/1024.0f ); break; } case DEMUXER_TYPE_ASF: { @@ -720,19 +730,55 @@ printf("ASF: missing video stream!? contact the author, it may be a bug :(\n"); exit(1); } - sh_video->format=sh_video->bih.biCompression; if(has_audio){ if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id); if(!ds_fill_buffer(d_audio)){ printf("ASF: No Audio stream found... ->nosound\n"); has_audio=0; - } + } else sh_audio->format=sh_audio->wf.wFormatTag; } - if(has_audio) sh_audio->format=sh_audio->wf.wFormatTag; + printf("VIDEO: [%.4s] %dx%d %dbpp\n", + &sh_video->bih.biCompression, + sh_video->bih.biWidth, + sh_video->bih.biHeight, + sh_video->bih.biBitCount); break; } case DEMUXER_TYPE_MPEG_ES: { demuxer->audio->type=0; + has_audio=0; // ES streams has no audio channel + break; + } + case DEMUXER_TYPE_MPEG_PS: { + if(has_audio) + if(!ds_fill_buffer(d_audio)){ + printf("MPEG: No Audio stream found... ->nosound\n"); + has_audio=0; + } else { + switch(d_audio->type){ + if(verbose) printf("detected MPG-PS audio format: %d\n",d_audio->type); + case 1: sh_audio->format=0x50;break; // mpeg + case 2: sh_audio->format=0x2;break; // pcm + case 3: sh_audio->format=0x2000;break; // ac3 + default: has_audio=0; // unknown type + } + } + break; + } +} // switch(file_format) + +// Determine image properties: +switch(file_format){ + case DEMUXER_TYPE_AVI: + case DEMUXER_TYPE_ASF: { + // display info: + sh_video->format=sh_video->bih.biCompression; + movie_size_x=sh_video->bih.biWidth; + movie_size_y=abs(sh_video->bih.biHeight); + break; + } + case DEMUXER_TYPE_MPEG_ES: + case DEMUXER_TYPE_MPEG_PS: { // Find sequence_header first: if(verbose) printf("Searching for sequence header... ");fflush(stdout); while(1){ @@ -746,36 +792,35 @@ } if(verbose) printf("OK!\n"); sh_video->format=1; // mpeg video - has_audio=0; // ES streams has no audio channel - break; - } - case DEMUXER_TYPE_MPEG_PS: { - if(has_audio) - if(!ds_fill_buffer(d_audio)){ - printf("MPEG: No Audio stream found... ->nosound\n"); - has_audio=0; - } else { - switch(d_audio->type){ - case 1: sh_audio->format=0x50;break; // mpeg - case 2: sh_audio->format=0x2;break; // pcm - case 3: sh_audio->format=0x2000;break; // ac3 - default: has_audio=0; // unknown type + mpeg2_init(); + // ========= Read & process sequence header & extension ============ + videobuffer=shmem_alloc(VIDEOBUFFER_SIZE); + if(!videobuffer){ printf("Cannot allocate shared memory\n");exit(0);} + videobuf_len=0; + if(!read_video_packet(d_video)){ printf("FATAL: Cannot read sequence header!\n");exit(1);} + if(header_process_sequence_header (picture, &videobuffer[4])) { + printf ("bad sequence header!\n"); exit(1); + } + if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext. + videobuf_len=0; + if(!read_video_packet(d_video)){ printf("FATAL: Cannot read sequence header extension!\n");exit(1);} + if(header_process_extension (picture, &videobuffer[4])) { + printf ("bad sequence header extension!\n"); exit(1); } - } - if(has_audio) if(verbose) printf("detected MPG-PS audio format: %d\n",sh_audio->format); - // Find sequence_header first: - if(verbose) printf("Searching for sequence header... ");fflush(stdout); - while(1){ - int i=sync_video_packet(d_video); - if(i==0x1B3) break; // found it! - if(!i || !skip_video_packet(d_video)){ - if(verbose) printf("NONE :(\n"); - printf("MPEG: FATAL: EOF while searching for sequence header\n"); - exit(1); - } } - if(verbose) printf("OK!\n"); - sh_video->format=1; // mpeg video + // display info: + default_fps=frameratecode2framerate[picture->frame_rate_code]*0.0001f; + movie_size_x=picture->display_picture_width; + movie_size_y=picture->display_picture_height; + // info: + if(verbose) printf("mpeg bitrate: %d (%X)\n",picture->bitrate,picture->bitrate); + printf("VIDEO: %s %dx%d (aspect %d) %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", + picture->mpeg1?"MPEG1":"MPEG2", + movie_size_x,movie_size_y, + picture->aspect_ratio_information, + default_fps, + picture->bitrate*0.5f, + picture->bitrate/16.0f ); break; } } // switch(file_format) @@ -833,27 +878,6 @@ case 2: { if(!init_video_codec(out_fmt)) exit(1); if(verbose) printf("INFO: Win32 video codec init OK!\n"); - //if(out_fmt==(IMGFMT_BGR|16)) out_fmt=IMGFMT_BGR|15; // fix bpp FIXME! - - // calculating video bitrate: - avi_header.bitrate=avi_header.movi_end-avi_header.movi_start-avi_header.idx_size*8; - if(sh_audio->audio.fccType) avi_header.bitrate-=sh_audio->audio.dwLength; - if(verbose) printf("AVI video length=%d\n",avi_header.bitrate); - avi_header.bitrate=((float)avi_header.bitrate/(float)sh_video->video.dwLength) - *((float)sh_video->video.dwRate/(float)sh_video->video.dwScale); -// default_fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; - printf("VIDEO: [%.4s] %dx%d %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", - &sh_video->bih.biCompression, - sh_video->bih.biWidth, - sh_video->bih.biHeight, - sh_video->bih.biBitCount, - default_fps, - avi_header.bitrate*0.008f, - avi_header.bitrate/1024.0f ); - - // display info: - movie_size_x=sh_video->o_bih.biWidth; - movie_size_y=abs(sh_video->o_bih.biHeight); break; } case 4: { // Win32/DirectShow @@ -882,26 +906,6 @@ // printf("DivX setting result = %d\n", DS_SetValue_DivX("Brightness",60) ); if(verbose) printf("INFO: Win32/DShow video codec init OK!\n"); - - // calculating video bitrate: - avi_header.bitrate=avi_header.movi_end-avi_header.movi_start-avi_header.idx_size*8; - if(sh_audio->audio.fccType) avi_header.bitrate-=sh_audio->audio.dwLength; - if(verbose) printf("AVI video length=%d\n",avi_header.bitrate); - avi_header.bitrate=((float)avi_header.bitrate/(float)sh_video->video.dwLength) - *((float)sh_video->video.dwRate/(float)sh_video->video.dwScale); -// default_fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; - printf("VIDEO: [%.4s] %dx%d %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", - &sh_video->bih.biCompression, - sh_video->bih.biWidth, - sh_video->bih.biHeight, - sh_video->bih.biBitCount, - default_fps, - avi_header.bitrate*0.008f, - avi_header.bitrate/1024.0f ); - - // display info: - movie_size_x=sh_video->bih.biWidth; - movie_size_y=abs(sh_video->bih.biHeight); break; #endif } @@ -917,34 +921,10 @@ decore(0x123, DEC_OPT_SETPP, &dec_set, NULL); } if(verbose) printf("INFO: OpenDivX video codec init OK!\n"); - - // calculating video bitrate: - avi_header.bitrate=avi_header.movi_end-avi_header.movi_start-avi_header.idx_size*8; - if(sh_audio->audio.fccType) avi_header.bitrate-=sh_audio->audio.dwLength; - if(verbose) printf("AVI video length=%d\n",avi_header.bitrate); - avi_header.bitrate=((float)avi_header.bitrate/(float)sh_video->video.dwLength) - *((float)sh_video->video.dwRate/(float)sh_video->video.dwScale); -// default_fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; - printf("VIDEO: [%.4s] %dx%d %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", - &sh_video->bih.biCompression, - sh_video->bih.biWidth, - sh_video->bih.biHeight, - sh_video->bih.biBitCount, - default_fps, - avi_header.bitrate*0.008f, - avi_header.bitrate/1024.0f ); - - // display info: - movie_size_x=sh_video->bih.biWidth; - movie_size_y=abs(sh_video->bih.biHeight); break; } case 1: { - // allocate some shared memory for the video packet buffer: - videobuffer=shmem_alloc(VIDEOBUFFER_SIZE); - if(!videobuffer){ printf("Cannot allocate shared memory\n");exit(0);} // init libmpeg2: - mpeg2_init(); #ifdef MPEG12_POSTPROC picture->pp_options=divx_quality; #else @@ -954,32 +934,7 @@ printf(" #define MPEG12_POSTPROC in config.h, and recompile libmpeg2!\n"); } #endif - if(verbose) printf("mpeg2_init() ok\n"); - // ========= Read & process sequence header & extension ============ - videobuf_len=0; - if(!read_video_packet(d_video)){ printf("FATAL: Cannot read sequence header!\n");return 1;} - if(header_process_sequence_header (picture, &videobuffer[4])) { - printf ("bad sequence header!\n"); return 1; - } - if(sync_video_packet(d_video)==0x1B5){ // next packet is seq. ext. - videobuf_len=0; - if(!read_video_packet(d_video)){ printf("FATAL: Cannot read sequence header extension!\n");return 1;} - if(header_process_extension (picture, &videobuffer[4])) { - printf ("bad sequence header extension!\n"); return 1; - } - } - default_fps=frameratecode2framerate[picture->frame_rate_code]*0.0001f; - if(verbose) printf("mpeg bitrate: %d (%X)\n",picture->bitrate,picture->bitrate); - printf("VIDEO: %s %dx%d (aspect %d) %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", - picture->mpeg1?"MPEG1":"MPEG2", - picture->display_picture_width,picture->display_picture_height, - picture->aspect_ratio_information, - default_fps, - picture->bitrate*0.5f, - picture->bitrate/16.0f ); - // display info: - movie_size_x=picture->display_picture_width; - movie_size_y=picture->display_picture_height; + mpeg2_allocate_image_buffers (picture); break; } } @@ -1075,22 +1030,6 @@ fflush(stdout); - -if(has_video==1){ - //================== init mpeg codec =================== - mpeg2_allocate_image_buffers (picture); - if(verbose) printf("INFO: mpeg2_init_video() OK!\n"); -#ifdef HAVE_CODECCTRL - // ====== Init MPEG codec process ============ - make_pipe(&control_fifo,&control_fifo2); - make_pipe(&data_fifo2,&data_fifo); - // ====== Let's FORK() !!! =================== - if((child_pid=fork())==0) - mpeg_codec_controller(video_out); // this one is running in a new process!!!! - signal(SIGPIPE,SIG_IGN); // Ignore "Broken pipe" signal (codec restarts) -#endif -} - //================== MAIN: ========================== { int audio_fd=-1;