Index: mediastreamer-2.9.0/src/utils/ffmpeg-priv.h =================================================================== --- mediastreamer-2.9.0.orig/src/utils/ffmpeg-priv.h +++ mediastreamer-2.9.0/src/utils/ffmpeg-priv.h @@ -69,9 +69,6 @@ static inline int avcodec_decode_video2( return avcodec_decode_video(avctx,picture, got_picture_ptr,avpkt->data,avpkt->size); } #endif -#if (LIBAVCODEC_VERSION_MAJOR >= 56) -#include -#endif #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,25,0) #define CodecID AVCodecID #endif Index: mediastreamer-2.9.0/src/videofilters/h264dec.c =================================================================== --- mediastreamer-2.9.0.orig/src/videofilters/h264dec.c +++ mediastreamer-2.9.0/src/videofilters/h264dec.c @@ -56,7 +56,7 @@ static void ffmpeg_init(){ static void dec_open(DecData *d){ AVCodec *codec; int error; - codec=avcodec_find_decoder(CODEC_ID_H264); + codec=avcodec_find_decoder(AV_CODEC_ID_H264); if (codec==NULL) ms_fatal("Could not find H264 decoder in ffmpeg."); avcodec_get_context_defaults3(&d->av_context, NULL); error=avcodec_open2(&d->av_context,codec, NULL); @@ -119,7 +119,7 @@ static mblk_t *get_as_yuvmsg(MSFilter *f s->outbuf.w=ctx->width; s->outbuf.h=ctx->height; s->sws_ctx=sws_getContext(ctx->width,ctx->height,ctx->pix_fmt, - ctx->width,ctx->height,PIX_FMT_YUV420P,SWS_FAST_BILINEAR, + ctx->width,ctx->height,AV_PIX_FMT_YUV420P,SWS_FAST_BILINEAR, NULL, NULL, NULL); } #if LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(0,9,0) @@ -272,7 +272,7 @@ static void dec_process(MSFilter *f){ int len; int got_picture=0; AVPacket pkt; - avcodec_get_frame_defaults(&orig); + av_frame_unref(&orig); av_init_packet(&pkt); pkt.data = p; pkt.size = end-p; Index: mediastreamer-2.9.0/src/videofilters/jpegwriter.c =================================================================== --- mediastreamer-2.9.0.orig/src/videofilters/jpegwriter.c +++ mediastreamer-2.9.0/src/videofilters/jpegwriter.c @@ -36,9 +36,9 @@ typedef struct { static void jpg_init(MSFilter *f){ JpegWriter *s=ms_new0(JpegWriter,1); - s->codec=avcodec_find_encoder(CODEC_ID_MJPEG); + s->codec=avcodec_find_encoder(AV_CODEC_ID_MJPEG); if (s->codec==NULL){ - ms_error("Could not find CODEC_ID_MJPEG !"); + ms_error("Could not find AV_CODEC_ID_MJPEG !"); } f->data=s; } @@ -96,7 +96,7 @@ static void jpg_process(MSFilter *f){ avctx->height=yuvbuf.h; avctx->time_base.num = 1; avctx->time_base.den =1; - avctx->pix_fmt=PIX_FMT_YUVJ420P; + avctx->pix_fmt=AV_PIX_FMT_YUVJ420P; error=avcodec_open2(avctx,s->codec,NULL); if (error!=0) { @@ -105,7 +105,7 @@ static void jpg_process(MSFilter *f){ av_free(avctx); return; } - sws_ctx=sws_getContext(avctx->width,avctx->height,PIX_FMT_YUV420P, + sws_ctx=sws_getContext(avctx->width,avctx->height,AV_PIX_FMT_YUV420P, avctx->width,avctx->height,avctx->pix_fmt,SWS_FAST_BILINEAR,NULL, NULL, NULL); if (sws_ctx==NULL) { ms_error(" sws_getContext() failed."); @@ -126,13 +126,18 @@ static void jpg_process(MSFilter *f){ } sws_freeContext(sws_ctx); - avcodec_get_frame_defaults(&pict); + av_frame_unref(&pict); avpicture_fill((AVPicture*)&pict,(uint8_t*)jpegm->b_rptr,avctx->pix_fmt,avctx->width,avctx->height); - error=avcodec_encode_video(avctx, (uint8_t*)comp_buf,comp_buf_sz, &pict); + AVPacket pkt; + av_init_packet(&pkt); + pkt.buf = (uint8_t*)comp_buf; + pkt.size = comp_buf_sz; + int got_packet; + error=avcodec_encode_video2(avctx, &pkt, &pict, &got_packet); if (error<0){ ms_error("Could not encode jpeg picture."); - }else{ - if (fwrite(comp_buf,error,1,s->file)>0){ + }else if(got_packet){ + if (fwrite(comp_buf,pkt.size,1,s->file)>0){ ms_message("Snapshot done"); }else{ ms_error("Error writing snapshot."); Index: mediastreamer-2.9.0/src/videofilters/nowebcam.c =================================================================== --- mediastreamer-2.9.0.orig/src/videofilters/nowebcam.c +++ mediastreamer-2.9.0/src/videofilters/nowebcam.c @@ -61,7 +61,7 @@ static mblk_t *jpeg2yuv(uint8_t *jpgbuf, struct SwsContext *sws_ctx; AVPacket pkt; MSPicture dest; - AVCodec *codec=avcodec_find_decoder(CODEC_ID_MJPEG); + AVCodec *codec=avcodec_find_decoder(AV_CODEC_ID_MJPEG); if (codec==NULL){ ms_error("Could not find MJPEG decoder in ffmpeg."); @@ -84,9 +84,9 @@ static mblk_t *jpeg2yuv(uint8_t *jpgbuf, } ret=ms_yuv_buf_alloc(&dest, reqsize->width,reqsize->height); /* not using SWS_FAST_BILINEAR because it doesn't play well with - * av_context.pix_fmt set to PIX_FMT_YUVJ420P by jpeg decoder */ + * av_context.pix_fmt set to AV_PIX_FMT_YUVJ420P by jpeg decoder */ sws_ctx=sws_getContext(av_context.width,av_context.height,av_context.pix_fmt, - reqsize->width,reqsize->height,PIX_FMT_YUV420P,SWS_BILINEAR, + reqsize->width,reqsize->height,AV_PIX_FMT_YUV420P,SWS_BILINEAR, NULL, NULL, NULL); if (sws_ctx==NULL) { ms_error("jpeg2yuv: ms_sws_getContext() failed."); Index: mediastreamer-2.9.0/src/videofilters/videodec.c =================================================================== --- mediastreamer-2.9.0.orig/src/videofilters/videodec.c +++ mediastreamer-2.9.0/src/videofilters/videodec.c @@ -40,7 +40,7 @@ typedef struct DecState{ YuvBuf outbuf; mblk_t *yuv_msg; struct SwsContext *sws_ctx; - enum PixelFormat output_pix_fmt; + enum AVPixelFormat output_pix_fmt; uint8_t dci[512]; int dci_size; uint64_t last_error_reported_time; @@ -58,7 +58,7 @@ static void dec_init(MSFilter *f, enum C s->codec=cid; s->input=NULL; s->yuv_msg=NULL; - s->output_pix_fmt=PIX_FMT_YUV420P; + s->output_pix_fmt=AV_PIX_FMT_YUV420P; s->snow_initialized=FALSE; s->outbuf.w=0; s->outbuf.h=0; @@ -77,19 +77,19 @@ static void dec_init(MSFilter *f, enum C } static void dec_h263_init(MSFilter *f){ - dec_init(f,CODEC_ID_H263); + dec_init(f,AV_CODEC_ID_H263); } static void dec_mpeg4_init(MSFilter *f){ - dec_init(f,CODEC_ID_MPEG4); + dec_init(f,AV_CODEC_ID_MPEG4); } static void dec_mjpeg_init(MSFilter *f){ - dec_init(f,CODEC_ID_MJPEG); + dec_init(f,AV_CODEC_ID_MJPEG); } static void dec_snow_init(MSFilter *f){ - dec_init(f,CODEC_ID_SNOW); + dec_init(f,AV_CODEC_ID_SNOW); } static void dec_uninit(MSFilter *f){ @@ -134,10 +134,10 @@ static void dec_preprocess(MSFilter *f){ s->first_image_decoded = FALSE; if (s->av_context.codec==NULL){ /* we must know picture size before initializing snow decoder*/ - if (s->codec!=CODEC_ID_SNOW){ + if (s->codec!=AV_CODEC_ID_SNOW){ error=avcodec_open2(&s->av_context, s->av_codec,NULL); if (error!=0) ms_error("avcodec_open2() failed: %i",error); - if (s->codec==CODEC_ID_MPEG4 && s->dci_size>0){ + if (s->codec==AV_CODEC_ID_MPEG4 && s->dci_size>0){ s->av_context.extradata=s->dci; s->av_context.extradata_size=s->dci_size; } @@ -643,8 +643,8 @@ static void dec_process_frame(MSFilter * if (f->desc->id==MS_H263_DEC_ID) inm=skip_rfc2429_header(inm); else if (f->desc->id==MS_H263_OLD_DEC_ID) inm=skip_rfc2190_header(inm); - else if (s->codec==CODEC_ID_SNOW && s->input==NULL) inm=parse_snow_header(s,inm); - else if (s->codec==CODEC_ID_MJPEG && f->desc->id==MS_JPEG_DEC_ID) inm=read_rfc2435_header(s,inm); + else if (s->codec==AV_CODEC_ID_SNOW && s->input==NULL) inm=parse_snow_header(s,inm); + else if (s->codec==AV_CODEC_ID_MJPEG && f->desc->id==MS_JPEG_DEC_ID) inm=read_rfc2435_header(s,inm); if (inm){ /* accumulate the video packet until we have the rtp markbit*/ Index: mediastreamer-2.9.0/src/videofilters/videoenc.c =================================================================== --- mediastreamer-2.9.0.orig/src/videofilters/videoenc.c +++ mediastreamer-2.9.0/src/videofilters/videoenc.c @@ -223,19 +223,19 @@ static void enc_init(MSFilter *f, enum C } static void enc_h263_init(MSFilter *f){ - enc_init(f,CODEC_ID_H263P); + enc_init(f,AV_CODEC_ID_H263P); } static void enc_mpeg4_init(MSFilter *f){ - enc_init(f,CODEC_ID_MPEG4); + enc_init(f,AV_CODEC_ID_MPEG4); } static void enc_snow_init(MSFilter *f){ - enc_init(f,CODEC_ID_SNOW); + enc_init(f,AV_CODEC_ID_SNOW); } static void enc_mjpeg_init(MSFilter *f){ - enc_init(f,CODEC_ID_MJPEG); + enc_init(f,AV_CODEC_ID_MJPEG); } static void prepare(EncState *s){ @@ -243,7 +243,7 @@ static void prepare(EncState *s){ const int max_br_vbv=128000; avcodec_get_context_defaults3(c, NULL); - if (s->codec==CODEC_ID_MJPEG) + if (s->codec==AV_CODEC_ID_MJPEG) { ms_message("Codec bitrate set to %i",c->bit_rate); c->width = s->vsize.width; @@ -251,7 +251,7 @@ static void prepare(EncState *s){ c->time_base.num = 1; c->time_base.den = (int)s->fps; c->gop_size=(int)s->fps*5; /*emit I frame every 5 seconds*/ - c->pix_fmt=PIX_FMT_YUVJ420P; + c->pix_fmt=AV_PIX_FMT_YUVJ420P; s->comp_buf=allocb(c->bit_rate*2,0); return; } @@ -269,7 +269,7 @@ static void prepare(EncState *s){ /* ffmpeg vbv rate control consumes too much cpu above a certain target bitrate. We don't use it above max_br_vbv */ - if (s->codec!=CODEC_ID_SNOW && s->maxbrcodec!=AV_CODEC_ID_SNOW && s->maxbrrc_max_rate=c->bit_rate; c->rc_min_rate=0; @@ -285,9 +285,9 @@ static void prepare(EncState *s){ c->time_base.num = 1; c->time_base.den = (int)s->fps; c->gop_size=(int)s->fps*10; /*emit I frame every 10 seconds*/ - c->pix_fmt=PIX_FMT_YUV420P; + c->pix_fmt=AV_PIX_FMT_YUV420P; s->comp_buf=allocb(c->bit_rate*2,0); - if (s->codec==CODEC_ID_SNOW){ + if (s->codec==AV_CODEC_ID_SNOW){ c->strict_std_compliance=-2; } @@ -304,7 +304,7 @@ static void prepare_h263(EncState *s){ #endif c->rtp_payload_size = s->mtu/2; if (s->profile==0){ - s->codec=CODEC_ID_H263; + s->codec=AV_CODEC_ID_H263; }else{ /* c->flags|=CODEC_FLAG_H263P_UMV; @@ -313,7 +313,7 @@ static void prepare_h263(EncState *s){ c->flags|=CODEC_FLAG_OBMC; c->flags|=CODEC_FLAG_AC_PRED; */ - s->codec=CODEC_ID_H263P; + s->codec=AV_CODEC_ID_H263P; } } @@ -331,13 +331,13 @@ static void enc_preprocess(MSFilter *f){ EncState *s=(EncState*)f->data; int error; prepare(s); - if (s->codec==CODEC_ID_H263P || s->codec==CODEC_ID_H263) + if (s->codec==AV_CODEC_ID_H263P || s->codec==AV_CODEC_ID_H263) prepare_h263(s); - else if (s->codec==CODEC_ID_MPEG4) + else if (s->codec==AV_CODEC_ID_MPEG4) prepare_mpeg4(s); - else if (s->codec==CODEC_ID_SNOW){ + else if (s->codec==AV_CODEC_ID_SNOW){ /**/ - }else if (s->codec==CODEC_ID_MJPEG){ + }else if (s->codec==AV_CODEC_ID_MJPEG){ /**/ }else { ms_error("Unsupported codec id %i",s->codec); @@ -724,12 +724,12 @@ static void split_and_send(MSFilter *f, uint8_t *psc; uint32_t timestamp=f->ticker->time*90LL; - if (s->codec==CODEC_ID_MPEG4 || s->codec==CODEC_ID_SNOW) + if (s->codec==AV_CODEC_ID_MPEG4 || s->codec==AV_CODEC_ID_SNOW) { mpeg4_fragment_and_send(f,s,frame,timestamp); return; } - else if (s->codec==CODEC_ID_MJPEG) + else if (s->codec==AV_CODEC_ID_MJPEG) { mblk_t *lqt=NULL; mblk_t *cqt=NULL; @@ -765,7 +765,7 @@ static void split_and_send(MSFilter *f, static void process_frame(MSFilter *f, mblk_t *inm){ EncState *s=(EncState*)f->data; - AVFrame pict; + AVFrame pict = {}; AVCodecContext *c=&s->av_context; int error; mblk_t *comp_buf=s->comp_buf; @@ -774,7 +774,7 @@ static void process_frame(MSFilter *f, m ms_yuv_buf_init_from_mblk(&yuv, inm); /* convert image if necessary */ - avcodec_get_frame_defaults(&pict); + av_frame_unref(&pict); avpicture_fill((AVPicture*)&pict,yuv.planes[0],c->pix_fmt,c->width,c->height); /* timestamp used by ffmpeg, unset here */ @@ -789,7 +789,7 @@ static void process_frame(MSFilter *f, m s->req_vfu=FALSE; } comp_buf->b_rptr=comp_buf->b_wptr=comp_buf->b_datap->db_base; - if (s->codec==CODEC_ID_SNOW){ + if (s->codec==AV_CODEC_ID_SNOW){ //prepend picture size uint32_t header=((s->vsize.width&0xffff)<<16) | (s->vsize.height&0xffff); *(uint32_t*)comp_buf->b_wptr=htonl(header); @@ -797,10 +797,15 @@ static void process_frame(MSFilter *f, m comp_buf_sz-=4; } - error=avcodec_encode_video(c, (uint8_t*)comp_buf->b_wptr,comp_buf_sz, &pict); + AVPacket pkt; + av_init_packet(&pkt); + pkt.data = (uint8_t*)comp_buf->b_wptr; + pkt.size = comp_buf_sz; + int got_packet; + error=avcodec_encode_video2(c, &pkt, &pict, &got_packet); if (error<=0) ms_warning("ms_AVencoder_process: error %i.",error); - else{ + else if(got_packet){ s->framenum++; if (s->framenum==1){ video_starter_first_frame (&s->starter,f->ticker->time); @@ -808,7 +813,7 @@ static void process_frame(MSFilter *f, m if (c->coded_frame->pict_type==FF_I_TYPE){ ms_message("Emitting I-frame"); } - comp_buf->b_wptr+=error; + comp_buf->b_wptr+=pkt.size; split_and_send(f,s,comp_buf); } freemsg(inm); @@ -837,7 +842,7 @@ static int enc_get_br(MSFilter *f, void static int enc_set_br(MSFilter *f, void *arg){ EncState *s=(EncState*)f->data; - bool_t snow=s->codec==CODEC_ID_SNOW; + bool_t snow=s->codec==AV_CODEC_ID_SNOW; s->maxbr=*(int*)arg; if (s->av_context.codec!=NULL){ /*when we are processing, apply new settings immediately*/ @@ -847,11 +852,11 @@ static int enc_set_br(MSFilter *f, void ms_filter_unlock(f); return 0; } - if (s->maxbr>=1024000 && s->codec!=CODEC_ID_H263P){ + if (s->maxbr>=1024000 && s->codec!=AV_CODEC_ID_H263P){ s->vsize.width = MS_VIDEO_SIZE_SVGA_W; s->vsize.height = MS_VIDEO_SIZE_SVGA_H; s->fps=25; - }else if (s->maxbr>=800000 && s->codec!=CODEC_ID_H263P){ + }else if (s->maxbr>=800000 && s->codec!=AV_CODEC_ID_H263P){ s->vsize.width = MS_VIDEO_SIZE_VGA_W; s->vsize.height = MS_VIDEO_SIZE_VGA_H; s->fps=25; @@ -864,7 +869,7 @@ static int enc_set_br(MSFilter *f, void s->vsize.height=MS_VIDEO_SIZE_CIF_H; s->fps=17; s->qmin=3; - }else if (s->maxbr>=170000 && s->codec!=CODEC_ID_H263P && s->codec!=CODEC_ID_H263){ + }else if (s->maxbr>=170000 && s->codec!=AV_CODEC_ID_H263P && s->codec!=AV_CODEC_ID_H263){ s->vsize.width=MS_VIDEO_SIZE_QVGA_W; s->vsize.height=MS_VIDEO_SIZE_QVGA_H; s->fps=15; @@ -1075,15 +1080,15 @@ MSFilterDesc ms_mjpeg_enc_desc={ void __register_ffmpeg_encoders_if_possible(void){ ms_ffmpeg_check_init(); - if (avcodec_find_encoder(CODEC_ID_MPEG4)) + if (avcodec_find_encoder(AV_CODEC_ID_MPEG4)) ms_filter_register(&ms_mpeg4_enc_desc); - if (avcodec_find_encoder(CODEC_ID_H263)){ + if (avcodec_find_encoder(AV_CODEC_ID_H263)){ ms_filter_register(&ms_h263_enc_desc); ms_filter_register(&ms_h263_old_enc_desc); } - if (avcodec_find_encoder(CODEC_ID_SNOW)) + if (avcodec_find_encoder(AV_CODEC_ID_SNOW)) ms_filter_register(&ms_snow_enc_desc); - if (avcodec_find_encoder(CODEC_ID_MJPEG)) + if (avcodec_find_encoder(AV_CODEC_ID_MJPEG)) { ms_filter_register(&ms_mjpeg_enc_desc); } Index: mediastreamer-2.9.0/src/voip/msvideo.c =================================================================== --- mediastreamer-2.9.0.orig/src/voip/msvideo.c +++ mediastreamer-2.9.0/src/voip/msvideo.c @@ -351,21 +351,21 @@ void ms_rgb_to_yuv(const uint8_t rgb[3], int ms_pix_fmt_to_ffmpeg(MSPixFmt fmt){ switch(fmt){ case MS_RGBA32: - return PIX_FMT_RGBA; + return AV_PIX_FMT_RGBA; case MS_RGB24: - return PIX_FMT_RGB24; + return AV_PIX_FMT_RGB24; case MS_RGB24_REV: - return PIX_FMT_BGR24; + return AV_PIX_FMT_BGR24; case MS_YUV420P: - return PIX_FMT_YUV420P; + return AV_PIX_FMT_YUV420P; case MS_YUYV: - return PIX_FMT_YUYV422; + return AV_PIX_FMT_YUYV422; case MS_UYVY: - return PIX_FMT_UYVY422; + return AV_PIX_FMT_UYVY422; case MS_YUY2: - return PIX_FMT_YUYV422; /* <- same as MS_YUYV */ + return AV_PIX_FMT_YUYV422; /* <- same as MS_YUYV */ case MS_RGB565: - return PIX_FMT_RGB565; + return AV_PIX_FMT_RGB565; default: ms_fatal("format not supported."); return -1; @@ -375,19 +375,19 @@ int ms_pix_fmt_to_ffmpeg(MSPixFmt fmt){ MSPixFmt ffmpeg_pix_fmt_to_ms(int fmt){ switch(fmt){ - case PIX_FMT_RGB24: + case AV_PIX_FMT_RGB24: return MS_RGB24; - case PIX_FMT_BGR24: + case AV_PIX_FMT_BGR24: return MS_RGB24_REV; - case PIX_FMT_YUV420P: + case AV_PIX_FMT_YUV420P: return MS_YUV420P; - case PIX_FMT_YUYV422: + case AV_PIX_FMT_YUYV422: return MS_YUYV; /* same as MS_YUY2 */ - case PIX_FMT_UYVY422: + case AV_PIX_FMT_UYVY422: return MS_UYVY; - case PIX_FMT_RGBA: + case AV_PIX_FMT_RGBA: return MS_RGBA32; - case PIX_FMT_RGB565: + case AV_PIX_FMT_RGB565: return MS_RGB565; default: ms_fatal("format not supported.");