summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'media-libs/mediastreamer/files')
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.7.3-ffmpeg-0.11.patch94
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.7.3-sdl-build.patch220
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.7.3-v4l-automagic.patch40
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.7.3-videoenc_282.patch130
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.8.2-autopoint.patch17
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.8.2-ffmpeg-1.0.patch59
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.8.2-libav9.patch115
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.8.2-v4l-automagic.patch54
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.9.0-libav9.patch120
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.9.0-tests.patch26
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.9.0-underlinking.patch57
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.9.0-v4l-automagic.patch55
-rw-r--r--media-libs/mediastreamer/files/mediastreamer-2.9.0-xxd.patch18
13 files changed, 1005 insertions, 0 deletions
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.7.3-ffmpeg-0.11.patch b/media-libs/mediastreamer/files/mediastreamer-2.7.3-ffmpeg-0.11.patch
new file mode 100644
index 000000000000..c242b5fe139c
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.7.3-ffmpeg-0.11.patch
@@ -0,0 +1,94 @@
+Fix build with recent ffmpeg releases.
+https://bugs.gentoo.org/show_bug.cgi?id=419453
+
+Index: mediastreamer-2.7.3/src/videoenc.c
+===================================================================
+--- mediastreamer-2.7.3.orig/src/videoenc.c
++++ mediastreamer-2.7.3/src/videoenc.c
+@@ -53,7 +53,6 @@ void ms_ffmpeg_log_callback(void* ptr, i
+
+ void ms_ffmpeg_check_init(){
+ if(!avcodec_initialized){
+- avcodec_init();
+ avcodec_register_all();
+ avcodec_initialized=TRUE;
+ #ifdef ENABLE_LOG_FFMPEG
+@@ -107,6 +106,7 @@ typedef struct EncState{
+ uint32_t framenum;
+ VideoStarter starter;
+ bool_t req_vfu;
++ AVDictionary * ff_opts;
+ }EncState;
+
+ static int enc_set_fps(MSFilter *f, void *arg){
+@@ -214,6 +214,7 @@ static void enc_init(MSFilter *f, enum C
+ s->req_vfu=FALSE;
+ s->framenum=0;
+ s->av_context.codec=NULL;
++ s->ff_opts = NULL;
+ }
+
+ static void enc_h263_init(MSFilter *f){
+@@ -300,9 +301,9 @@ static void prepare_h263(EncState *s){
+ if (s->profile==0){
+ s->codec=CODEC_ID_H263;
+ }else{
+- c->flags|=CODEC_FLAG_H263P_UMV;
++ av_dict_set(&(s->ff_opts), "umv", "1", 0);
+ c->flags|=CODEC_FLAG_AC_PRED;
+- c->flags|=CODEC_FLAG_H263P_SLICE_STRUCT;
++ av_dict_set(&(s->ff_opts), "structured_slices", "1", 0);
+ /*
+ c->flags|=CODEC_FLAG_OBMC;
+ c->flags|=CODEC_FLAG_AC_PRED;
+@@ -342,9 +343,9 @@ static void enc_preprocess(MSFilter *f){
+ ms_error("could not find encoder for codec id %i",s->codec);
+ return;
+ }
+- error=avcodec_open(&s->av_context, s->av_codec);
++ error=avcodec_open2(&s->av_context, s->av_codec, &(s->ff_opts));
+ if (error!=0) {
+- ms_error("avcodec_open() failed: %i",error);
++ ms_error("avcodec_open2() failed: %i",error);
+ return;
+ }
+ video_starter_init(&s->starter);
+@@ -372,7 +373,7 @@ static void add_rfc2190_header(mblk_t **
+ // assume video size is CIF or QCIF
+ if (context->width == 352 && context->height == 288) header->b_wptr[1] = 0x60;
+ else header->b_wptr[1] = 0x40;
+- if (context->coded_frame->pict_type != FF_I_TYPE) header->b_wptr[1] |= 0x10;
++ if (context->coded_frame->pict_type != AV_PICTURE_TYPE_I) header->b_wptr[1] |= 0x10;
+ header->b_wptr += 4;
+ header->b_cont = *packet;
+ *packet = header;
+@@ -779,7 +780,7 @@ static void process_frame(MSFilter *f, m
+ s->req_vfu=TRUE;
+ }
+ if (s->req_vfu){
+- pict.pict_type=FF_I_TYPE;
++ pict.pict_type=AV_PICTURE_TYPE_I;
+ s->req_vfu=FALSE;
+ }
+ comp_buf->b_rptr=comp_buf->b_wptr=comp_buf->b_datap->db_base;
+@@ -799,7 +800,7 @@ static void process_frame(MSFilter *f, m
+ if (s->framenum==1){
+ video_starter_first_frame (&s->starter,f->ticker->time);
+ }
+- if (c->coded_frame->pict_type==FF_I_TYPE){
++ if (c->coded_frame->pict_type==AV_PICTURE_TYPE_I){
+ ms_message("Emitting I-frame");
+ }
+ comp_buf->b_wptr+=error;
+Index: mediastreamer-2.7.3/src/h264dec.c
+===================================================================
+--- mediastreamer-2.7.3.orig/src/h264dec.c
++++ mediastreamer-2.7.3/src/h264dec.c
+@@ -46,7 +46,6 @@ typedef struct _DecData{
+ static void ffmpeg_init(){
+ static bool_t done=FALSE;
+ if (!done){
+- avcodec_init();
+ avcodec_register_all();
+ done=TRUE;
+ }
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.7.3-sdl-build.patch b/media-libs/mediastreamer/files/mediastreamer-2.7.3-sdl-build.patch
new file mode 100644
index 000000000000..2f7207e27ab0
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.7.3-sdl-build.patch
@@ -0,0 +1,220 @@
+commit c0ae6c3f9f78ae9e9e4c7030e7054dc5c0267e2c
+Author: Simon Morlat <simon.morlat@linphone.org>
+Date: Mon Apr 11 22:46:37 2011 +0200
+
+ fix SDL output that wasn't compiling anymore and bugfix videodisplay test program
+
+diff --git a/src/msfilter.c b/src/msfilter.c
+index d8d84f3..4b84b8b 100644
+--- a/src/msfilter.c
++++ b/src/msfilter.c
+@@ -169,9 +169,7 @@ int ms_filter_link(MSFilter *f1, int pin1, MSFilter *f2, int pin2){
+
+ int ms_filter_unlink(MSFilter *f1, int pin1, MSFilter *f2, int pin2){
+ MSQueue *q;
+- ms_return_val_if_fail(f1, -1);
+- ms_return_val_if_fail(f2, -1);
+- ms_message("ms_filter_unlink: %s:%p,%i-->%s:%p,%i",f1->desc->name,f1,pin1,f2->desc->name,f2,pin2);
++ ms_message("ms_filter_unlink: %s:%p,%i-->%s:%p,%i",f1 ? f1->desc->name : "!NULL!",f1,pin1,f2 ? f2->desc->name : "!NULL!",f2,pin2);
+ ms_return_val_if_fail(pin1<f1->desc->noutputs, -1);
+ ms_return_val_if_fail(pin2<f2->desc->ninputs, -1);
+ ms_return_val_if_fail(f1->outputs[pin1]!=NULL,-1);
+diff --git a/src/videoout.c b/src/videoout.c
+index ca36b0f..5bdc6dd 100644
+--- a/src/videoout.c
++++ b/src/videoout.c
+@@ -114,8 +114,6 @@ void ms_display_destroy(MSDisplay *d);
+ }
+ #endif
+
+-#include "ffmpeg-priv.h"
+-
+ #define SCALE_FACTOR 4.0f
+ #define SELVIEW_POS_INACTIVE -100.0
+
+@@ -462,7 +460,7 @@ void ms_display_desc_set_default_window_id(MSDisplayDesc *desc, long id){
+
+ typedef struct VideoOut
+ {
+- AVRational ratio;
++ struct Rational {int num; int den;} ratio;
+ MSPicture fbuf;
+ MSPicture fbuf_selfview;
+ MSPicture local_pic;
+@@ -474,8 +472,8 @@ typedef struct VideoOut
+ float sv_posx,sv_posy;
+ int background_color[3];
+
+- struct ms_SwsContext *sws1;
+- struct ms_SwsContext *sws2;
++ MSScalerContext *sws1;
++ MSScalerContext *sws2;
+ MSDisplay *display;
+ bool_t own_display;
+ bool_t ready;
+@@ -552,11 +550,11 @@ static void video_out_uninit(MSFilter *f){
+ if (obj->display!=NULL && obj->own_display)
+ ms_display_destroy(obj->display);
+ if (obj->sws1!=NULL){
+- ms_sws_freeContext(obj->sws1);
++ ms_scaler_context_free(obj->sws1);
+ obj->sws1=NULL;
+ }
+ if (obj->sws2!=NULL){
+- ms_sws_freeContext(obj->sws2);
++ ms_scaler_context_free(obj->sws2);
+ obj->sws2=NULL;
+ }
+ if (obj->local_msg!=NULL) {
+@@ -581,11 +579,11 @@ static void video_out_prepare(MSFilter *f){
+ obj->display=NULL;
+ }
+ if (obj->sws1!=NULL){
+- ms_sws_freeContext(obj->sws1);
++ ms_scaler_context_free(obj->sws1);
+ obj->sws1=NULL;
+ }
+ if (obj->sws2!=NULL){
+- ms_sws_freeContext(obj->sws2);
++ ms_scaler_context_free(obj->sws2);
+ obj->sws2=NULL;
+ }
+ if (obj->local_msg!=NULL) {
+@@ -665,13 +663,12 @@ static void video_out_process(MSFilter *f){
+ if (ms_yuv_buf_init_from_mblk(&src,inm)==0){
+
+ if (obj->sws2==NULL){
+- obj->sws2=ms_sws_getContext(src.w,src.h,PIX_FMT_YUV420P,
+- obj->fbuf_selfview.w,obj->fbuf_selfview.h,PIX_FMT_YUV420P,
+- SWS_FAST_BILINEAR, NULL, NULL, NULL);
++ obj->sws2=ms_scaler_create_context(src.w,src.h,MS_YUV420P,
++ obj->fbuf_selfview.w,obj->fbuf_selfview.h,MS_YUV420P,
++ MS_SCALER_METHOD_BILINEAR);
+ }
+ ms_display_lock(obj->display);
+- if (ms_sws_scale(obj->sws2,src.planes,src.strides, 0,
+- src.h, obj->fbuf_selfview.planes, obj->fbuf_selfview.strides)<0){
++ if (ms_scaler_process(obj->sws2,src.planes,src.strides,obj->fbuf_selfview.planes, obj->fbuf_selfview.strides)<0){
+ ms_error("Error in ms_sws_scale().");
+ }
+ if (!mblk_get_precious_flag(inm)) ms_yuv_buf_mirror(&obj->fbuf_selfview);
+@@ -683,9 +680,9 @@ static void video_out_process(MSFilter *f){
+ if (ms_yuv_buf_init_from_mblk(&src,inm)==0){
+
+ if (obj->sws2==NULL){
+- obj->sws2=ms_sws_getContext(src.w,src.h,PIX_FMT_YUV420P,
+- obj->local_pic.w,obj->local_pic.h,PIX_FMT_YUV420P,
+- SWS_FAST_BILINEAR, NULL, NULL, NULL);
++ obj->sws2=ms_scaler_create_context(src.w,src.h,MS_YUV420P,
++ obj->local_pic.w,obj->local_pic.h,MS_YUV420P,
++ MS_SCALER_METHOD_BILINEAR);
+ }
+ if (obj->local_msg==NULL){
+ obj->local_msg=ms_yuv_buf_alloc(&obj->local_pic,
+@@ -693,8 +690,7 @@ static void video_out_process(MSFilter *f){
+ }
+ if (obj->local_pic.planes[0]!=NULL)
+ {
+- if (ms_sws_scale(obj->sws2,src.planes,src.strides, 0,
+- src.h, obj->local_pic.planes, obj->local_pic.strides)<0){
++ if (ms_scaler_process(obj->sws2,src.planes,src.strides,obj->local_pic.planes, obj->local_pic.strides)<0){
+ ms_error("Error in ms_sws_scale().");
+ }
+ if (!mblk_get_precious_flag(inm)) ms_yuv_buf_mirror(&obj->local_pic);
+@@ -731,13 +727,12 @@ static void video_out_process(MSFilter *f){
+ }
+ }
+ if (obj->sws1==NULL){
+- obj->sws1=ms_sws_getContext(src.w,src.h,PIX_FMT_YUV420P,
+- obj->fbuf.w,obj->fbuf.h,PIX_FMT_YUV420P,
+- SWS_FAST_BILINEAR, NULL, NULL, NULL);
++ obj->sws1=ms_scaler_create_context(src.w,src.h,MS_YUV420P,
++ obj->fbuf.w,obj->fbuf.h,MS_YUV420P,
++ MS_SCALER_METHOD_BILINEAR);
+ }
+ ms_display_lock(obj->display);
+- if (ms_sws_scale(obj->sws1,src.planes,src.strides, 0,
+- src.h, obj->fbuf.planes, obj->fbuf.strides)<0){
++ if (ms_scaler_process(obj->sws1,src.planes,src.strides,obj->fbuf.planes, obj->fbuf.strides)<0){
+ ms_error("Error in ms_sws_scale().");
+ }
+ if (obj->mirror && !mblk_get_precious_flag(inm)) ms_yuv_buf_mirror(&obj->fbuf);
+@@ -943,3 +938,4 @@ MSFilterDesc ms_video_out_desc={
+
+
+ MS_FILTER_DESC_EXPORT(ms_video_out_desc)
++
+diff --git a/tests/videodisplay.c b/tests/videodisplay.c
+index 76f67a5..0828c6a 100644
+--- a/tests/videodisplay.c
++++ b/tests/videodisplay.c
+@@ -52,6 +52,7 @@ int main(int argc, char *argv[]){
+ for(i=0;i<1;++i){
+ int n;
+ vs=video_preview_new();
++ /*video_preview_set_display_filter_name(vs,"MSVideoOut");*/
+ video_preview_set_size(vs,vsize);
+ video_preview_start(vs, cam);
+
+@@ -79,11 +80,11 @@ int main(int argc, char *argv[]){
+
+ vs->tee = ms_filter_new(MS_TEE_ID);
+
+- ms_filter_unlink(vs->pixconv,0, vs->output,0);
++ ms_filter_unlink(vs->pixconv,0, vs->output2,0);
+
+ ms_filter_link(vs->pixconv,0,vs->tee,0);
+- ms_filter_link(vs->tee,0,vs->output,0);
+- ms_filter_link(vs->tee,1,vs->output,1);
++ ms_filter_link(vs->tee,0,vs->output2,0);
++ ms_filter_link(vs->tee,1,vs->output2,1);
+
+ //ms_filter_unlink(vs->tee,0,vs->output,0);
+ ms_ticker_attach (vs->ticker, vs->source);
+@@ -92,34 +93,34 @@ int main(int argc, char *argv[]){
+ if (n==500)
+ {
+ int corner=1;
+- ms_filter_call_method(vs->output,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
++ ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
+ }
+ if (n==600)
+ {
+ int corner=2;
+- ms_filter_call_method(vs->output,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
++ ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
+ }
+ if (n==700)
+ {
+ int corner=3;
+- ms_filter_call_method(vs->output,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
++ ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
+ }
+ if (n==800)
+ {
+ int corner=-1;
+- ms_filter_call_method(vs->output,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
++ ms_filter_call_method(vs->output2,MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE,&corner);
+ }
+ if (n==900)
+ {
+ ms_ticker_detach (vs->ticker, vs->source);
+
+ ms_filter_unlink(vs->pixconv,0,vs->tee,0);
+- ms_filter_unlink(vs->tee,0,vs->output,0);
+- ms_filter_unlink(vs->tee,1,vs->output,1);
++ ms_filter_unlink(vs->tee,0,vs->output2,0);
++ ms_filter_unlink(vs->tee,1,vs->output2,1);
+ ms_filter_destroy(vs->tee);
+ vs->tee=NULL;
+
+- ms_filter_link(vs->pixconv,0, vs->output,0);
++ ms_filter_link(vs->pixconv,0, vs->output2,0);
+
+
+ ms_ticker_attach (vs->ticker, vs->source);
+@@ -129,3 +130,4 @@ int main(int argc, char *argv[]){
+ }
+ return 0;
+ }
++
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.7.3-v4l-automagic.patch b/media-libs/mediastreamer/files/mediastreamer-2.7.3-v4l-automagic.patch
new file mode 100644
index 000000000000..d103a07fd9af
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.7.3-v4l-automagic.patch
@@ -0,0 +1,40 @@
+=== modified file 'configure.ac'
+--- configure.ac 2011-04-09 08:17:33 +0000
++++ configure.ac 2011-04-09 08:31:18 +0000
+@@ -590,6 +590,15 @@
+ AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${package_prefix}/share" ,[path of data])
+ AC_SUBST(PACKAGE_DATA_DIR)
+
++AC_ARG_ENABLE(v4l,
++ [ --disable-v4l Disable usage of v4l],
++ [case "${enableval}" in
++ yes) v4l=yes ;;
++ no) v4l=no ;;
++ *) AC_MSG_ERROR(bad value ${enableval} for --disable-v4l) ;;
++ esac],[v4l=yes])
++
++if test "$v4l" = "yes" ; then
+ dnl check for video4linux headers
+ AC_CHECK_HEADERS(linux/videodev.h linux/videodev2.h)
+ if test "${ac_cv_header_linux_videodev_h}" = "yes" || \
+@@ -599,8 +608,6 @@
+ found_v4l=no
+ fi
+
+-AM_CONDITIONAL(BUILD_V4L, test x$found_v4l = xyes )
+-
+ AC_ARG_ENABLE(libv4l,
+ [ --disable-libv4l Disable usage of libv4l, really discouraged],
+ [case "${enableval}" in
+@@ -632,6 +639,10 @@
+ ])
+ fi
+ fi
++fi
++
++AM_CONDITIONAL(BUILD_V4L, test x$found_v4l = xyes )
++
+
+ dnl ##################################################
+ dnl # Check for doxygen
+
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.7.3-videoenc_282.patch b/media-libs/mediastreamer/files/mediastreamer-2.7.3-videoenc_282.patch
new file mode 100644
index 000000000000..66d055ede084
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.7.3-videoenc_282.patch
@@ -0,0 +1,130 @@
+Update videoenc.c to the 2.8.2 version. Fixes some but not all problems with
+ffmpeg.
+
+
+--- mediastreamer-2.7.3/src/videoenc.c 2010-12-17 05:59:50.000000000 -0300
++++ mediastreamer-2.8.2/src/videoenc.c 2012-02-17 06:16:20.000000000 -0300
+@@ -164,6 +164,7 @@
+ }else{
+ ms_warning("unsupported video size %s",tmp);
+ ret=FALSE;
++ goto end;
+ }
+ divider=atoi(equal+1);
+ if (divider!=0){
+@@ -174,6 +175,8 @@
+ ret=FALSE;
+ }
+ }else ret=FALSE;
++
++end:
+ ms_free(tmp);
+ return ret;
+ }
+@@ -231,11 +234,7 @@
+
+ static void prepare(EncState *s){
+ AVCodecContext *c=&s->av_context;
+-#ifdef ANDROID
+ const int max_br_vbv=128000;
+-#else
+- const int max_br_vbv=256000;
+-#endif
+
+ avcodec_get_context_defaults(c);
+ if (s->codec==CODEC_ID_MJPEG)
+@@ -315,13 +314,6 @@
+ static void prepare_mpeg4(EncState *s){
+ AVCodecContext *c=&s->av_context;
+ c->max_b_frames=0; /*don't use b frames*/
+- c->flags|=CODEC_FLAG_AC_PRED;
+- c->flags|=CODEC_FLAG_H263P_UMV;
+- /*c->flags|=CODEC_FLAG_QPEL;*/ /*don't enable this one: this forces profile_level to advanced simple profile */
+- c->flags|=CODEC_FLAG_4MV;
+- c->flags|=CODEC_FLAG_GMC;
+- c->flags|=CODEC_FLAG_LOOP_FILTER;
+- c->flags|=CODEC_FLAG_H263P_SLICE_STRUCT;
+ }
+
+ static void enc_uninit(MSFilter *f){
+@@ -681,7 +673,7 @@
+ uint8_t *pbuf_ptr=full_frame->b_rptr;
+ uint8_t *buf_end=full_frame->b_wptr;
+
+- ms_message("image size: %i)", buf_end-pbuf_ptr);
++ ms_message("image size: %li)", (long)(buf_end-pbuf_ptr));
+
+ *lqt=NULL;
+ *cqt=NULL;
+@@ -689,7 +681,7 @@
+ err = find_marker(&pbuf_ptr, buf_end);
+ while (err!=-1)
+ {
+- ms_message("marker found: %x (offset from beginning%i)", err, pbuf_ptr-full_frame->b_rptr);
++ ms_message("marker found: %x (offset from beginning %li)", err, (long)(pbuf_ptr-full_frame->b_rptr));
+ if (err==0xdb)
+ {
+ /* copy DQT table */
+@@ -772,10 +764,12 @@
+ int error;
+ mblk_t *comp_buf=s->comp_buf;
+ int comp_buf_sz=comp_buf->b_datap->db_lim-comp_buf->b_datap->db_base;
++ YuvBuf yuv;
+
++ ms_yuv_buf_init_from_mblk(&yuv, inm);
+ /* convert image if necessary */
+ avcodec_get_frame_defaults(&pict);
+- avpicture_fill((AVPicture*)&pict,(uint8_t*)inm->b_rptr,c->pix_fmt,c->width,c->height);
++ avpicture_fill((AVPicture*)&pict,yuv.planes[0],c->pix_fmt,c->width,c->height);
+
+ /* timestamp used by ffmpeg, unset here */
+ pict.pts=AV_NOPTS_VALUE;
+@@ -796,7 +790,9 @@
+ comp_buf->b_wptr+=4;
+ comp_buf_sz-=4;
+ }
++
+ error=avcodec_encode_video(c, (uint8_t*)comp_buf->b_wptr,comp_buf_sz, &pict);
++
+ if (error<=0) ms_warning("ms_AVencoder_process: error %i.",error);
+ else{
+ s->framenum++;
+@@ -837,6 +833,14 @@
+ EncState *s=(EncState*)f->data;
+ bool_t snow=s->codec==CODEC_ID_SNOW;
+ s->maxbr=*(int*)arg;
++ if (s->av_context.codec!=NULL){
++ /*when we are processing, apply new settings immediately*/
++ ms_filter_lock(f);
++ enc_postprocess(f);
++ enc_preprocess(f);
++ ms_filter_unlock(f);
++ return 0;
++ }
+ if (s->maxbr>=1024000 && s->codec!=CODEC_ID_H263P){
+ s->vsize.width = MS_VIDEO_SIZE_SVGA_W;
+ s->vsize.height = MS_VIDEO_SIZE_SVGA_H;
+@@ -854,7 +858,7 @@
+ s->vsize.height=MS_VIDEO_SIZE_CIF_H;
+ s->fps=17;
+ s->qmin=3;
+- }else if (s->maxbr>=170000){
++ }else if (s->maxbr>=170000 && s->codec!=CODEC_ID_H263P && s->codec!=CODEC_ID_H263){
+ s->vsize.width=MS_VIDEO_SIZE_QVGA_W;
+ s->vsize.height=MS_VIDEO_SIZE_QVGA_H;
+ s->fps=15;
+@@ -875,14 +879,6 @@
+ s->fps=5;
+ s->qmin=5;
+ }
+-
+- if (s->av_context.codec!=NULL){
+- /*apply new settings dynamically*/
+- ms_filter_lock(f);
+- enc_postprocess(f);
+- enc_preprocess(f);
+- ms_filter_unlock(f);
+- }
+ return 0;
+ }
+
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.8.2-autopoint.patch b/media-libs/mediastreamer/files/mediastreamer-2.8.2-autopoint.patch
new file mode 100644
index 000000000000..5704234af060
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.8.2-autopoint.patch
@@ -0,0 +1,17 @@
+--- mediastreamer-2.8.2/configure.ac.orig 2012-06-01 16:31:34.000000000 +0400
++++ mediastreamer-2.8.2/configure.ac 2012-06-01 16:36:08.586809086 +0400
+@@ -191,13 +191,13 @@
+ if test "$mingw_found" != "yes" ; then
+ dnl gettext macro does not work properly under mingw. And we want to use the one provided by GTK.
+ AM_GNU_GETTEXT([external])
+- AM_GNU_GETTEXT_VERSION([0.18])
+ LIBS="$LIBS $LIBINTL"
+ else
+ AC_DEFINE(ENABLE_NLS,1,[Tells whether localisation is possible])
+ AC_DEFINE(HAVE_GETTEXT,1,[Tells wheter localisation is possible])
+ LIBS="$LIBS -lintl"
+ fi
++AM_GNU_GETTEXT_VERSION([0.18])
+
+ AM_CONDITIONAL(BUILD_MACOSX, test x$macosx_found = xyes)
+ AM_CONDITIONAL(BUILD_IOS, test x$ios_found = xyes)
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.8.2-ffmpeg-1.0.patch b/media-libs/mediastreamer/files/mediastreamer-2.8.2-ffmpeg-1.0.patch
new file mode 100644
index 000000000000..293e6e78dcab
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.8.2-ffmpeg-1.0.patch
@@ -0,0 +1,59 @@
+https://bugs.gentoo.org/show_bug.cgi?id=445168
+
+commit f586917ea4d66f9ba8910f0967a8830e54d50784
+Author: Yann Diorcet <yann.diorcet@belledonne-communications.com>
+Date: Tue Jun 5 11:07:48 2012 +0200
+
+ Fixes for new versions of ffmpeg
+
+diff --git a/src/h264dec.c b/src/h264dec.c
+index c4a84ee..5229b5e 100644
+--- a/src/h264dec.c
++++ b/src/h264dec.c
+@@ -45,7 +45,9 @@ typedef struct _DecData{
+ static void ffmpeg_init(){
+ static bool_t done=FALSE;
+ if (!done){
++#ifdef FF_API_AVCODEC_INIT
+ avcodec_init();
++#endif
+ avcodec_register_all();
+ done=TRUE;
+ }
+diff --git a/src/videoenc.c b/src/videoenc.c
+index 21d016f..fb35760 100644
+--- a/src/videoenc.c
++++ b/src/videoenc.c
+@@ -39,6 +39,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ static bool_t avcodec_initialized=FALSE;
+
++#ifndef FF_I_TYPE
++#define FF_I_TYPE AV_PICTURE_TYPE_I
++#endif
++
+ #ifdef ENABLE_LOG_FFMPEG
+
+ void ms_ffmpeg_log_callback(void* ptr, int level, const char* fmt, va_list vl)
+@@ -53,7 +57,9 @@ void ms_ffmpeg_log_callback(void* ptr, int level, const char* fmt, va_list vl)
+
+ void ms_ffmpeg_check_init(){
+ if(!avcodec_initialized){
++#ifdef FF_API_AVCODEC_INIT
+ avcodec_init();
++#endif
+ avcodec_register_all();
+ avcodec_initialized=TRUE;
+ #ifdef ENABLE_LOG_FFMPEG
+@@ -300,10 +306,10 @@ static void prepare_h263(EncState *s){
+ if (s->profile==0){
+ s->codec=CODEC_ID_H263;
+ }else{
++ /*
+ c->flags|=CODEC_FLAG_H263P_UMV;
+ c->flags|=CODEC_FLAG_AC_PRED;
+ c->flags|=CODEC_FLAG_H263P_SLICE_STRUCT;
+- /*
+ c->flags|=CODEC_FLAG_OBMC;
+ c->flags|=CODEC_FLAG_AC_PRED;
+ */
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.8.2-libav9.patch b/media-libs/mediastreamer/files/mediastreamer-2.8.2-libav9.patch
new file mode 100644
index 000000000000..0b335e282cfd
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.8.2-libav9.patch
@@ -0,0 +1,115 @@
+diff -urb mediastreamer-2.8.2.old/src/h264dec.c mediastreamer-2.8.2/src/h264dec.c
+--- mediastreamer-2.8.2.old/src/h264dec.c 2013-06-22 19:13:24.649838347 +0200
++++ mediastreamer-2.8.2/src/h264dec.c 2013-06-22 19:20:52.044822431 +0200
+@@ -55,10 +55,10 @@
+ int error;
+ codec=avcodec_find_decoder(CODEC_ID_H264);
+ if (codec==NULL) ms_fatal("Could not find H264 decoder in ffmpeg.");
+- avcodec_get_context_defaults(&d->av_context);
+- error=avcodec_open(&d->av_context,codec);
++ avcodec_get_context_defaults3(&d->av_context, NULL);
++ error=avcodec_open2(&d->av_context,codec, NULL);
+ if (error!=0){
+- ms_fatal("avcodec_open() failed.");
++ ms_fatal("avcodec_open2() failed.");
+ }
+ }
+
+diff -urb mediastreamer-2.8.2.old/src/jpegwriter.c mediastreamer-2.8.2/src/jpegwriter.c
+--- mediastreamer-2.8.2.old/src/jpegwriter.c 2013-06-22 19:13:24.649838347 +0200
++++ mediastreamer-2.8.2/src/jpegwriter.c 2013-06-22 19:17:57.087828655 +0200
+@@ -90,7 +90,7 @@
+ mblk_t *jpegm;
+ struct SwsContext *sws_ctx;
+
+- AVCodecContext *avctx=avcodec_alloc_context();
++ AVCodecContext *avctx=avcodec_alloc_context3(NULL);
+
+ avctx->width=yuvbuf.w;
+ avctx->height=yuvbuf.h;
+@@ -98,9 +98,9 @@
+ avctx->time_base.den =1;
+ avctx->pix_fmt=PIX_FMT_YUVJ420P;
+
+- error=avcodec_open(avctx,s->codec);
++ error=avcodec_open2(avctx,s->codec,NULL);
+ if (error!=0) {
+- ms_error("avcodec_open() failed: %i",error);
++ ms_error("avcodec_open2() failed: %i",error);
+ cleanup(s,NULL);
+ av_free(avctx);
+ return;
+diff -urb mediastreamer-2.8.2.old/src/nowebcam.c mediastreamer-2.8.2/src/nowebcam.c
+--- mediastreamer-2.8.2.old/src/nowebcam.c 2013-06-22 19:13:24.652838347 +0200
++++ mediastreamer-2.8.2/src/nowebcam.c 2013-06-22 19:20:43.198822745 +0200
+@@ -68,9 +68,9 @@
+ return NULL;
+ }
+
+- avcodec_get_context_defaults(&av_context);
+- if (avcodec_open(&av_context,codec)<0){
+- ms_error("jpeg2yuv: avcodec_open failed");
++ avcodec_get_context_defaults3(&av_context, NULL);
++ if (avcodec_open2(&av_context,codec,NULL)<0){
++ ms_error("jpeg2yuv: avcodec_open2 failed");
+ return NULL;
+ }
+ av_init_packet(&pkt);
+diff -urb mediastreamer-2.8.2.old/src/videodec.c mediastreamer-2.8.2/src/videodec.c
+--- mediastreamer-2.8.2.old/src/videodec.c 2013-06-22 19:13:24.654838347 +0200
++++ mediastreamer-2.8.2/src/videodec.c 2013-06-22 19:28:58.436805127 +0200
+@@ -52,7 +52,7 @@
+ DecState *s=(DecState *)ms_new0(DecState,1);
+ ms_ffmpeg_check_init();
+
+- avcodec_get_context_defaults(&s->av_context);
++ avcodec_get_context_defaults3(&s->av_context, NULL);
+ s->av_codec=NULL;
+ s->codec=cid;
+ s->input=NULL;
+@@ -133,8 +133,8 @@
+ if (s->av_context.codec==NULL){
+ /* we must know picture size before initializing snow decoder*/
+ if (s->codec!=CODEC_ID_SNOW){
+- error=avcodec_open(&s->av_context, s->av_codec);
+- if (error!=0) ms_error("avcodec_open() failed: %i",error);
++ 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){
+ s->av_context.extradata=s->dci;
+ s->av_context.extradata_size=s->dci_size;
+@@ -223,8 +223,8 @@
+ int error;
+ s->av_context.width=h>>16;
+ s->av_context.height=h&0xffff;
+- error=avcodec_open(&s->av_context, s->av_codec);
+- if (error!=0) ms_error("avcodec_open() failed for snow: %i",error);
++ error=avcodec_open2(&s->av_context, s->av_codec, NULL);
++ if (error!=0) ms_error("avcodec_open2() failed for snow: %i",error);
+ else {
+ s->snow_initialized=TRUE;
+ ms_message("Snow decoder initialized,size=%ix%i",
+diff -urb mediastreamer-2.8.2.old/src/videoenc.c mediastreamer-2.8.2/src/videoenc.c
+--- mediastreamer-2.8.2.old/src/videoenc.c 2013-06-22 19:13:24.654838347 +0200
++++ mediastreamer-2.8.2/src/videoenc.c 2013-06-22 19:20:19.732823580 +0200
+@@ -236,7 +236,7 @@
+ AVCodecContext *c=&s->av_context;
+ const int max_br_vbv=128000;
+
+- avcodec_get_context_defaults(c);
++ avcodec_get_context_defaults3(c, NULL);
+ if (s->codec==CODEC_ID_MJPEG)
+ {
+ ms_message("Codec bitrate set to %i",c->bit_rate);
+@@ -342,9 +342,9 @@
+ ms_error("could not find encoder for codec id %i",s->codec);
+ return;
+ }
+- error=avcodec_open(&s->av_context, s->av_codec);
++ error=avcodec_open2(&s->av_context, s->av_codec, NULL);
+ if (error!=0) {
+- ms_error("avcodec_open() failed: %i",error);
++ ms_error("avcodec_open2() failed: %i",error);
+ return;
+ }
+ video_starter_init(&s->starter);
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.8.2-v4l-automagic.patch b/media-libs/mediastreamer/files/mediastreamer-2.8.2-v4l-automagic.patch
new file mode 100644
index 000000000000..f35660ea8c0c
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.8.2-v4l-automagic.patch
@@ -0,0 +1,54 @@
+From 93362c849d4a3ba1748d033369f76e93557f1c06 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Thu, 22 Nov 2012 15:02:21 +0100
+Subject: [PATCH] Support disabling V4L support completely.
+
+---
+ mediastreamer-2.8.2/configure.ac | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/mediastreamer-2.8.2/configure.ac b/mediastreamer-2.8.2/configure.ac
+index d5be955..86703a0 100644
+--- a/mediastreamer-2.8.2/configure.ac
++++ b/mediastreamer-2.8.2/configure.ac
+@@ -624,6 +624,16 @@ PACKAGE_DATA_DIR="$prefix/share"
+ AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${package_prefix}/share" ,[path of data])
+ AC_SUBST(PACKAGE_DATA_DIR)
+
++AC_ARG_ENABLE(v4l,
++ [ --disable-v4l Disable usage of v4l],
++ [case "${enableval}" in
++ yes) v4l=yes ;;
++ no) v4l=no ;;
++ *) AC_MSG_ERROR(bad value ${enableval} for --disable-v4l) ;;
++ esac],[v4l=yes])
++
++if test "$v4l" = "yes" ; then
++
+ dnl check for video4linux headers
+ AC_CHECK_HEADERS(linux/videodev.h linux/videodev2.h)
+ if test "${ac_cv_header_linux_videodev_h}" = "yes" ; then
+@@ -637,9 +647,6 @@ else
+ found_v4l2=no
+ fi
+
+-AM_CONDITIONAL(BUILD_V4L1, test x$found_v4l1 = xyes )
+-AM_CONDITIONAL(BUILD_V4L2, test x$found_v4l2 = xyes )
+-
+ AC_ARG_ENABLE(libv4l1,
+ [ --disable-libv4l1 Disable usage of libv4l1, really discouraged],
+ [case "${enableval}" in
+@@ -680,6 +687,10 @@ this check.
+ fi
+ fi
+
++fi
++
++AM_CONDITIONAL(BUILD_V4L1, test x$found_v4l1 = xyes )
++AM_CONDITIONAL(BUILD_V4L2, test x$found_v4l2 = xyes )
+
+ AC_ARG_ENABLE(tests,
+ [ --enable-tests Disable compilation of tests],
+--
+1.8.0
+
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.9.0-libav9.patch b/media-libs/mediastreamer/files/mediastreamer-2.9.0-libav9.patch
new file mode 100644
index 000000000000..078f360b3382
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.9.0-libav9.patch
@@ -0,0 +1,120 @@
+diff --git a/src/videofilters/h264dec.c b/src/videofilters/h264dec.c
+index 38881c1..f306723 100644
+--- a/src/videofilters/h264dec.c
++++ b/src/videofilters/h264dec.c
+@@ -58,10 +58,10 @@ static void dec_open(DecData *d){
+ int error;
+ codec=avcodec_find_decoder(CODEC_ID_H264);
+ if (codec==NULL) ms_fatal("Could not find H264 decoder in ffmpeg.");
+- avcodec_get_context_defaults(&d->av_context);
+- error=avcodec_open(&d->av_context,codec);
++ avcodec_get_context_defaults3(&d->av_context, NULL);
++ error=avcodec_open2(&d->av_context,codec, NULL);
+ if (error!=0){
+- ms_fatal("avcodec_open() failed.");
++ ms_fatal("avcodec_open2() failed.");
+ }
+ }
+
+diff --git a/src/videofilters/jpegwriter.c b/src/videofilters/jpegwriter.c
+index 891f618..96f5d7f 100644
+--- a/src/videofilters/jpegwriter.c
++++ b/src/videofilters/jpegwriter.c
+@@ -90,7 +90,7 @@ static void jpg_process(MSFilter *f){
+ mblk_t *jpegm;
+ struct SwsContext *sws_ctx;
+
+- AVCodecContext *avctx=avcodec_alloc_context();
++ AVCodecContext *avctx=avcodec_alloc_context3(NULL);
+
+ avctx->width=yuvbuf.w;
+ avctx->height=yuvbuf.h;
+@@ -98,9 +98,9 @@ static void jpg_process(MSFilter *f){
+ avctx->time_base.den =1;
+ avctx->pix_fmt=PIX_FMT_YUVJ420P;
+
+- error=avcodec_open(avctx,s->codec);
++ error=avcodec_open2(avctx,s->codec,NULL);
+ if (error!=0) {
+- ms_error("avcodec_open() failed: %i",error);
++ ms_error("avcodec_open2() failed: %i",error);
+ cleanup(s,NULL);
+ av_free(avctx);
+ return;
+diff --git a/src/videofilters/nowebcam.c b/src/videofilters/nowebcam.c
+index 60e3853..329c453 100644
+--- a/src/videofilters/nowebcam.c
++++ b/src/videofilters/nowebcam.c
+@@ -68,9 +68,9 @@ static mblk_t *jpeg2yuv(uint8_t *jpgbuf, int bufsize, MSVideoSize *reqsize){
+ return NULL;
+ }
+
+- avcodec_get_context_defaults(&av_context);
+- if (avcodec_open(&av_context,codec)<0){
+- ms_error("jpeg2yuv: avcodec_open failed");
++ avcodec_get_context_defaults3(&av_context, NULL);
++ if (avcodec_open2(&av_context,codec,NULL)<0){
++ ms_error("jpeg2yuv: avcodec_open2 failed");
+ return NULL;
+ }
+ av_init_packet(&pkt);
+diff --git a/src/videofilters/videodec.c b/src/videofilters/videodec.c
+index 494debf..c52e207 100644
+--- a/src/videofilters/videodec.c
++++ b/src/videofilters/videodec.c
+@@ -53,7 +53,7 @@ static void dec_init(MSFilter *f, enum CodecID cid){
+ DecState *s=(DecState *)ms_new0(DecState,1);
+ ms_ffmpeg_check_init();
+
+- avcodec_get_context_defaults(&s->av_context);
++ avcodec_get_context_defaults3(&s->av_context, NULL);
+ s->av_codec=NULL;
+ s->codec=cid;
+ s->input=NULL;
+@@ -135,8 +135,8 @@ static void dec_preprocess(MSFilter *f){
+ if (s->av_context.codec==NULL){
+ /* we must know picture size before initializing snow decoder*/
+ if (s->codec!=CODEC_ID_SNOW){
+- error=avcodec_open(&s->av_context, s->av_codec);
+- if (error!=0) ms_error("avcodec_open() failed: %i",error);
++ 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){
+ s->av_context.extradata=s->dci;
+ s->av_context.extradata_size=s->dci_size;
+@@ -225,8 +225,8 @@ static mblk_t * parse_snow_header(DecState *s,mblk_t *inm){
+ int error;
+ s->av_context.width=h>>16;
+ s->av_context.height=h&0xffff;
+- error=avcodec_open(&s->av_context, s->av_codec);
+- if (error!=0) ms_error("avcodec_open() failed for snow: %i",error);
++ error=avcodec_open2(&s->av_context, s->av_codec, NULL);
++ if (error!=0) ms_error("avcodec_open2() failed for snow: %i",error);
+ else {
+ s->snow_initialized=TRUE;
+ ms_message("Snow decoder initialized,size=%ix%i",
+diff --git a/src/videofilters/videoenc.c b/src/videofilters/videoenc.c
+index da35592..09dcc9d 100644
+--- a/src/videofilters/videoenc.c
++++ b/src/videofilters/videoenc.c
+@@ -242,7 +242,7 @@ static void prepare(EncState *s){
+ AVCodecContext *c=&s->av_context;
+ const int max_br_vbv=128000;
+
+- avcodec_get_context_defaults(c);
++ avcodec_get_context_defaults3(c, NULL);
+ if (s->codec==CODEC_ID_MJPEG)
+ {
+ ms_message("Codec bitrate set to %i",c->bit_rate);
+@@ -348,9 +348,9 @@ static void enc_preprocess(MSFilter *f){
+ ms_error("could not find encoder for codec id %i",s->codec);
+ return;
+ }
+- error=avcodec_open(&s->av_context, s->av_codec);
++ error=avcodec_open2(&s->av_context, s->av_codec, NULL);
+ if (error!=0) {
+- ms_error("avcodec_open() failed: %i",error);
++ ms_error("avcodec_open2() failed: %i",error);
+ return;
+ }
+ video_starter_init(&s->starter);
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.9.0-tests.patch b/media-libs/mediastreamer/files/mediastreamer-2.9.0-tests.patch
new file mode 100644
index 000000000000..3bcb8bd36618
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.9.0-tests.patch
@@ -0,0 +1,26 @@
+From d9f448013bd5ea92ce42c99ef3338932ec694b62 Mon Sep 17 00:00:00 2001
+From: hasufell <hasufell@gentoo.org>
+Date: Wed, 9 Oct 2013 21:18:28 +0200
+Subject: [PATCH] fix tests
+
+---
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 4b923a9..4aec221 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -873,6 +873,9 @@ case "$target_os" in
+ #hack for macport
+ CUNIT_LIBS+=" -lncurses"
+ ;;
++ *linux*)
++ CUNIT_LIBS+=" -lncurses"
++ ;;
+ *mingw*)
+ CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0501"
+ LIBS="$LIBS -lws2_32 -liphlpapi"
+--
+1.8.3.2
+
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.9.0-underlinking.patch b/media-libs/mediastreamer/files/mediastreamer-2.9.0-underlinking.patch
new file mode 100644
index 000000000000..19d6af803c2c
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.9.0-underlinking.patch
@@ -0,0 +1,57 @@
+From 497ad9c27385c02f4f038b6e787ada9c7b6f8373 Mon Sep 17 00:00:00 2001
+From: hasufell <hasufell@gentoo.org>
+Date: Wed, 9 Oct 2013 18:24:28 +0200
+Subject: [PATCH] fix underlinking
+
+---
+ configure.ac | 20 ++++++++++++++++++++
+ src/Makefile.am | 2 +-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9f402bd..4b923a9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -893,6 +893,26 @@ fi
+
+ AM_CONDITIONAL(BUILD_TESTS,test x$found_cunit = xyes)
+
++dnl Check for clock_gettime, in libc for FreeBSD, in rt for linux,
++dnl in rt for Solaris 7, in posix4 for Solaris 2.5.1
++LIB_CLOCK_GETTIME=
++clk_saved_libs=$LIBS
++AC_SEARCH_LIBS([clock_gettime], [rt posix4],
++ [test "$ac_cv_search_clock_gettime" = "none required" ||
++ LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
++AC_SUBST([LIB_CLOCK_GETTIME])
++
++AC_MSG_CHECKING([for working clock_gettime])
++AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]],
++ [[clock_gettime(CLOCK_REALTIME, 0);]])], [gnupg_cv_clock_gettime=yes], [gnupg_cv_clock_gettime=no])
++AC_MSG_RESULT($gnupg_cv_clock_gettime)
++
++if test x"$gnupg_cv_clock_gettime" = xyes; then
++ AC_DEFINE([HAVE_CLOCK_GETTIME], 1,
++ [Define to 1 if you have the `clock_gettime' function.])
++fi
++LIBS=$clk_saved_libs
++
+
+ dnl ##################################################
+ dnl # Check for doxygen
+diff --git a/src/Makefile.am b/src/Makefile.am
+index a315e92..a5e144c 100755
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -266,7 +266,7 @@ voipdescs.h: Makefile $(libmediastreamer_voip_la_SOURCES)
+ awk 'BEGIN { print("MSFilterDesc * ms_voip_filter_descs[]={") } { printf("&%s,\n",$$1) } END{ print("NULL\n};\n") } ' $$builddir/voipdescs.txt >> $$builddir/$@
+
+
+-libmediastreamer_base_la_LIBADD= $(ORTP_LIBS)
++libmediastreamer_base_la_LIBADD= $(ORTP_LIBS) @LIB_CLOCK_GETTIME@
+ libmediastreamer_base_la_LDFLAGS= -no-undefined -version-info $(LIBMEDIASTREAMER_SO_VERSION)
+
+ if !BUILD_WIN32
+--
+1.8.3.2
+
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.9.0-v4l-automagic.patch b/media-libs/mediastreamer/files/mediastreamer-2.9.0-v4l-automagic.patch
new file mode 100644
index 000000000000..c590aef3b713
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.9.0-v4l-automagic.patch
@@ -0,0 +1,55 @@
+From b99ddff6f322c8b466f3cdfd71b0d629cea33aac Mon Sep 17 00:00:00 2001
+From: hasufell <hasufell@gentoo.org>
+Date: Wed, 9 Oct 2013 18:12:46 +0200
+Subject: [PATCH] Support disabling V4L support completely
+
+---
+ configure.ac | 18 +++++++++++++++---
+ 1 file changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 94b6f18..9f402bd 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -746,6 +746,16 @@ PACKAGE_DATA_DIR="$prefix/share"
+ AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${package_prefix}/share" ,[path of data])
+ AC_SUBST(PACKAGE_DATA_DIR)
+
++AC_ARG_ENABLE(v4l,
++ [ --disable-v4l Disable usage of v4l],
++ [case "${enableval}" in
++ yes) v4l=yes ;;
++ no) v4l=no ;;
++ *) AC_MSG_ERROR(bad value ${enableval} for --disable-v4l) ;;
++ esac],[v4l=yes])
++
++if test "$v4l" = "yes" ; then
++
+ dnl check for video4linux headers
+ AC_CHECK_HEADERS(linux/videodev.h linux/videodev2.h)
+ if test "${ac_cv_header_linux_videodev_h}" = "yes" ; then
+@@ -759,9 +769,6 @@ else
+ found_v4l2=no
+ fi
+
+-AM_CONDITIONAL(BUILD_V4L1, test x$found_v4l1 = xyes )
+-AM_CONDITIONAL(BUILD_V4L2, test x$found_v4l2 = xyes )
+-
+ AC_ARG_ENABLE(libv4l1,
+ [AS_HELP_STRING([--disable-libv4l1], [Disable usage of libv4l1, really discouraged])],
+ [case "${enableval}" in
+@@ -805,6 +812,11 @@ this check.
+ fi
+ fi
+
++fi
++
++AM_CONDITIONAL(BUILD_V4L1, test x$found_v4l1 = xyes )
++AM_CONDITIONAL(BUILD_V4L2, test x$found_v4l2 = xyes )
++
+
+ AC_PATH_PROG(PCAP,pcap-config,false)
+ AM_CONDITIONAL(HAVE_PCAP, test $PCAP != false)
+--
+1.8.3.2
+
diff --git a/media-libs/mediastreamer/files/mediastreamer-2.9.0-xxd.patch b/media-libs/mediastreamer/files/mediastreamer-2.9.0-xxd.patch
new file mode 100644
index 000000000000..2337e1343002
--- /dev/null
+++ b/media-libs/mediastreamer/files/mediastreamer-2.9.0-xxd.patch
@@ -0,0 +1,18 @@
+From: Julian Ospald <hasufell@gentoo.org>
+Date: Fri Oct 11 11:37:19 UTC 2013
+Subject: avoid dependency on vim-core
+
+--- mediastreamer-2.9.0/src/Makefile.am
++++ mediastreamer-2.9.0/src/Makefile.am
+@@ -385,9 +385,9 @@
+ yuv2rgb.fs.h: yuv2rgb.fs
+ builddir=`pwd` && \
+ cd $(top_srcdir)/src && \
+- xxd -i yuv2rgb.fs | sed s/}\;/,0x00}\;/ > $$builddir/yuv2rgb.fs.h
++ xxdi.pl yuv2rgb.fs | sed s/}\;/0x00}\;/ > $$builddir/yuv2rgb.fs.h
+
+ yuv2rgb.vs.h: yuv2rgb.vs
+ builddir=`pwd` && \
+ cd $(top_srcdir)/src && \
+- xxd -i yuv2rgb.vs | sed s/}\;/,0x00}\;/ > $$builddir/yuv2rgb.vs.h
++ xxdi.pl yuv2rgb.vs | sed s/}\;/0x00}\;/ > $$builddir/yuv2rgb.vs.h