| /* GStreamer mpeg2enc (mjpegtools) wrapper |
| * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net> |
| * (c) 2006 Mark Nauwelaerts <manauw@skynet.be> |
| * |
| * gstmpeg2enc.hh: object definition |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library 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 |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #ifndef __GST_MPEG2ENC_H__ |
| #define __GST_MPEG2ENC_H__ |
| |
| #include <gst/gst.h> |
| #include <gst/video/video.h> |
| |
| #include "gstmpeg2encoptions.hh" |
| #include "gstmpeg2encoder.hh" |
| |
| G_BEGIN_DECLS |
| |
| #define GST_TYPE_MPEG2ENC \ |
| (gst_mpeg2enc_get_type ()) |
| #define GST_MPEG2ENC(obj) \ |
| (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MPEG2ENC, GstMpeg2enc)) |
| #define GST_MPEG2ENC_CLASS(klass) \ |
| (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MPEG2ENC, GstMpeg2enc)) |
| #define GST_IS_MPEG2ENC(obj) \ |
| (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MPEG2ENC)) |
| #define GST_IS_MPEG2ENC_CLASS(obj) \ |
| (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MPEG2ENC)) |
| |
| GST_DEBUG_CATEGORY_EXTERN (mpeg2enc_debug); |
| #define GST_CAT_DEFAULT mpeg2enc_debug |
| |
| #define GST_MPEG2ENC_MUTEX_LOCK(m) G_STMT_START { \ |
| GST_LOG_OBJECT (m, "locking tlock from thread %p", g_thread_self ()); \ |
| g_mutex_lock (&m->tlock); \ |
| GST_LOG_OBJECT (m, "locked tlock from thread %p", g_thread_self ()); \ |
| } G_STMT_END |
| |
| #define GST_MPEG2ENC_MUTEX_UNLOCK(m) G_STMT_START { \ |
| GST_LOG_OBJECT (m, "unlocking tlock from thread %p", g_thread_self ()); \ |
| g_mutex_unlock (&m->tlock); \ |
| } G_STMT_END |
| |
| #define GST_MPEG2ENC_WAIT(m) G_STMT_START { \ |
| GST_LOG_OBJECT (m, "thread %p waiting", g_thread_self ()); \ |
| g_cond_wait (&m->cond, &m->tlock); \ |
| } G_STMT_END |
| |
| #define GST_MPEG2ENC_SIGNAL(m) G_STMT_START { \ |
| GST_LOG_OBJECT (m, "signalling from thread %p", g_thread_self ()); \ |
| g_cond_signal (&m->cond); \ |
| } G_STMT_END |
| |
| typedef struct _GstMpeg2enc { |
| GstElement parent; |
| |
| /* pads */ |
| GstPad *sinkpad, *srcpad; |
| |
| /* video info for in caps */ |
| GstVideoInfo vinfo; |
| |
| /* options wrapper */ |
| GstMpeg2EncOptions *options; |
| |
| /* general encoding object (contains rest) */ |
| GstMpeg2Encoder *encoder; |
| |
| /* lock for syncing with encoding task */ |
| GMutex tlock; |
| /* with TLOCK */ |
| /* signals counterpart thread that something changed; |
| * buffer ready for task or buffer has been processed */ |
| GCond cond; |
| /* seen eos */ |
| gboolean eos; |
| /* flowreturn obtained by encoding task */ |
| GstFlowReturn srcresult; |
| /* buffer for encoding task */ |
| GstBuffer *buffer; |
| /* timestamps for output */ |
| GQueue *time; |
| |
| } GstMpeg2enc; |
| |
| typedef struct _GstMpeg2encClass { |
| GstElementClass parent; |
| } GstMpeg2encClass; |
| |
| GType gst_mpeg2enc_get_type (void); |
| |
| G_END_DECLS |
| |
| #endif /* __GST_MPEG2ENC_H__ */ |