# HG changeset patch # User alex # Date 1012076339 0 # Node ID 9e20866c325041e328946816d89ee3ea88d46092 # Parent 819eeb32159f990f5ae74a69c57b51da943b9619 added better fourcc handling for lavc, exiting if no lavc video codec name specified diff -r 819eeb32159f -r 9e20866c3250 mencoder.c --- a/mencoder.c Sat Jan 26 20:12:20 2002 +0000 +++ b/mencoder.c Sat Jan 26 20:18:59 2002 +0000 @@ -1,4 +1,3 @@ - #define VCODEC_COPY 0 #define VCODEC_FRAMENO 1 #define VCODEC_DIVX4 2 @@ -61,11 +60,13 @@ #else #include "libavcodec/avcodec.h" #endif +extern int avcodec_inited; + +/* for video encoder */ static AVCodec *lavc_venc_codec=NULL; static AVCodecContext lavc_venc_context; static AVPicture lavc_venc_picture; -extern int avcodec_inited; - +/* video options */ char *lavc_param_vcodec = NULL; int lavc_param_vbitrate = -1; int lavc_param_vhq = 0; /* default is realtime encoding */ @@ -203,7 +204,7 @@ static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h, int x0,int y0){ int y; // printf("draw_slice %dx%d %d;%d\n",w,h,x0,y0); - if(scale_srcW) + if(scale_srcW || scale_srcH) { uint8_t* dstPtr[3]= { vo_image, @@ -234,12 +235,14 @@ memcpy(d,s,w); } } // !swscaler + return(0); } static uint32_t draw_frame(uint8_t *src[]){ // printf("This function shouldn't be called - report bug!\n"); // later: add YUY2->YV12 conversion here! vo_image_ptr=src[0]; + return(0); } vo_functions_t video_out; @@ -613,7 +616,6 @@ switch(mux_v->codec){ case VCODEC_COPY: - printf("sh_video->bih: %x\n", sh_video->bih); if (sh_video->bih) mux_v->bih=sh_video->bih; else @@ -632,7 +634,6 @@ mux_v->bih->biBitCount, mux_v->bih->biCompression); break; case VCODEC_RAW: - printf("sh_video->bih: %x\n", sh_video->bih); if (sh_video->bih) mux_v->bih=sh_video->bih; else @@ -700,23 +701,57 @@ mux_v->bih->biHeight=vo_h; mux_v->bih->biPlanes=1; mux_v->bih->biBitCount=24; - mux_v->bih->biCompression=mmioFOURCC(lavc_param_vcodec[0], - lavc_param_vcodec[1], lavc_param_vcodec[2], lavc_param_vcodec[3]); /* FIXME!!! */ + if (!lavc_param_vcodec) + { + printf("No libavcodec codec specified! It's requested!\n"); + return 0; /* FIXME */ + } + else + { + const char *vcodec = lavc_param_vcodec; + if (!strcasecmp(vcodec, "mpeg1video")) + { + mux_v->bih->biCompression = mmioFOURCC('m', 'p', 'g', '1'); + } + else if (!strcasecmp(vcodec, "h263") || !strcasecmp(vcodec, "h263p")) + { + mux_v->bih->biCompression = mmioFOURCC('h', '2', '6', '3'); + } + else if (!strcasecmp(vcodec, "rv10")) + { + mux_v->bih->biCompression = mmioFOURCC('R', 'V', '1', '0'); + } + else if (!strcasecmp(vcodec, "mjpeg")) + { + mux_v->bih->biCompression = mmioFOURCC('M', 'J', 'P', 'G'); + } + else if (!strcasecmp(vcodec, "mpeg4")) + { + mux_v->bih->biCompression = mmioFOURCC('M', 'P', '4', 'S'); + } + else if (!strcasecmp(vcodec, "msmpeg4")) + { + mux_v->bih->biCompression = mmioFOURCC('d', 'i', 'v', '3'); + } + else + mux_v->bih->biCompression = mmioFOURCC(lavc_param_vcodec[0], + lavc_param_vcodec[1], lavc_param_vcodec[2], lavc_param_vcodec[3]); /* FIXME!!! */ + } mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); printf("videocodec: libavcodec (%dx%d fourcc=%x [%.4s])\n", mux_v->bih->biWidth, mux_v->bih->biHeight, mux_v->bih->biCompression, - &mux_v->bih->biCompression); + (char *)&mux_v->bih->biCompression); #endif } /* force output fourcc to .. */ -if (force_fourcc != NULL) +if ((force_fourcc != NULL) && (strlen(force_fourcc) >= 4)) { mux_v->bih->biCompression = mmioFOURCC(force_fourcc[0], force_fourcc[1], force_fourcc[2], force_fourcc[3]); printf("Forcing output fourcc to %x [%.4s]\n", - mux_v->bih->biCompression, &mux_v->bih->biCompression); + mux_v->bih->biCompression, (char *)&mux_v->bih->biCompression); } // ============= AUDIO =============== @@ -733,7 +768,6 @@ switch(mux_a->codec){ case ACODEC_COPY: - printf("sh_audio->wf: %x\n", sh_audio->wf); mux_a->h.dwSampleSize=sh_audio->audio.dwSampleSize; mux_a->h.dwScale=sh_audio->audio.dwScale; mux_a->h.dwRate=sh_audio->audio.dwRate; @@ -1044,7 +1078,6 @@ } break; #endif - } signal(SIGINT,exit_sighandler); // Interrupt from keyboard @@ -1257,7 +1290,6 @@ out_size = avcodec_encode_video(&lavc_venc_context, mux_v->buffer, mux_v->buffer_size, &lavc_venc_picture); -// printf("out_size = %d\n", out_size); aviwrite_write_chunk(muxer,mux_v,muxer_f,out_size,lavc_venc_context.key_frame?0x10:0); #endif }