00001
00002
00003
00004
00005 #include <stdlib.h>
00006 #include "filter.h"
00007 #include "frame.h"
00008
00009 static VideoFilter *
00010 new_force_template (VideoFrameType inpixfmt, VideoFrameType outpixfmt,
00011 VideoFrameType mypixfmt)
00012 {
00013 VideoFilter *filter;
00014
00015 if (inpixfmt != mypixfmt || outpixfmt != mypixfmt)
00016 return NULL;
00017
00018 filter = (VideoFilter *) malloc(sizeof(VideoFilter));
00019
00020 if (filter)
00021 {
00022 filter->filter = NULL;
00023 filter->cleanup = NULL;
00024 }
00025
00026 return filter;
00027 }
00028
00029 static VideoFilter *
00030 new_force_yv12 (VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width,
00031 int *height, char *options, int threads)
00032 {
00033 (void) width;
00034 (void) height;
00035 (void) options;
00036
00037 return new_force_template (inpixfmt, outpixfmt, FMT_YV12);
00038 }
00039
00040 static VideoFilter *
00041 new_force_yuv422p (VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width,
00042 int *height, char *options, int threads)
00043 {
00044 (void) width;
00045 (void) height;
00046 (void) options;
00047
00048 return new_force_template (inpixfmt, outpixfmt, FMT_YUV422P);
00049 }
00050
00051 static VideoFilter *
00052 new_force_rgb24 (VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width,
00053 int *height, char *options, int threads)
00054 {
00055 (void) width;
00056 (void) height;
00057 (void) options;
00058
00059 return new_force_template (inpixfmt, outpixfmt, FMT_RGB24);
00060 }
00061
00062 static VideoFilter *
00063 new_force_argb32 (VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width,
00064 int *height, char *options, int threads)
00065 {
00066 (void) width;
00067 (void) height;
00068 (void) options;
00069 (void) threads;
00070
00071 return new_force_template (inpixfmt, outpixfmt, FMT_ARGB32);
00072 }
00073
00074 static FmtConv Fmt_List_YV12[] =
00075 {
00076 { FMT_YV12, FMT_YV12 },
00077 FMT_NULL
00078 };
00079
00080 static FmtConv Fmt_List_YUV422P[] =
00081 {
00082 { FMT_YUV422P, FMT_YUV422P },
00083 FMT_NULL
00084 };
00085
00086 static FmtConv Fmt_List_RGB24[] =
00087 {
00088 { FMT_RGB24, FMT_RGB24 },
00089 FMT_NULL
00090 };
00091
00092 static FmtConv Fmt_List_ARGB32[] =
00093 {
00094 { FMT_ARGB32, FMT_ARGB32 },
00095 FMT_NULL
00096 };
00097
00098 ConstFilterInfo filter_table[] =
00099 {
00100 {
00101 filter_init: &new_force_yv12,
00102 name: "forceyv12",
00103 descript: "forces use of YV12 video format",
00104 formats: Fmt_List_YV12,
00105 libname: NULL
00106 },
00107 {
00108 filter_init: &new_force_yuv422p,
00109 name: "forceyuv422p",
00110 descript: "forces use of YUV422P video format",
00111 formats: Fmt_List_YUV422P,
00112 libname: NULL
00113 },
00114 {
00115 filter_init: &new_force_rgb24,
00116 name: "forcergb24",
00117 descript: "forces use of RGB24 video format",
00118 formats: Fmt_List_RGB24,
00119 libname: NULL
00120 },
00121 {
00122 filter_init: &new_force_argb32,
00123 name: "forceargb32",
00124 descript: "forces use of ARGB32 video format",
00125 formats: Fmt_List_ARGB32,
00126 libname: NULL
00127 },
00128 FILT_NULL
00129 };