summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/ve_qtvideo.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpcodecs/ve_qtvideo.c')
-rw-r--r--libmpcodecs/ve_qtvideo.c359
1 files changed, 0 insertions, 359 deletions
diff --git a/libmpcodecs/ve_qtvideo.c b/libmpcodecs/ve_qtvideo.c
deleted file mode 100644
index 59b8731c93..0000000000
--- a/libmpcodecs/ve_qtvideo.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * QT video encoder using Win32 libs
- *
- * Copyright (C) 2002 Sascha Sommer
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#define MAX_IDSIZE 0x6F
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "mpbswap.h"
-
-#ifdef WIN32_LOADER
-#include "loader/ldt_keeper.h"
-#endif
-
-#include "loader/qtx/qtxsdk/components.h"
-#include "loader/wine/winbase.h"
-#include "loader/wine/windef.h"
-
-#include "codec-cfg.h"
-#include "stream/stream.h"
-#include "libmpdemux/demuxer.h"
-#include "libmpdemux/stheader.h"
-
-#include "stream/stream.h"
-#include "libmpdemux/muxer.h"
-
-#include "img_format.h"
-#include "mp_image.h"
-#include "vf.h"
-
-
-static HINSTANCE qtime_qts; //handle to preloaded quicktime.qts
-static HMODULE handler;
-
-static OSErr (*FindCodec)(CodecType cType,
- CodecComponent specCodec,
- CompressorComponent * compressor,
- DecompressorComponent * decompressor);
-static OSErr (*InitializeQTML)(long flags);
-static PixMapHandle (*GetGWorldPixMap)(GWorldPtr offscreenGWorld);
-static OSErr (*QTNewGWorldFromPtr)(GWorldPtr *gw,
- OSType pixelFormat,
- const Rect *boundsRect,
- CTabHandle cTable,
- /*GDHandle*/void* aGDevice, /*unused anyway*/
- GWorldFlags flags,
- void *baseAddr,
- long rowBytes);
-static Handle (*NewHandleClear)(Size byteCount);
-static OSErr (*CompressSequenceBegin) (
- ImageSequence *seqID,
- PixMapHandle src,
- PixMapHandle prev,
- const Rect *srcRect,
- const Rect *prevRect,
- short colorDepth,
- CodecType cType,
- CompressorComponent codec,
- CodecQ spatialQuality,
- CodecQ temporalQuality,
- long keyFrameRate,
- CTabHandle ctable,
- CodecFlags flags,
- ImageDescriptionHandle desc );
-
-static OSErr (*CompressSequenceFrame) (
- ImageSequence seqID,
- PixMapHandle src,
- const Rect *srcRect,
- CodecFlags flags,
- Ptr data,
- long *dataSize,
- UInt8 *similarity,
- ICMCompletionProcRecordPtr asyncCompletionProc );
-
-static OSErr (*GetMaxCompressionSize)(PixMapHandle src,
- const Rect *srcRect,
- short colorDepth,
- CodecQ quality,
- CodecType cType,
- CompressorComponent codec,
- long *size );
-static OSErr (*CDSequenceEnd)( ImageSequence seqID );
-static Component (*FindNextComponent)(Component prev,ComponentDescription* desc);
-static long (*CountComponents)(ComponentDescription* desc);
-static OSErr (*GetComponentInfo)(Component prev,ComponentDescription* desc,Handle h1,Handle h2,Handle h3);
-
-
-
-//static int format=mmioFOURCC('S','V','Q','1');
-static int format=mmioFOURCC('S','V','Q','3');
-
-
-
-//static void *frame_in; //input frame
-static void *frame_prev; //previous frame
-static void *frame_comp; //compressed frame
-static GWorldPtr frame_GWorld_in = NULL;//a GWorld is some kind of description for a drawing environment
-static GWorldPtr frame_GWorld_prev = NULL;
-static Rect FrameRect;
-
-static CompressorComponent compressor;
-static ImageDescriptionHandle desc;
-static ImageSequence seq;
-
-
-
-
-
-struct vf_priv_s {
- muxer_stream_t* mux;
- //dv_encoder_t* enc;
-
-};
-#define mux_v (vf->priv->mux)
-
-//===========================================================================//
-
-static int config(struct vf_instance *vf,
- int width, int height, int d_width, int d_height,
- unsigned int flags, unsigned int outfmt){
-// OSErr cres;
- ComponentDescription cdesc;
- mux_v->bih->biWidth=width;
- mux_v->bih->biHeight=height;
- mux_v->bih->biSizeImage=width*height*2;
- mux_v->aspect = (float)d_width/d_height;
-
-
-
- memset(&cdesc,0,sizeof(cdesc));
- cdesc.componentType= (((unsigned char)'i')<<24)|
- (((unsigned char)'m')<<16)|
- (((unsigned char)'c')<<8)|
- (((unsigned char)'o'));
-
- cdesc.componentSubType=bswap_32(format);
- cdesc.componentManufacturer=0;
- cdesc.componentFlags=0;
- cdesc.componentFlagsMask=0;
-
-
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"Count = %ld\n",CountComponents(&cdesc));
- compressor=FindNextComponent(NULL,&cdesc);
- if(!compressor){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"Cannot find requested component\n");
- return 0;
- }
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"Found it! ID = %p\n",compressor);
-
-// cres= FindCodec (fourcc,anyCodec,&compressor,&decompressor );
-// printf("FindCodec returned:%i compressor: 0x%X decompressor: 0x%X\n",cres&0xFFFF,compressor,decompressor);
-
- return 1;
-}
-
-static int control(struct vf_instance *vf, int request, void* data){
-
- return CONTROL_UNKNOWN;
-}
-
-static int query_format(struct vf_instance *vf, unsigned int fmt){
- if(fmt==IMGFMT_YUY2) return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW;
- return 0;
-}
-
-static int codec_initialized = 0;
-
-static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
-
- OSErr cres;
- long framesizemax;
- UInt8 similarity=0;
- long compressedsize;
- OSType in_format=kYUVSPixelFormat;
- int width = mpi->width;
- int height = mpi->height;
- int stride = width*2;
-if(!codec_initialized){
- FrameRect.top=0;
- FrameRect.left=0;
- FrameRect.right=width;
- FrameRect.bottom=height;
- cres = QTNewGWorldFromPtr(
- &frame_GWorld_in,
- in_format,
- &FrameRect,
- 0,
- 0,
- 0,
- mpi->planes[0],
- stride);
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"NewGWorldFromPtr returned:%i\n",cres&0xFFFF);
- //dunno what todo about this
- frame_prev = malloc(stride * height);
- cres = QTNewGWorldFromPtr(
- &frame_GWorld_prev,
- in_format,
- &FrameRect,
- 0,
- 0,
- 0,
- frame_prev,
- stride);
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"height:%i width:%i stride:%i\n",height,width,stride);
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"NewGWorldFromPtr returned:%i\n",cres&0xFFFF);
- cres= GetMaxCompressionSize (
- GetGWorldPixMap(frame_GWorld_in),
- &FrameRect,
- 24,
- codecNormalQuality,
- bswap_32(format),
- compressor,
- &framesizemax );
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"GetMaxCompressionSize returned:%i : MaxSize:%li\n",cres&0xFFFF,framesizemax);
- frame_comp=malloc(framesizemax);
-
- desc = (ImageDescriptionHandle)NewHandleClear(MAX_IDSIZE); //memory where the desc will be stored
- (*desc)->idSize=MAX_IDSIZE;
-
- cres= CompressSequenceBegin (
- &seq,
- GetGWorldPixMap( frame_GWorld_in),
- GetGWorldPixMap( frame_GWorld_prev),
- &FrameRect,
- &FrameRect,
- 24, // color depth
- bswap_32(format), // fourcc
- compressor, // codec component
- codecNormalQuality, //codecNormalQuality,
- codecMaxQuality, //codecNormalQuality,
- 10*30, // keyframe rate
- 0,
- 0,
- desc);
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"CompressSequenceBegin returned:%i\n",cres&0xFFFF);
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"Sequence ID:%i\n",seq);
-
- dump_ImageDescription(*desc);
- codec_initialized++;
-}
- cres = CompressSequenceFrame (
- seq,
- GetGWorldPixMap(frame_GWorld_in),
- &FrameRect,
- 0,
- (char*)mux_v->buffer,
- &compressedsize,
- &similarity,
- 0);
-
- if(cres&0xFFFF)mp_msg(MSGT_MENCODER,MSGL_DBG2,"CompressSequenceFrame returned:%i\n",cres&0xFFFF);
-#if 0
- printf("Size %i->%i \n",stride*height,compressedsize);
- printf("Ratio: %i:1\n",(stride*height)/compressedsize);
-#endif
- muxer_write_chunk(mux_v, compressedsize , similarity?0:0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
-
- if(((*desc)->idSize)>MAX_IDSIZE){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"FATAL! idSize=%d too big, increase MAX_IDSIZE in ve_qtvideo.c!\n",((*desc)->idSize));
- } else {
- // according to QT docs, imagedescription may be changed while encoding
- // a frame (even its size may (and does!) change!)
- memcpy(mux_v->bih+1,*desc,(*desc)->idSize);
- }
-
- return 1;
-}
-
-//===========================================================================//
-
-static int vf_open(vf_instance_t *vf, char* args){
- OSErr cres = 1;
- vf->config=config;
- vf->default_caps=VFCAP_CONSTANT;
- vf->control=control;
- vf->query_format=query_format;
- vf->put_image=put_image;
- vf->priv=malloc(sizeof(struct vf_priv_s));
- memset(vf->priv,0,sizeof(struct vf_priv_s));
- vf->priv->mux=(muxer_stream_t*)args;
-
- mux_v->bih=calloc(1, sizeof(BITMAPINFOHEADER)+MAX_IDSIZE);
- mux_v->bih->biSize=sizeof(BITMAPINFOHEADER)+MAX_IDSIZE;
- mux_v->bih->biWidth=0;
- mux_v->bih->biHeight=0;
- mux_v->bih->biCompression=format;
- mux_v->bih->biPlanes=1;
- mux_v->bih->biBitCount=24;
-
-
-#ifdef WIN32_LOADER
- Setup_LDT_Keeper();
-#endif
- //preload quicktime.qts to avoid the problems caused by the hardcoded path inside the dll
- qtime_qts = LoadLibraryA("QuickTime.qts");
- if(!qtime_qts){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"unable to load QuickTime.qts\n" );
- return 0;
- }
-
- handler = LoadLibraryA("qtmlClient.dll");
- if(!handler){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"unable to load qtmlClient.dll\n");
- return 0;
- }
- InitializeQTML = (OSErr (*)(long))GetProcAddress(handler, "InitializeQTML");
- GetGWorldPixMap = (PixMapHandle (*)(GWorldPtr))GetProcAddress(handler, "GetGWorldPixMap");
- QTNewGWorldFromPtr = (OSErr(*)(GWorldPtr *,OSType,const Rect *,CTabHandle,void*,GWorldFlags,void *,long))GetProcAddress(handler, "QTNewGWorldFromPtr");
- NewHandleClear = (OSErr(*)(Size))GetProcAddress(handler, "NewHandleClear");
- FindCodec = (OSErr (*)(CodecType,CodecComponent,CompressorComponent *,DecompressorComponent *))GetProcAddress(handler,"FindCodec");
- CompressSequenceBegin = (OSErr(*)(ImageSequence *,PixMapHandle,PixMapHandle,const Rect *,const Rect *,short,CodecType,CompressorComponent,CodecQ,CodecQ,long,CTabHandle,CodecFlags,ImageDescriptionHandle))GetProcAddress(handler,"CompressSequenceBegin");
- CompressSequenceFrame = (OSErr(*)(ImageSequence,PixMapHandle,const Rect *,CodecFlags,Ptr,long *,UInt8 *,ICMCompletionProcRecordPtr))GetProcAddress(handler,"CompressSequenceFrame");
- GetMaxCompressionSize = (OSErr(*)(PixMapHandle,const Rect *,short,CodecQ,CodecType,CompressorComponent,long *))GetProcAddress(handler,"GetMaxCompressionSize");
- CDSequenceEnd = (OSErr (*)(ImageSequence))GetProcAddress(handler,"CDSequenceEnd");
- FindNextComponent = (Component (*)(Component,ComponentDescription*))GetProcAddress(handler, "FindNextComponent");
- CountComponents = (long (*)(ComponentDescription*))GetProcAddress(handler, "CountComponents");
- GetComponentInfo = (OSErr (*)(Component,ComponentDescription*,Handle,Handle,Handle))GetProcAddress(handler, "GetComponentInfo");
- if(!InitializeQTML ||!CompressSequenceBegin){
- mp_msg(MSGT_MENCODER,MSGL_ERR,"invalid qt DLL!\n");
- return 0;
- }
- //printf("%i,%i,%i\n",mmioFOURCC('S','V','Q','1'),'SVQ1',bswap_32(mmioFOURCC('S','V','Q','1')));
- cres=InitializeQTML(6+16);
- mp_msg(MSGT_MENCODER,MSGL_DBG2,"InitializeQTML returned %i\n",cres);
- return 1;
-}
-
-vf_info_t ve_info_qtvideo = {
- "Quicktime video encoder using win32 DLLs",
- "qtvideo",
- "Sascha Sommer",
- "for internal use by mencoder",
- vf_open
-};
-
-//===========================================================================//