From a471de34bf1d316e98b2bd81829c7fff343ac375 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Tue, 27 Feb 2007 11:30:19 +0000 Subject: sys/osxvideo/: Disable the cocoa event loop since it's a huge memory leak. Should only matter if the sink isn't used ... Original commit message from CVS: * sys/osxvideo/cocoawindow.h: * sys/osxvideo/cocoawindow.m: * sys/osxvideo/osxvideosink.h: * sys/osxvideo/osxvideosink.m: Disable the cocoa event loop since it's a huge memory leak. Should only matter if the sink isn't used within an NSApp (which has already got a coca event loop). Remove all unused code. --- sys/osxvideo/cocoawindow.h | 15 ------- sys/osxvideo/cocoawindow.m | 97 --------------------------------------------- sys/osxvideo/osxvideosink.h | 21 ---------- sys/osxvideo/osxvideosink.m | 18 +-------- 4 files changed, 2 insertions(+), 149 deletions(-) (limited to 'sys/osxvideo') diff --git a/sys/osxvideo/cocoawindow.h b/sys/osxvideo/cocoawindow.h index c4a774d1..87f592aa 100644 --- a/sys/osxvideo/cocoawindow.h +++ b/sys/osxvideo/cocoawindow.h @@ -53,21 +53,6 @@ struct _GstOSXImage; @end -@interface GstView : NSQuickDrawView { - int width, height; - gboolean isPortSet; - void* port; -/* Quicktime Sequence */ - ImageSequence qtseqid; - ImageDescriptionHandle imgdesc; - struct _GstOSXImage* curimg; -} -- (void) drawRect: (NSRect) rect; -- (id) initWithFrame: (NSRect) frame; -- (void) setVideoSize: (int) w: (int) h; -- (void) setVideoImage: (GstBuffer*) img; -@end - @interface GstOSXVideoSinkWindow: NSWindow { int width, height; GstGLView *gstview; diff --git a/sys/osxvideo/cocoawindow.m b/sys/osxvideo/cocoawindow.m index e5f7694a..ef881a21 100644 --- a/sys/osxvideo/cocoawindow.m +++ b/sys/osxvideo/cocoawindow.m @@ -93,103 +93,6 @@ @end -// -// GstView -// Deprecated QuickDraw implementation -// - -@ implementation GstView - -- (void) drawRect:(NSRect) rect { - /*NSRect bounds = [self bounds]; - [[NSColor greenColor] set]; - [NSBezierPath fillRect:bounds]; */ - [[NSColor blackColor] set]; - NSRectFill (rect); - [super drawRect:rect]; -} - -- (id) initWithFrame:(NSRect) frame { - NSRect bounds =[self bounds]; - - [[NSColor greenColor] set]; - - self =[super initWithFrame:frame]; - isPortSet = FALSE; - [NSBezierPath fillRect:bounds]; - return self; -} - -- (void) setVideoSize: (int) w:(int) h { - GST_LOG ("width:%d height:%d", w, h); - - width = w; - height = h; -} - -- (void) setVideoImage:(GstBuffer *) img { - if (isPortSet == FALSE) { - // first image - //GWorldPtr imgGWorld; - //Rect coords; - OSErr err; - ImageDescriptionPtr pimgdesc; - - err = EnterMovies (); - - if (err != noErr) - GST_ERROR ("EnterMovies error: %d", err); - /*SetRect(&coords,0,0,width,height); - NewGWorldFromPtr (&imgGWorld, kYUV420CodecType, &coords, 0, 0, 0, GST_BUFFER_DATA(img), width * 4); - MakeImageDescriptionForPixMap (GetGWorldPixMap(imgGWorld), &imgdesc); - DisposeGWorld(imgGWorld); */ - imgdesc = - (ImageDescriptionHandle) NewHandleClear (sizeof (ImageDescription)); - pimgdesc = *imgdesc; - pimgdesc->idSize = sizeof (ImageDescription); - pimgdesc->cType = kYUV420CodecType; - pimgdesc->version = 1; - pimgdesc->revisionLevel = 0; - pimgdesc->vendor = 'appl'; - pimgdesc->width = width; - pimgdesc->height = height; - pimgdesc->hRes = Long2Fix (72); - pimgdesc->vRes = Long2Fix (72); - pimgdesc->spatialQuality = codecLosslessQuality; - pimgdesc->frameCount = 1; - pimgdesc->clutID = -1; - pimgdesc->dataSize = 0; - pimgdesc->depth = 12; - - [self lockFocus]; - port =[self qdPort]; - g_warning ("port = 0x%x", (int) port); - err = DecompressSequenceBeginS (&qtseqid, imgdesc, NULL, 0, port, NULL, NULL, NULL, 0, // srcCopy - NULL, codecFlagUseImageBuffer, codecLosslessQuality, bestSpeedCodec); - if (err != noErr) { - GST_DEBUG ("DecompressSequenceBeginS error: %d", err); - } - [self unlockFocus]; - isPortSet = TRUE; - } - - OSErr err; - CodecFlags flags; - - GST_DEBUG ("qtseqid: %d img data: %p size: %d", (int) qtseqid, - GST_BUFFER_DATA (img), GST_BUFFER_SIZE (img)); - err = - DecompressSequenceFrameS (qtseqid, (char *) GST_BUFFER_DATA (img), - GST_BUFFER_SIZE (img), codecFlagUseImageBuffer, &flags, NULL); - if (err != noErr) { - GST_DEBUG ("DecompressSequenceS erro: %d", err); - } else { - //QDFlushPortBuffer (port, nil); - } - -} - -@end // // OpenGL implementation diff --git a/sys/osxvideo/osxvideosink.h b/sys/osxvideo/osxvideosink.h index b2577512..f03d1bde 100644 --- a/sys/osxvideo/osxvideosink.h +++ b/sys/osxvideo/osxvideosink.h @@ -52,24 +52,6 @@ typedef struct _GstOSXVideoSinkClass GstOSXVideoSinkClass; #define GST_TYPE_OSXVIDEOBUFFER (gst_osxvideobuffer_get_type()) -#define GST_IS_OSXVIDEOBUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_OSXVIDEOBUFFER)) -#define GST_OSXVIDEOBUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_OSXVIDEOBUFFER, GstOSXVideoBuffer)) - -typedef struct _GstOSXVideoBuffer GstOSXVideoBuffer; - -struct _GstOSXVideoBuffer { - GstBuffer buffer; /* We extend GstBuffer */ - - CVOpenGLTextureRef texture; - - gint width; - gint height; - - gboolean locked; - - GstOSXVideoSink *osxvideosink; -}; - /* OSXWindow stuff */ struct _GstOSXWindow { gint width, height; @@ -82,9 +64,6 @@ struct _GstOSXVideoSink { /* Our element stuff */ GstVideoSink videosink; - GMutex *pool_lock; - GSList *buffer_pool; - GstOSXWindow *osxwindow; gint fps_n; diff --git a/sys/osxvideo/osxvideosink.m b/sys/osxvideo/osxvideosink.m index f3f09975..43b514fc 100644 --- a/sys/osxvideo/osxvideosink.m +++ b/sys/osxvideo/osxvideosink.m @@ -60,6 +60,7 @@ enum static GstVideoSinkClass *parent_class = NULL; /* cocoa event loop - needed if not run in own app */ +/* FIXME : currently disabled since a huge memory leak happens if it is run. */ gpointer cocoa_event_loop (GstOSXVideoSink * vsink) { @@ -108,7 +109,7 @@ gst_osx_video_sink_osxwindow_new (GstOSXVideoSink * osxvideosink, gint width, [pool release]; /* Start Cocoa event loop */ - g_thread_create ((GThreadFunc) cocoa_event_loop, osxvideosink, FALSE, NULL); +// g_thread_create ((GThreadFunc) cocoa_event_loop, osxvideosink, FALSE, NULL); } else { /* Needs to be embedded */ @@ -147,7 +148,6 @@ gst_osx_video_sink_osxwindow_resize (GstOSXVideoSink * osxvideosink, g_return_if_fail (osxwindow != NULL); g_return_if_fail (GST_IS_OSX_VIDEO_SINK (osxvideosink)); - //SizeWindow (osxwindow->win, width, height, 1); osxwindow->width = width; osxwindow->height = height; @@ -341,18 +341,6 @@ gst_osx_video_sink_get_property (GObject * object, guint prop_id, } } -static void -gst_osx_video_sink_dispose (GObject * object) -{ - GstOSXVideoSink *osxvideosink; - - osxvideosink = GST_OSX_VIDEO_SINK (object); - - g_mutex_free (osxvideosink->pool_lock); - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - static void gst_osx_video_sink_init (GstOSXVideoSink * osxvideosink) { @@ -396,11 +384,9 @@ gst_osx_video_sink_class_init (GstOSXVideoSinkClass * klass) parent_class = g_type_class_ref (GST_TYPE_VIDEO_SINK); - gobject_class->dispose = gst_osx_video_sink_dispose; gobject_class->set_property = gst_osx_video_sink_set_property; gobject_class->get_property = gst_osx_video_sink_get_property; - //gstbasesink_class->get_times = gst_osx_video_sink_get_times; gstbasesink_class->set_caps = gst_osx_video_sink_setcaps; gstbasesink_class->preroll = gst_osx_video_sink_show_frame; gstbasesink_class->render = gst_osx_video_sink_show_frame; -- cgit