annotate libmpcodecs/ve_raw.c @ 21033:087cad309e9c

if in the list of pids appears at least one 8192 (while TS) remove all other pid filters and don't add pid 0, either
author nicodvb
date Sun, 19 Nov 2006 12:05:11 +0000
parents bcd805923554
children ca9da45d13e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
1 #include <stdio.h>
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
2 #include <stdlib.h>
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
3 #include <string.h>
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
4
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 14878
diff changeset
5 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 14878
diff changeset
6 #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
7 #include "help_mp.h"
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
8
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
9 #include "codec-cfg.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
10 #include "stream.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
11 #include "demuxer.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
12 #include "stheader.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
13
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
14 #include "muxer.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
15
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
16 #include "img_format.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
17 #include "mp_image.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
18 #include "vf.h"
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
19
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
20
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
21 //===========================================================================//
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
22
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
23 struct vf_priv_s {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
24 muxer_stream_t* mux;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
25 };
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
26 #define mux_v (vf->priv->mux)
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
27
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
28 static int set_format(struct vf_instance_s *vf, unsigned int fmt) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
29 mux_v->bih->biCompression = fmt;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
30
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
31 mux_v->bih->biPlanes = 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
32 if (IMGFMT_IS_RGB(fmt)) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
33 if (IMGFMT_RGB_DEPTH(fmt) < 8 && !(fmt&128))
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
34 mux_v->bih->biBitCount = IMGFMT_RGB_DEPTH(fmt);
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
35 else
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
36 mux_v->bih->biBitCount = (IMGFMT_RGB_DEPTH(fmt)+7)&(~7);
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
37 return 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
38 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
39 if (IMGFMT_IS_BGR(fmt)) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
40 if (IMGFMT_BGR_DEPTH(fmt) < 8 && !(fmt&128))
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
41 mux_v->bih->biBitCount = IMGFMT_BGR_DEPTH(fmt);
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
42 else
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
43 mux_v->bih->biBitCount = (IMGFMT_BGR_DEPTH(fmt)+7)&(~7);
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
44 return 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
45 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
46 switch (fmt) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
47 case IMGFMT_I420:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
48 case IMGFMT_IYUV:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
49 case IMGFMT_YV12:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
50 case IMGFMT_411P:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
51 mux_v->bih->biPlanes = 3;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
52 mux_v->bih->biBitCount = 12;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
53 break;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
54 case IMGFMT_444P:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
55 mux_v->bih->biPlanes = 3;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
56 mux_v->bih->biBitCount = 24;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
57 break;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
58 case IMGFMT_422P:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
59 mux_v->bih->biPlanes = 3;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
60 mux_v->bih->biBitCount = 16;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
61 break;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
62 case IMGFMT_IF09:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
63 mux_v->bih->biPlanes = 4;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
64 case IMGFMT_YVU9:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
65 mux_v->bih->biBitCount = 9;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
66 break;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
67 case IMGFMT_UYVY:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
68 case IMGFMT_YUY2:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
69 mux_v->bih->biBitCount = 16;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
70 break;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
71 default:
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
72 mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_MPCODECS_OutputWithFourccNotSupported, fmt);
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
73 mux_v->bih->biCompression = 0;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
74 return 0;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
75 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
76 return 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
77 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
78
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
79
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
80 static int config(struct vf_instance_s *vf,
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
81 int width, int height, int d_width, int d_height,
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
82 unsigned int flags, unsigned int outfmt)
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
83 {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
84 int ret;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
85 mux_v->bih->biWidth = width;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
86 mux_v->bih->biHeight = height;
12061
656a1b45b309 Use aspect from encoder for AVI vprp header
ranma
parents: 11966
diff changeset
87 mux_v->aspect = (float)d_width/d_height;
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
88 ret = set_format(vf, outfmt);
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
89 if (!ret) return 0;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
90
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
91 mux_v->bih->biSizeImage = mux_v->bih->biWidth*mux_v->bih->biHeight*mux_v->bih->biBitCount/8;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
92 return 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
93 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
94
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
95 static int control(struct vf_instance_s *vf, int request, void *data) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
96 return CONTROL_UNKNOWN;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
97 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
98
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
99 static int query_format(struct vf_instance_s *vf, unsigned int fmt) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
100 if (IMGFMT_IS_RGB(fmt) || IMGFMT_IS_BGR(fmt))
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
101 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
102 switch (fmt) {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
103 case IMGFMT_I420:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
104 case IMGFMT_IYUV:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
105 case IMGFMT_YV12:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
106 case IMGFMT_411P:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
107 case IMGFMT_444P:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
108 case IMGFMT_422P:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
109 case IMGFMT_UYVY:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
110 case IMGFMT_YUY2:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
111 case IMGFMT_YVU9:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
112 case IMGFMT_IF09:
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
113 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
114 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
115
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
116 return 0;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
117 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
118
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17487
diff changeset
119 static int put_image(struct vf_instance_s *vf, mp_image_t *mpi, double pts) {
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
120 mux_v->buffer = mpi->planes[0];
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17487
diff changeset
121 muxer_write_chunk(mux_v, mpi->width*mpi->height*mux_v->bih->biBitCount/8, 0x10, pts, pts);
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
122 return 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
123 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
124
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
125 //===========================================================================//
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
126
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
127 static int vf_open(vf_instance_t *vf, char* args){
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
128 vf->config = config;
14878
5723c4b2a2ea fixes for encoding of multiple files
henry
parents: 14549
diff changeset
129 vf->default_caps = VFCAP_CONSTANT;
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
130 vf->control = control;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
131 vf->query_format = query_format;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
132 vf->put_image = put_image;
14303
ef29ceb5add1 Raw encoder does not support stride.
reimar
parents: 12061
diff changeset
133 vf->default_caps = 0;
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
134 vf->priv = malloc(sizeof(struct vf_priv_s));
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
135 memset(vf->priv, 0, sizeof(struct vf_priv_s));
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
136 vf->priv->mux = (muxer_stream_t*)args;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
137
14549
acf3241be19b Initialized BITMAPINFOHEADER to 0 to avoid problems, esp. windows has problems
reimar
parents: 14303
diff changeset
138 mux_v->bih = calloc(1, sizeof(BITMAPINFOHEADER));
11966
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
139 mux_v->bih->biSize = sizeof(BITMAPINFOHEADER);
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
140 mux_v->bih->biWidth = 0;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
141 mux_v->bih->biHeight = 0;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
142
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
143 return 1;
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
144 }
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
145
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
146 vf_info_t ve_info_raw = {
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
147 "raw encoder",
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
148 "raw",
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
149 "jwe21@cam.ac.uk",
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
150 "Based on rawrgb",
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
151 vf_open
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
152 };
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
153
b58fdd5d8e8d remove raw nonsense and replace it by one ovc
attila
parents:
diff changeset
154 //===========================================================================//