* \brief abstraction for all consumer services
* \see mlt_consumer_s
*
- * Copyright (C) 2003-2009 Ushodaya Enterprises Limited
+ * Copyright (C) 2003-2010 Ushodaya Enterprises Limited
* \author Charles Yates <charles.yates@pandora.be>
+ * \author Dan Dennedy <dan@dennedy.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* filters, defaults to "bilinear"
* \properties \em buffer the number of frames to use in the asynchronous
* render thread, defaults to 25
+ * \properties \em prefill the number of frames to render before commencing
+ * output when real_time <> 0, defaults to the size of buffer
+ * \properties \em drop_max the maximum number of consecutively dropped frames, defaults to 5
* \properties \em frequency the audio sample rate to use in Hertz, defaults to 48000
* \properties \em channels the number of audio channels to use, defaults to 2
* \properties \em real_time the asynchronous behavior: 1 (default) for asynchronous
* \properties \em test_card the name of a resource to use as the test card, defaults to
* environment variable MLT_TEST_CARD. If undefined, the hard-coded default test card is
* white silence. A test card is what appears when nothing is produced.
- * \event \em consumer-frame-show Subclass implementations should fire this.
- * \event \em consumer-frame-render The abstract class fires this.
- * \event \em consumer-stopped
+ * \event \em consumer-frame-show Subclass implementations fire this immediately after showing a frame
+ * or when a frame should be shown (if audio-only consumer).
+ * \event \em consumer-frame-render The base class fires this immediately before rendering a frame.
+ * \event \em consumer-thread-create Override the implementation of creating and
+ * starting a thread by listening and responding to this (real_time 1 or -1 only).
+ * \event \em consumer-thread-join Override the implementation of waiting and
+ * joining a terminated thread by listening and responding to this (real_time 1 or -1 only).
+ * \event \em consumer-thread-started The base class fires when beginning execution of a rendering thread.
+ * \event \em consumer-thread-stopped The base class fires when a rendering thread has ended.
+ * \event \em consumer-stopping This is fired when stop was requested, but before render threads are joined.
+ * \event \em consumer-stopped This is fired when the subclass implementation calls mlt_consumer_stopped().
* \properties \em fps video frames per second as floating point (read only)
* \properties \em frame_rate_num the numerator of the video frame rate, overrides \p mlt_profile_s
* \properties \em frame_rate_den the denominator of the video frame rate, overrides \p mlt_profile_s
* \properties \em display_ratio the video frame aspect ratio as floating point (read only)
* \properties \em display_aspect_num the numerator of the video frame aspect ratio, overrides \p mlt_profile_s
* \properties \em display_aspect_den the denominator of the video frame aspect ratio, overrides \p mlt_profile_s
- *
+ * \properties \em priority the OS scheduling priority for the render threads when real_time is not 0.
+ * \properties \em top_field_first when not progressive, whether interlace field order is top-field-first, defaults to 0.
+ * Set this to -1 if the consumer does not care about the field order.
+ * \properties \em mlt_image_format the image format to request in rendering threads, defaults to yuv422
+ * \properties \em mlt_audio_format the audio format to request in rendering threads, defaults to S16
*/
struct mlt_consumer_s
*/
int ( *is_stopped )( mlt_consumer );
+ /** Purge the consumer of buffered data (virtual function).
+ *
+ * \param mlt_consumer a consumer
+ */
+ void ( *purge )( mlt_consumer );
+
/** The destructor virtual function
*
* \param mlt_consumer a consumer
void *local; /**< \private instance object */
void *child; /**< \private the object of a subclass */
-
- int real_time;
- int ahead;
- mlt_image_format format;
- mlt_deque frame_queue;
- pthread_t ahead_thread;
- pthread_mutex_t frame_queue_mutex;
- pthread_cond_t frame_queue_cond;
- pthread_mutex_t put_mutex;
- pthread_cond_t put_cond;
- mlt_frame put;
- int put_active;
- mlt_event event_listener;
- mlt_position position;
-
- mlt_deque worker_threads;
- mlt_deque done_queue;
- pthread_mutex_t done_queue_mutex;
- pthread_cond_t done_queue_cond;
};
#define MLT_CONSUMER_SERVICE( consumer ) ( &( consumer )->parent )