[Mlt-devel] mlt/src/modules/avformat Makefile, 1.23, 1.24 configure, 1.22, 1.23 consumer_avformat.c
Brought to you by:
ddennedy,
lilo_booter
From: Dan D. <dde...@us...> - 2007-03-04 05:32:19
|
Update of /cvsroot/mlt/mlt/src/modules/avformat In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv25005/src/modules/avformat Modified Files: Makefile configure consumer_avformat.c filter_avcolour_space.c producer_avformat.c Log Message: add support for ffmpeg libswscale Index: producer_avformat.c =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/avformat/producer_avformat.c,v retrieving revision 1.62 retrieving revision 1.63 diff -u -d -r1.62 -r1.63 --- producer_avformat.c 31 Dec 2006 16:06:34 -0000 1.62 +++ producer_avformat.c 4 Mar 2007 05:32:11 -0000 1.63 @@ -26,6 +26,9 @@ // ffmpeg Header files #include <avformat.h> +#ifdef SWSCALE +#include <swscale.h> +#endif // System header files #include <stdlib.h> @@ -374,6 +377,43 @@ static inline void convert_image( AVFrame *frame, uint8_t *buffer, int pix_fmt, mlt_image_format format, int width, int height ) { +#ifdef SWSCALE + if ( format == mlt_image_yuv420p ) + { + struct SwsContext *context = sws_getContext( width, height, pix_fmt, + width, height, PIX_FMT_YUV420P, SWS_FAST_BILINEAR, NULL, NULL, NULL); + AVPicture output; + output.data[0] = buffer; + output.data[1] = buffer + width * height; + output.data[2] = buffer + ( 3 * width * height ) / 2; + output.linesize[0] = width; + output.linesize[1] = width >> 1; + output.linesize[2] = width >> 1; + sws_scale( context, frame->data, frame->linesize, 0, height, + output.data, output.linesize); + sws_freeContext( context ); + } + else if ( format == mlt_image_rgb24 ) + { + struct SwsContext *context = sws_getContext( width, height, pix_fmt, + width, height, PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL); + AVPicture output; + avpicture_fill( &output, buffer, PIX_FMT_RGB24, width, height ); + sws_scale( context, frame->data, frame->linesize, 0, height, + output.data, output.linesize); + sws_freeContext( context ); + } + else + { + struct SwsContext *context = sws_getContext( width, height, pix_fmt, + width, height, PIX_FMT_YUYV422, SWS_FAST_BILINEAR, NULL, NULL, NULL); + AVPicture output; + avpicture_fill( &output, buffer, PIX_FMT_YUYV422, width, height ); + sws_scale( context, frame->data, frame->linesize, 0, height, + output.data, output.linesize); + sws_freeContext( context ); + } +#else if ( format == mlt_image_yuv420p ) { AVPicture pict; @@ -397,6 +437,7 @@ avpicture_fill( &output, buffer, PIX_FMT_YUV422, width, height ); img_convert( &output, PIX_FMT_YUV422, (AVPicture *)frame, pix_fmt, width, height ); } +#endif } /** Get an image from a frame. Index: Makefile =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/avformat/Makefile,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- Makefile 5 Dec 2005 11:35:53 -0000 1.23 +++ Makefile 4 Mar 2007 05:32:11 -0000 1.24 @@ -19,6 +19,11 @@ LDFLAGS+=-lavformat$(AVFORMAT_SUFFIX) -lavcodec$(AVFORMAT_SUFFIX) -lavutil$(AVFORMAT_SUFFIX) $(EXTRA_LIBS) -lmlt +ifdef MMX_FLAGS + CFLAGS+=-DSWSCALE + LDFLAGS+=-lswscale$(AVFORMAT_SUFFIX) +endif + SRCS := $(OBJS:.o=.c) all: $(TARGET) Index: filter_avcolour_space.c =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/avformat/filter_avcolour_space.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- filter_avcolour_space.c 4 May 2006 20:06:48 -0000 1.8 +++ filter_avcolour_space.c 4 Mar 2007 05:32:11 -0000 1.9 @@ -24,6 +24,9 @@ // ffmpeg Header files #include <avformat.h> +#ifdef SWSCALE +#include <swscale.h> +#endif #include <stdio.h> #include <stdlib.h> @@ -67,9 +70,17 @@ { AVPicture input; AVPicture output; - avpicture_fill( &output, out, out_fmt, width, height ); avpicture_fill( &input, in, in_fmt, width, height ); + avpicture_fill( &output, out, out_fmt, width, height ); +#ifdef SWSCALE + struct SwsContext *context = sws_getContext( width, height, in_fmt, + width, height, out_fmt, SWS_FAST_BILINEAR, NULL, NULL, NULL); + sws_scale( context, input.data, input.linesize, 0, height, + output.data, output.linesize); + sws_freeContext( context ); +#else img_convert( &output, out_fmt, &input, in_fmt, width, height ); +#endif } /** Do it :-). Index: configure =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/avformat/configure,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- configure 9 Aug 2006 04:52:26 -0000 1.22 +++ configure 4 Mar 2007 05:32:11 -0000 1.23 @@ -11,6 +11,7 @@ --avformat-static=path - Link against a static ffmpeg dev tree --avformat-ldextra=libs - Provide additional libs to link with --avformat-suffix=suff - Specify a custom suffix for an ffmpeg shared build + --avformat-swscale - Use ffmpeg libswcale instead of img_convert EOF @@ -44,6 +45,7 @@ export extra_libs= export svn_ffmpeg= export avformat_suffix= + export swscale=false if [ "$shared_ffmpeg" != "" -a -f "$shared_ffmpeg" ] then @@ -62,6 +64,7 @@ --avformat-svn ) svn_ffmpeg=true ;; --avformat-cvs ) svn_ffmpeg=true ;; --avformat-suffix=* ) avformat_suffix="${i#--avformat-suffix=}" ;; + --avformat-swscale ) swscale=true ;; esac done @@ -86,6 +89,7 @@ echo "LDFLAGS+=-L$static_ffmpeg/libavformat -L$static_ffmpeg/libavcodec -L$static_ffmpeg/libavutil" >> config.mak [ $targetos = "Darwin" ] && echo "LDFLAGS+=-single_module" >> config.mak + [ "$swscale" != "" ] && echo "SWSCALE=1" >> config.mak else echo "avformat: Invalid path specified: $static_ffmpeg" touch ../disable-avformat @@ -96,6 +100,7 @@ then echo "CFLAGS+=-I$shared_ffmpeg/include/ffmpeg " >> config.mak echo "LDFLAGS+=-L$shared_ffmpeg/$LIBDIR" >> config.mak + [ "$swscale" != "" ] && echo "SWSCALE=1" >> config.mak else echo "avformat: No build environment found. " echo " Try configuring mlt with --avformat-svn." Index: consumer_avformat.c =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/avformat/consumer_avformat.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -d -r1.33 -r1.34 --- consumer_avformat.c 22 Jan 2007 18:30:56 -0000 1.33 +++ consumer_avformat.c 4 Mar 2007 05:32:11 -0000 1.34 @@ -35,6 +35,9 @@ // avformat header files #include <avformat.h> +#ifdef SWSCALE +#include <swscale.h> +#endif // // This structure should be extended and made globally available in mlt @@ -939,7 +942,15 @@ } // Do the colour space conversion +#ifdef SWSCALE + struct SwsContext *context = sws_getContext( width, height, PIX_FMT_YUV422, + width, height, video_st->codec->pix_fmt, SWS_FAST_BILINEAR, NULL, NULL, NULL); + sws_scale( context, input->data, input->linesize, 0, height, + output->data, output->linesize); + sws_freeContext( context ); +#else img_convert( ( AVPicture * )output, video_st->codec->pix_fmt, ( AVPicture * )input, PIX_FMT_YUV422, width, height ); +#endif // Apply the alpha if applicable if ( video_st->codec->pix_fmt == PIX_FMT_RGBA32 ) |