Mercurial > mplayer.hg
annotate libmpcodecs/vf_fame.c @ 18626:2e2b8f34a69e
make spatial interlacing check optional
author | michael |
---|---|
date | Wed, 07 Jun 2006 17:21:45 +0000 |
parents | bcd805923554 |
children | a1807995e2ab |
rev | line source |
---|---|
5536 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include <string.h> | |
4 #include <inttypes.h> | |
5 | |
17012 | 6 #include "config.h" |
7 #include "mp_msg.h" | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17906
diff
changeset
|
8 #include "help_mp.h" |
5536 | 9 |
10 //#ifdef USE_LIBFAME | |
11 | |
12 // 100=best >=80 very good >=50 fast | |
13 #define QUALITY 90 | |
14 | |
5607 | 15 #include "img_format.h" |
16 #include "mp_image.h" | |
5536 | 17 #include "vf.h" |
18 | |
17012 | 19 //#include "libvo/fastmemcpy.h" |
12605
27706a9c2015
libfame has been removed from MPlayer long ago. Compilation fix pointed
diego
parents:
9593
diff
changeset
|
20 #include <fame.h> |
5536 | 21 |
22 struct vf_priv_s { | |
23 unsigned char* outbuf; | |
24 int outbuf_size; | |
25 fame_parameters_t params; | |
26 fame_context_t *ctx; | |
27 vo_mpegpes_t pes; | |
28 }; | |
29 | |
30 //===========================================================================// | |
31 | |
32 static int config(struct vf_instance_s* vf, | |
33 int width, int height, int d_width, int d_height, | |
34 unsigned int flags, unsigned int outfmt){ | |
35 if(vf_next_query_format(vf,IMGFMT_MPEGPES)<=0) return 0; | |
36 | |
37 vf->priv->params.width=width; | |
38 vf->priv->params.height=height; | |
39 | |
40 vf->priv->outbuf_size=10000+width*height; // must be enough! | |
41 if(vf->priv->outbuf) free(vf->priv->outbuf); | |
42 vf->priv->outbuf = malloc(vf->priv->outbuf_size); | |
43 | |
44 fame_init(vf->priv->ctx,&vf->priv->params,vf->priv->outbuf,vf->priv->outbuf_size); | |
45 | |
46 return vf_next_config(vf,width,height,d_width,d_height,flags,IMGFMT_MPEGPES); | |
47 } | |
48 | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17012
diff
changeset
|
49 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){ |
5536 | 50 fame_yuv_t yuv; |
51 mp_image_t *dmpi; | |
52 int out_size; | |
53 | |
54 yuv.w=mpi->width; | |
55 yuv.h=mpi->height; | |
6260 | 56 yuv.p=mpi->stride[0]; |
5536 | 57 yuv.y=mpi->planes[0]; |
58 yuv.u=mpi->planes[1]; | |
59 yuv.v=mpi->planes[2]; | |
60 | |
6260 | 61 // out_size = fame_encode_frame(vf->priv->ctx, &yuv, NULL); |
62 fame_start_frame(vf->priv->ctx, &yuv, NULL); | |
63 out_size = fame_encode_slice(vf->priv->ctx); | |
6261
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
64 fame_end_frame(vf->priv->ctx, NULL); |
5536 | 65 |
7368 | 66 if(out_size<=0) return 1; |
5536 | 67 |
68 dmpi=vf_get_image(vf->next,IMGFMT_MPEGPES, | |
69 MP_IMGTYPE_EXPORT, 0, | |
70 mpi->w, mpi->h); | |
71 | |
72 vf->priv->pes.data=vf->priv->outbuf; | |
73 vf->priv->pes.size=out_size; | |
74 vf->priv->pes.id=0x1E0; | |
75 vf->priv->pes.timestamp=-1; // dunno | |
76 | |
7557 | 77 dmpi->planes[0]=(void*) &vf->priv->pes; |
5536 | 78 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17012
diff
changeset
|
79 return vf_next_put_image(vf,dmpi, MP_NOPTS_VALUE); |
5536 | 80 } |
81 | |
82 //===========================================================================// | |
83 | |
84 static int query_format(struct vf_instance_s* vf, unsigned int fmt){ | |
85 switch(fmt){ | |
86 case IMGFMT_YV12: | |
87 case IMGFMT_I420: | |
88 case IMGFMT_IYUV: | |
6260 | 89 // return (vf_next_query_format(vf,IMGFMT_MPEGPES) & (~(VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_ACCEPT_STRIDE))); |
90 return (vf_next_query_format(vf,IMGFMT_MPEGPES) & (~(VFCAP_CSP_SUPPORTED_BY_HW))); | |
5536 | 91 } |
92 return 0; | |
93 } | |
94 | |
95 static int open(vf_instance_t *vf, char* args){ | |
6261
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
96 int p_quality=0; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
97 float p_fps=0; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
98 |
5536 | 99 vf->config=config; |
100 vf->put_image=put_image; | |
101 vf->query_format=query_format; | |
102 vf->priv=malloc(sizeof(struct vf_priv_s)); | |
103 memset(vf->priv,0,sizeof(struct vf_priv_s)); | |
104 | |
105 vf->priv->ctx=fame_open(); | |
106 if(!vf->priv->ctx){ | |
18004
bcd805923554
Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents:
17906
diff
changeset
|
107 mp_msg(MSGT_VFILTER, MSGL_ERR, MSGTR_MPCODECS_FatalCantOpenlibFAME); |
5536 | 108 return 0; |
109 } | |
110 | |
111 // TODO: parse args -> | |
6261
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
112 if(args) sscanf(args, "%d:%f", &p_quality, &p_fps); |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
113 |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
114 if(p_quality<=100){ |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
115 // fixed quality |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
116 vf->priv->params.quality=p_quality?p_quality:QUALITY; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
117 vf->priv->params.bitrate=0; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
118 } else { |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
119 // fixed bitrate (in kbits) |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
120 vf->priv->params.quality=QUALITY; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
121 vf->priv->params.bitrate=1000*p_quality; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
122 } |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
123 |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
124 if(p_fps<1) p_fps=25.0; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
125 if(p_fps == ((int)p_fps)){ |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
126 vf->priv->params.frame_rate_num=p_fps; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
127 vf->priv->params.frame_rate_den=1; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
128 } else { |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
129 vf->priv->params.frame_rate_num=p_fps*1001; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
130 vf->priv->params.frame_rate_den=1001; |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
131 } |
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
132 |
5536 | 133 vf->priv->params.coding="I"; |
134 vf->priv->params.slices_per_frame=1; | |
6261
5b76ba46fc72
fame=quality:fps args support, small fixes for 0.9.0 api
arpi
parents:
6260
diff
changeset
|
135 vf->priv->params.frames_per_sequence=(int)p_fps; |
5536 | 136 vf->priv->params.shape_quality=100; |
137 vf->priv->params.search_range=8; // for "IPPP" only | |
138 vf->priv->params.verbose=0; | |
6260 | 139 vf->priv->params.profile="mpeg1"; // TODO |
5536 | 140 |
141 return 1; | |
142 } | |
143 | |
144 vf_info_t vf_info_fame = { | |
145 "realtime mpeg1 encoding with libFAME", | |
146 "fame", | |
147 "A'rpi", | |
148 "", | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
7557
diff
changeset
|
149 open, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
7557
diff
changeset
|
150 NULL |
5536 | 151 }; |
152 | |
153 //===========================================================================// | |
154 //#endif |