Mercurial > mplayer.hg
annotate libmpcodecs/ve_nuv.c @ 18385:4cdb4082d899
French Fixes by Pierre Lombard, (and 10l to me for not checking they were
conflicts on my tree before committing, so previous version was probably
not even building cleanly).
author | gpoirier |
---|---|
date | Thu, 04 May 2006 12:36:34 +0000 |
parents | 20aca9baf5d8 |
children | cc65a585fdcc |
rev | line source |
---|---|
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
1 #include <stdio.h> |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
2 #include <stdlib.h> |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
3 #include <string.h> |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
4 |
17012 | 5 #include "config.h" |
6 #include "mp_msg.h" | |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
7 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
8 #include "m_option.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
9 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
10 #include "codec-cfg.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
11 #include "stream.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
12 #include "demuxer.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
13 #include "stheader.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
14 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
15 #include "muxer.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
16 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
17 #include "img_format.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
18 #include "mp_image.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
19 #include "vf.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
20 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
21 #include "libmpdemux/nuppelvideo.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
22 #include "native/minilzo.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
23 #include "native/RTjpegN.h" |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
24 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
25 #define LZO_AL(size) (((size) + (sizeof(long) - 1)) / sizeof(long)) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
26 #define LZO_IN_LEN (1024*1024L) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
27 #define LZO_OUT_LEN (LZO_IN_LEN + LZO_IN_LEN / 64 + 16 + 3) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
28 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
29 //===========================================================================// |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
30 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
31 struct vf_priv_s { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
32 int raw; // Do not use RTjpeg |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
33 int lzo; // Use lzo |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
34 unsigned int l,c,q; // Mjpeg param |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
35 muxer_stream_t* mux; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
36 uint8_t* buffer; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
37 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
38 int buf_size; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
39 int tbl_wrote; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
40 lzo_byte *zbuffer; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
41 long __LZO_MMODEL *zmem; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
42 }; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
43 #define mux_v (vf->priv->mux) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
44 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
45 struct vf_priv_s nuv_priv_dflt = { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
46 0, // raw |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
47 1, // lzo |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
48 1,1, // l,c |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
49 255, // q |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
50 NULL, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
51 NULL, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
52 0,0, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
53 NULL,NULL |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
54 }; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
55 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
56 m_option_t nuvopts_conf[]={ |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
57 {"raw", &nuv_priv_dflt.raw, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
58 {"rtjpeg", &nuv_priv_dflt.raw, CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
59 {"lzo", &nuv_priv_dflt.lzo, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
60 {"nolzo", &nuv_priv_dflt.lzo, CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
61 {"q", &nuv_priv_dflt.q, CONF_TYPE_INT, M_OPT_RANGE,3,255, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
62 {"l", &nuv_priv_dflt.l, CONF_TYPE_INT, M_OPT_RANGE,0,20, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
63 {"c", &nuv_priv_dflt.c, CONF_TYPE_INT, M_OPT_RANGE,0,20, NULL}, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
64 {NULL, NULL, 0, 0, 0, 0, NULL} |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
65 }; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
66 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
67 //===========================================================================// |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
68 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
69 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
70 static int config(struct vf_instance_s* vf, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
71 int width, int height, int d_width, int d_height, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
72 unsigned int flags, unsigned int outfmt){ |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
73 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
74 // We need a buffer wich can holda header and a whole YV12 picture |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
75 // or a RTJpeg table |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
76 vf->priv->buf_size = width*height*3/2+FRAMEHEADERSIZE; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
77 if(vf->priv->buf_size < (int)(128*sizeof(long int) + FRAMEHEADERSIZE)) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
78 vf->priv->buf_size = 128*sizeof(long int) + FRAMEHEADERSIZE; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
79 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
80 mux_v->bih->biWidth=width; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
81 mux_v->bih->biHeight=height; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
82 mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8); |
12061 | 83 mux_v->aspect = (float)d_width/d_height; |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
84 vf->priv->buffer = realloc(vf->priv->buffer,vf->priv->buf_size); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
85 vf->priv->tbl_wrote = 0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
86 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
87 return 1; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
88 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
89 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
90 static int control(struct vf_instance_s* vf, int request, void* data){ |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
91 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
92 return CONTROL_UNKNOWN; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
93 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
94 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
95 static int query_format(struct vf_instance_s* vf, unsigned int fmt){ |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14896
diff
changeset
|
96 if(fmt==IMGFMT_I420) return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW; |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
97 return 0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
98 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
99 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17487
diff
changeset
|
100 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){ |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
101 struct rtframeheader* ench = (struct rtframeheader*)vf->priv->buffer; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
102 uint8_t* data = vf->priv->buffer + FRAMEHEADERSIZE; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
103 uint8_t* zdata = vf->priv->zbuffer + FRAMEHEADERSIZE; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
104 int len = 0, zlen = 0,r; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
105 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
106 memset(vf->priv->buffer,0,FRAMEHEADERSIZE); // Reset the header |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
107 if(vf->priv->lzo) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
108 memset(vf->priv->zbuffer,0,FRAMEHEADERSIZE); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
109 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
110 // This has to be don here otherwise tv with sound doesn't work |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
111 if(!vf->priv->tbl_wrote) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
112 RTjpeg_init_compress((long int*)data,mpi->width,mpi->height,vf->priv->q); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
113 RTjpeg_init_mcompress(); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
114 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
115 ench->frametype = 'D'; // compressor data |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
116 ench->comptype = 'R'; // compressor data for RTjpeg |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
117 ench->packetlength = 128*sizeof(long int); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
118 |
14896
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
14878
diff
changeset
|
119 le2me_rtframeheader(ench); |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
120 mux_v->buffer=vf->priv->buffer; |
17487
fa17424b4c7b
change muxer_write_chunk() so that pts/dts _could_ be passed from encoder to muxer
michael
parents:
17012
diff
changeset
|
121 muxer_write_chunk(mux_v,FRAMEHEADERSIZE + 128*sizeof(long int), 0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE); |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
122 vf->priv->tbl_wrote = 1; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
123 memset(ench,0,FRAMEHEADERSIZE); // Reset the header |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
124 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
125 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
126 // Raw picture |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
127 if(vf->priv->raw) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
128 len = mpi->width*mpi->height*3/2; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
129 // Try lzo ??? |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
130 if(vf->priv->lzo) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
131 r = lzo1x_1_compress(mpi->planes[0],mpi->width*mpi->height*3/2, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
132 zdata,&zlen,vf->priv->zmem); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
133 if(r != LZO_E_OK) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
134 mp_msg(MSGT_VFILTER,MSGL_ERR,"LZO compress error\n"); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
135 zlen = 0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
136 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
137 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
138 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
139 if(zlen <= 0 || zlen > len) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
140 memcpy(data,mpi->planes[0],len); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
141 ench->comptype = '0'; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
142 } else { // Use lzo only if it's littler |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
143 ench = (struct rtframeheader*)vf->priv->zbuffer; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
144 ench->comptype = '3'; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
145 len = zlen; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
146 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
147 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
148 } else { // RTjpeg compression |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
149 len = RTjpeg_mcompressYUV420(data,mpi->planes[0],vf->priv->l, |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
150 vf->priv->c); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
151 if(len <= 0) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
152 mp_msg(MSGT_VFILTER,MSGL_ERR,"RTjpeg_mcompressYUV420 error (%d)\n",len); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
153 return 0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
154 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
155 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
156 if(vf->priv->lzo) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
157 r = lzo1x_1_compress(data,len,zdata,&zlen,vf->priv->zmem); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
158 if(r != LZO_E_OK) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
159 mp_msg(MSGT_VFILTER,MSGL_ERR,"LZO compress error\n"); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
160 zlen = 0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
161 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
162 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
163 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
164 if(zlen <= 0 || zlen > len) |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
165 ench->comptype = '1'; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
166 else { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
167 ench = (struct rtframeheader*)vf->priv->zbuffer; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
168 ench->comptype = '2'; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
169 len = zlen; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
170 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
171 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
172 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
173 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
174 ench->frametype = 'V'; // video frame |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
175 ench->packetlength = len; |
14896
9ddae5897422
Make nuv files work on bigendian (but old nuv files created with mencoder
reimar
parents:
14878
diff
changeset
|
176 le2me_rtframeheader(ench); |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
177 mux_v->buffer=(void*)ench; |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17487
diff
changeset
|
178 muxer_write_chunk(mux_v, len + FRAMEHEADERSIZE, 0x10, pts, pts); |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
179 return 1; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
180 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
181 |
9522 | 182 static void uninit(struct vf_instance_s* vf) { |
183 | |
184 if(vf->priv->buffer) | |
185 free(vf->priv->buffer); | |
186 if(vf->priv->zbuffer) | |
187 free(vf->priv->zbuffer); | |
188 if(vf->priv->zmem) | |
189 free(vf->priv->zmem); | |
190 | |
191 } | |
192 | |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
193 //===========================================================================// |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
194 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
195 static int vf_open(vf_instance_t *vf, char* args){ |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
196 vf->config=config; |
14878 | 197 vf->default_caps=VFCAP_CONSTANT; |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
198 vf->control=control; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
199 vf->query_format=query_format; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
200 vf->put_image=put_image; |
9522 | 201 vf->uninit = uninit; |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
202 vf->priv=malloc(sizeof(struct vf_priv_s)); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
203 memcpy(vf->priv, &nuv_priv_dflt,sizeof(struct vf_priv_s)); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
204 vf->priv->mux=(muxer_stream_t*)args; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
205 |
14549
acf3241be19b
Initialized BITMAPINFOHEADER to 0 to avoid problems, esp. windows has problems
reimar
parents:
12061
diff
changeset
|
206 mux_v->bih=calloc(1, sizeof(BITMAPINFOHEADER)); |
9520
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
207 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
208 mux_v->bih->biWidth=0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
209 mux_v->bih->biHeight=0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
210 mux_v->bih->biPlanes=1; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
211 mux_v->bih->biBitCount=12; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
212 mux_v->bih->biCompression = mmioFOURCC('N','U','V','1'); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
213 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
214 if(vf->priv->lzo) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
215 if(lzo_init() != LZO_E_OK) { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
216 mp_msg(MSGT_VFILTER,MSGL_WARN,"LZO init failed: no lzo compression\n"); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
217 vf->priv->lzo = 0; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
218 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
219 vf->priv->zbuffer = (lzo_bytep)malloc(FRAMEHEADERSIZE + LZO_OUT_LEN); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
220 vf->priv->zmem = (long*)malloc(sizeof(long)*LZO_AL(LZO1X_1_MEM_COMPRESS)); |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
221 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
222 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
223 return 1; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
224 } |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
225 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
226 vf_info_t ve_info_nuv = { |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
227 "nuv encoder", |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
228 "nuv", |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
229 "Albeu", |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
230 "for internal use by mencoder", |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
231 vf_open |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
232 }; |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
233 |
2860f7c9d9ca
A new nuppel video encoder. Mainly for RT encoding on slow box.
albeu
parents:
diff
changeset
|
234 //===========================================================================// |