annotate libmpcodecs/ve_qtvideo.c @ 9269:e20e3c0cd9da

-framedrop clarified as explained by Rich.
author diego
date Tue, 04 Feb 2003 09:08:52 +0000
parents 420e2b2f8e5a
children 97b30b4b722f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
1 /*qt video encoder using win32 libs
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
2 released under gnu gpl
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
3 (C)Sascha Sommer */
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
4
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
5 #define MAX_IDSIZE 0x6F
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
6
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
7 #include <stdio.h>
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
8 #include <stdlib.h>
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
9 #include <string.h>
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
10
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
11 #include "../config.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
12 #include "../mp_msg.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
13 #include "../bswap.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
14
9217
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 9014
diff changeset
15 #ifdef USE_WIN32DLL
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 9014
diff changeset
16 #include "ldt_keeper.h"
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 9014
diff changeset
17 #endif
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 9014
diff changeset
18
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
19 #ifdef USE_QTX_CODECS
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
20 #include "../loader/qtx/qtxsdk/components.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
21 #include "wine/windef.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
22
8733
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
23 #ifdef USE_WIN32DLL
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
24 #include "ldt_keeper.h"
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
25 #endif
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
26
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
27 #include "codec-cfg.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
28 #include "stream.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
29 #include "demuxer.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
30 #include "stheader.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
31
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8511
diff changeset
32 #include "muxer.h"
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
33
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
34 #include "img_format.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
35 #include "mp_image.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
36 #include "vf.h"
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
37
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
38 HMODULE WINAPI LoadLibraryA(LPCSTR);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
39 FARPROC WINAPI GetProcAddress(HMODULE,LPCSTR);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
40 int WINAPI FreeLibrary(HMODULE);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
41 static HMODULE handler;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
42
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
43 static OSErr (*FindCodec)(CodecType cType,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
44 CodecComponent specCodec,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
45 CompressorComponent * compressor,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
46 DecompressorComponent * decompressor);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
47 static OSErr (*InitializeQTML)(long flags);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
48 static PixMapHandle (*GetGWorldPixMap)(GWorldPtr offscreenGWorld);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
49 static OSErr (*QTNewGWorldFromPtr)(GWorldPtr *gw,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
50 OSType pixelFormat,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
51 const Rect *boundsRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
52 CTabHandle cTable,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
53 /*GDHandle*/void* aGDevice, /*unused anyway*/
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
54 GWorldFlags flags,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
55 void *baseAddr,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
56 long rowBytes);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
57 static OSErr (*NewHandleClear)(Size byteCount);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
58 static OSErr (*CompressSequenceBegin) (
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
59 ImageSequence *seqID,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
60 PixMapHandle src,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
61 PixMapHandle prev,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
62 const Rect *srcRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
63 const Rect *prevRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
64 short colorDepth,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
65 CodecType cType,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
66 CompressorComponent codec,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
67 CodecQ spatialQuality,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
68 CodecQ temporalQuality,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
69 long keyFrameRate,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
70 CTabHandle ctable,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
71 CodecFlags flags,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
72 ImageDescriptionHandle desc );
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
73
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
74 static OSErr (*CompressSequenceFrame) (
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
75 ImageSequence seqID,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
76 PixMapHandle src,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
77 const Rect *srcRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
78 CodecFlags flags,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
79 Ptr data,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
80 long *dataSize,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
81 UInt8 *similarity,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
82 ICMCompletionProcRecordPtr asyncCompletionProc );
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
83
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
84 static OSErr (*GetMaxCompressionSize)(PixMapHandle src,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
85 const Rect *srcRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
86 short colorDepth,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
87 CodecQ quality,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
88 CodecType cType,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
89 CompressorComponent codec,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
90 long *size );
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
91 static OSErr (*CDSequenceEnd)( ImageSequence seqID );
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
92 static Component (*FindNextComponent)(Component prev,ComponentDescription* desc);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
93 static long (*CountComponents)(ComponentDescription* desc);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
94 static OSErr (*GetComponentInfo)(Component prev,ComponentDescription* desc,Handle h1,Handle h2,Handle h3);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
95
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
96
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
97
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
98 //static int format=mmioFOURCC('S','V','Q','1');
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
99 static int format=mmioFOURCC('S','V','Q','3');
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
100
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
101
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
102
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
103 //static void *frame_in; //input frame
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
104 static void *frame_prev; //previous frame
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
105 static void *frame_comp; //compressed frame
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
106 static GWorldPtr frame_GWorld_in = NULL;//a GWorld is some kind of description for a drawing environment
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
107 static GWorldPtr frame_GWorld_prev = NULL;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
108 static Rect FrameRect;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
109
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
110 static CompressorComponent compressor;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
111 static DecompressorComponent decompressor;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
112 static ImageDescriptionHandle desc;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
113 static ImageSequence seq;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
114
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
115
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
116
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
117
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
118
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
119 struct vf_priv_s {
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8511
diff changeset
120 muxer_stream_t* mux;
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
121 //dv_encoder_t* enc;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
122
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
123 };
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
124 #define mux_v (vf->priv->mux)
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
125
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
126 //===========================================================================//
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
127
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
128 static int config(struct vf_instance_s* vf,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
129 int width, int height, int d_width, int d_height,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
130 unsigned int flags, unsigned int outfmt){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
131 OSErr cres;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
132 ComponentDescription cdesc;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
133 mux_v->bih->biWidth=width;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
134 mux_v->bih->biHeight=height;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
135 mux_v->bih->biSizeImage=width*height*2;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
136
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
137
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
138
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
139 memset(&desc,0,sizeof(cdesc));
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
140 cdesc.componentType= (((unsigned char)'i')<<24)|
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
141 (((unsigned char)'m')<<16)|
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
142 (((unsigned char)'c')<<8)|
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
143 (((unsigned char)'o'));
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
144
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
145 cdesc.componentSubType=bswap_32(format);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
146 cdesc.componentManufacturer=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
147 cdesc.componentFlags=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
148 cdesc.componentFlagsMask=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
149
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
150
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
151 printf("Count = %d\n",CountComponents(&cdesc));
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
152 compressor=FindNextComponent(NULL,&cdesc);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
153 if(!compressor){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
154 printf("Cannot find requested component\n");
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
155 return(0);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
156 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
157 printf("Found it! ID = 0x%X\n",compressor);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
158
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
159 // cres= FindCodec (fourcc,anyCodec,&compressor,&decompressor );
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
160 // printf("FindCodec returned:%i compressor: 0x%X decompressor: 0x%X\n",cres&0xFFFF,compressor,decompressor);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
161
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
162 return 1;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
163 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
164
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
165 static int control(struct vf_instance_s* vf, int request, void* data){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
166
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
167 return CONTROL_UNKNOWN;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
168 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
169
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
170 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
171 if(fmt==IMGFMT_YUY2) return 3;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
172 return 0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
173 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
174
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
175 static int codec_inited = 0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
176
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
177 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
178
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
179 OSErr cres;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
180 long framesizemax;
8511
2b955a07fdcf set keyframe flag at encoding
arpi
parents: 8471
diff changeset
181 UInt8 similarity=0;
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
182 long compressedsize;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
183 int in_format=kYUVSPixelFormat;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
184 int width = mpi->width;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
185 int height = mpi->height;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
186 int stride = width*2;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
187 if(!codec_inited){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
188 FrameRect.top=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
189 FrameRect.left=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
190 FrameRect.right=width;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
191 FrameRect.bottom=height;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
192 cres = QTNewGWorldFromPtr(
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
193 &frame_GWorld_in,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
194 in_format,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
195 &FrameRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
196 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
197 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
198 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
199 mpi->planes[0],
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
200 stride);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
201 printf("NewGWorldFromPtr returned:%i\n",cres&0xFFFF);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
202 //dunno what todo about this
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
203 frame_prev = malloc(stride * height);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
204 cres = QTNewGWorldFromPtr(
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
205 &frame_GWorld_prev,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
206 in_format,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
207 &FrameRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
208 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
209 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
210 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
211 frame_prev,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
212 stride);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
213 printf("height:%i width:%i stride:%i\n",height,width,stride);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
214 printf("NewGWorldFromPtr returned:%i\n",cres&0xFFFF);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
215 cres= GetMaxCompressionSize (
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
216 GetGWorldPixMap(frame_GWorld_in),
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
217 &FrameRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
218 24,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
219 codecNormalQuality,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
220 bswap_32(format),
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
221 compressor,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
222 &framesizemax );
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
223 printf("GetMaxCompressionSize returned:%i : MaxSize:%i\n",cres&0xFFFF,framesizemax);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
224 frame_comp=malloc(framesizemax);
8511
2b955a07fdcf set keyframe flag at encoding
arpi
parents: 8471
diff changeset
225
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
226 desc = (ImageDescriptionHandle)NewHandleClear(MAX_IDSIZE); //memory where the desc will be stored
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
227 (*desc)->idSize=MAX_IDSIZE;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
228
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
229 cres= CompressSequenceBegin (
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
230 &seq,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
231 GetGWorldPixMap( frame_GWorld_in),
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
232 GetGWorldPixMap( frame_GWorld_prev),
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
233 &FrameRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
234 &FrameRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
235 24, // color depth
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
236 bswap_32(format), // fourcc
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
237 compressor, // codec component
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
238 codecNormalQuality, //codecNormalQuality,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
239 codecMaxQuality, //codecNormalQuality,
8511
2b955a07fdcf set keyframe flag at encoding
arpi
parents: 8471
diff changeset
240 10*30, // keyframe rate
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
241 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
242 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
243 desc);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
244 printf("CompressSequenceBegin returned:%i\n",cres&0xFFFF);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
245 printf("Sequence ID:%i\n",seq);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
246
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
247 dump_ImageDescription(*desc);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
248 codec_inited++;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
249 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
250 cres = CompressSequenceFrame (
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
251 seq,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
252 GetGWorldPixMap(frame_GWorld_in),
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
253 &FrameRect,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
254 0,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
255 (char*)mux_v->buffer,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
256 &compressedsize,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
257 &similarity,
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
258 0);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
259
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
260 if(cres&0xFFFF)printf("CompressSequenceFrame returned:%i\n",cres&0xFFFF);
8511
2b955a07fdcf set keyframe flag at encoding
arpi
parents: 8471
diff changeset
261 #if 0
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
262 printf("Size %i->%i \n",stride*height,compressedsize);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
263 printf("Ratio: %i:1\n",(stride*height)/compressedsize);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
264 #endif
9014
c671e9adbe22 Cleanup of the muxer API, func parameters muxer & muxer_f eliminated.
arpi
parents: 8733
diff changeset
265 muxer_write_chunk(mux_v, compressedsize , similarity?0:0x10);
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
266
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
267 if(((*desc)->idSize)>MAX_IDSIZE){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
268 printf("FATAL! idSize=%d too big, increase MAX_IDSIZE in ve_qtvideo.c!\n",((*desc)->idSize));
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
269 } else {
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
270 // according to QT docs, imagedescription may be changed while encoding
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
271 // a frame (even its size may (and does!) change!)
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
272 memcpy(mux_v->bih+1,*desc,(*desc)->idSize);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
273 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
274
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
275 return 1;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
276 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
277
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
278 //===========================================================================//
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
279
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
280 static int vf_open(vf_instance_t *vf, char* args){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
281 OSErr cres = 1;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
282 vf->config=config;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
283 vf->control=control;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
284 vf->query_format=query_format;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
285 vf->put_image=put_image;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
286 vf->priv=malloc(sizeof(struct vf_priv_s));
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
287 memset(vf->priv,0,sizeof(struct vf_priv_s));
8585
27da710563c2 the long-waited MUXER layer, and new MPEG-PS muxer
arpi
parents: 8511
diff changeset
288 vf->priv->mux=(muxer_stream_t*)args;
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
289
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
290 mux_v->bih=malloc(sizeof(BITMAPINFOHEADER)+MAX_IDSIZE);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
291 mux_v->bih->biSize=sizeof(BITMAPINFOHEADER)+MAX_IDSIZE;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
292 mux_v->bih->biWidth=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
293 mux_v->bih->biHeight=0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
294 mux_v->bih->biCompression=format;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
295 mux_v->bih->biPlanes=1;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
296 mux_v->bih->biBitCount=24;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
297
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
298
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
299 Setup_LDT_Keeper();
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
300 handler = LoadLibraryA("qtmlClient.dll");
8733
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
301 InitializeQTML = (OSErr (*)(long))GetProcAddress(handler, "InitializeQTML");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
302 GetGWorldPixMap = (PixMapHandle (*)(GWorldPtr))GetProcAddress(handler, "GetGWorldPixMap");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
303 QTNewGWorldFromPtr = (OSErr(*)(GWorldPtr *,OSType,const Rect *,CTabHandle,void*,GWorldFlags,void *,long))GetProcAddress(handler, "QTNewGWorldFromPtr");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
304 NewHandleClear = (OSErr(*)(Size))GetProcAddress(handler, "NewHandleClear");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
305 FindCodec = (OSErr (*)(CodecType,CodecComponent,CompressorComponent *,DecompressorComponent *))GetProcAddress(handler,"FindCodec");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
306 CompressSequenceBegin = (OSErr(*)(ImageSequence *,PixMapHandle,PixMapHandle,const Rect *,const Rect *,short,CodecType,CompressorComponent,CodecQ,CodecQ,long,CTabHandle,CodecFlags,ImageDescriptionHandle))GetProcAddress(handler,"CompressSequenceBegin");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
307 CompressSequenceFrame = (OSErr(*)(ImageSequence,PixMapHandle,const Rect *,CodecFlags,Ptr,long *,UInt8 *,ICMCompletionProcRecordPtr))GetProcAddress(handler,"CompressSequenceFrame");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
308 GetMaxCompressionSize = (OSErr(*)(PixMapHandle,const Rect *,short,CodecQ,CodecType,CompressorComponent,long *))GetProcAddress(handler,"GetMaxCompressionSize");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
309 CDSequenceEnd = (OSErr (*)(ImageSequence))GetProcAddress(handler,"CDSequenceEnd");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
310 FindNextComponent = (Component (*)(Component,ComponentDescription*))GetProcAddress(handler, "FindNextComponent");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
311 CountComponents = (long (*)(ComponentDescription*))GetProcAddress(handler, "CountComponents");
478561617705 compiler warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 8585
diff changeset
312 GetComponentInfo = (OSErr (*)(Component,ComponentDescription*,Handle,Handle,Handle))GetProcAddress(handler, "GetComponentInfo");
8471
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
313 if(!InitializeQTML ||!CompressSequenceBegin){
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
314 printf("invalid qt DLL!\n");
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
315 return 0;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
316 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
317 //printf("%i,%i,%i\n",mmioFOURCC('S','V','Q','1'),'SVQ1',bswap_32(mmioFOURCC('S','V','Q','1')));
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
318 cres=InitializeQTML(6+16);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
319 printf("InitializeQTML returned %i\n",cres);
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
320 return 1;
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
321 }
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
322
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
323 vf_info_t ve_info_qtvideo = {
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
324 "Quicktime video encoder using win32 DLLs",
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
325 "qtvideo",
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
326 "Sascha Sommer",
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
327 "for internal use by mencoder",
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
328 vf_open
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
329 };
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
330
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
331 //===========================================================================//
0b7839c27be9 Sorenson 1/3 encoding just for fun :)
arpi
parents:
diff changeset
332 #endif