Home | History | Annotate | Download | only in src

Lines Matching refs:fm

68 	MixFrameManager *fm = MIX_FRAMEMANAGER(obj);
71 mix_framemanager_deinitialize(fm);
73 if (fm->lock) {
74 g_mutex_free(fm->lock);
75 fm->lock = NULL;
84 MixFrameManager *mix_framemanager_ref(MixFrameManager * fm) {
85 return (MixFrameManager *) g_object_ref(G_OBJECT(fm));
90 MIX_RESULT mix_framemanager_initialize(MixFrameManager *fm,
96 if (!MIX_IS_FRAMEMANAGER(fm) || (mode != MIX_FRAMEORDER_MODE_DISPLAYORDER
102 if (fm->initialized) {
111 if (!fm->lock) {
112 fm->lock = g_mutex_new();
113 if (!fm->lock) {
119 fm->frame_array = g_ptr_array_sized_new(INITIAL_FRAME_ARRAY_SIZE);
120 if (!fm->frame_array) {
125 fm->frame_queue = g_queue_new();
126 if (!fm->frame_queue) {
130 fm->framerate_numerator = framerate_numerator;
131 fm->framerate_denominator = framerate_denominator;
132 fm->frame_timestamp_delta = fm->framerate_denominator * MIX_SECOND
133 / fm->framerate_numerator;
135 fm->mode = mode;
137 fm->timebased_ordering = timebased_ordering;
139 fm->initialized = TRUE;
146 if (fm->frame_array) {
147 g_ptr_array_free(fm->frame_array, TRUE);
148 fm->frame_array = NULL;
150 if (fm->frame_queue) {
151 g_queue_free(fm->frame_queue);
152 fm->frame_queue = NULL;
157 MIX_RESULT mix_framemanager_deinitialize(MixFrameManager *fm) {
159 if (!MIX_IS_FRAMEMANAGER(fm)) {
163 if (!fm->lock) {
167 if (!fm->initialized) {
171 mix_framemanager_flush(fm);
173 g_mutex_lock(fm->lock);
175 if (fm->frame_array) {
176 g_ptr_array_free(fm->frame_array, TRUE);
177 fm->frame_array = NULL;
179 if (fm->frame_queue) {
180 g_queue_free(fm->frame_queue);
181 fm->frame_queue = NULL;
184 fm->initialized = FALSE;
186 g_mutex_unlock(fm->lock);
191 MIX_RESULT mix_framemanager_set_framerate(MixFrameManager *fm,
194 if (!MIX_IS_FRAMEMANAGER(fm)) {
198 if (!fm->lock) {
206 g_mutex_lock(fm->lock);
208 fm->framerate_numerator = framerate_numerator;
209 fm->framerate_denominator = framerate_denominator;
210 fm->frame_timestamp_delta = fm->framerate_denominator * MIX_SECOND
211 / fm->framerate_numerator;
213 g_mutex_unlock(fm->lock);
218 MIX_RESULT mix_framemanager_get_framerate(MixFrameManager *fm,
221 if (!MIX_IS_FRAMEMANAGER(fm)) {
225 if (!fm->lock) {
233 g_mutex_lock(fm->lock);
235 *framerate_numerator = fm->framerate_numerator;
236 *framerate_denominator = fm->framerate_denominator;
238 g_mutex_unlock(fm->lock);
243 MIX_RESULT mix_framemanager_get_frame_order_mode(MixFrameManager *fm,
246 if (!MIX_IS_FRAMEMANAGER(fm)) {
250 if (!fm->lock) {
259 *mode = fm->mode;
264 MIX_RESULT mix_framemanager_flush(MixFrameManager *fm) {
266 if (!MIX_IS_FRAMEMANAGER(fm)) {
270 if (!fm->initialized) {
274 g_mutex_lock(fm->lock);
277 if (fm->frame_array) {
278 guint len = fm->frame_array->len;
283 frame = (MixVideoFrame *) g_ptr_array_index(fm->frame_array,
287 g_ptr_array_index(fm->frame_array, idx) = NULL;
290 /* g_ptr_array_remove_range(fm->frame_array, 0, len); */
294 if (fm->frame_queue) {
295 guint len = fm->frame_queue->length;
298 while ((frame = (MixVideoFrame *) g_queue_pop_head(fm->frame_queue))) {
304 if(fm->p_frame) {
305 mix_videoframe_unref(fm->p_frame);
306 fm->p_frame = NULL;
308 fm->prev_timestamp = 0;
310 fm->eos = FALSE;
312 fm->is_first_frame = TRUE;
314 g_mutex_unlock(fm->lock);
418 MIX_RESULT mix_framemanager_timestamp_based_enqueue(MixFrameManager *fm,
445 if (fm->is_first_frame) {
450 g_queue_push_tail(fm->frame_queue, (gpointer) mvf);
455 fm->next_frame_timestamp = timestamp + fm->frame_timestamp_delta;
457 fm->is_first_frame = FALSE;
466 guint64 tolerance = fm->frame_timestamp_delta / 4;
475 if (timestamp <= fm->next_frame_timestamp + tolerance) {
480 g_queue_push_tail(fm->frame_queue, (gpointer) mvf);
485 if (timestamp >= fm->next_frame_timestamp - tolerance)
487 fm->next_frame_timestamp = timestamp + fm->frame_timestamp_delta;
496 fm->frame_array, fm->next_frame_timestamp, tolerance,
499 g_queue_push_tail(fm->frame_queue, (gpointer) frame_from_array);
504 if (timestamp_frame_array >= fm->next_frame_timestamp - tolerance)
506 fm->next_frame_timestamp = timestamp_frame_array
507 + fm->frame_timestamp_delta;
528 guint len = fm->frame_array->len;
534 fm->frame_array, idx);
537 g_ptr_array_index(fm->frame_array, idx) = NULL;
542 fm->is_first_frame = TRUE;
551 guint64 tolerance = fm->frame_timestamp_delta / 4;
556 fm->frame_array, timestamp, tolerance,
559 g_queue_push_tail(fm->frame_queue, (gpointer) frame_from_array);
564 if (timestamp_frame_array >= fm->next_frame_timestamp - tolerance)
566 fm->next_frame_timestamp = timestamp_frame_array
567 + fm->frame_timestamp_delta;
574 add_frame_into_array(fm->frame_array, mvf);
582 MIX_RESULT mix_framemanager_frametype_based_enqueue(MixFrameManager *fm,
611 if (fm->is_first_frame) {
619 g_queue_push_tail(fm->frame_queue, (gpointer) mvf);
620 fm->is_first_frame = FALSE;
628 if (fm->p_frame) {
630 ret = mix_videoframe_set_timestamp(fm->p_frame,
631 fm->prev_timestamp);
636 g_queue_push_tail(fm->frame_queue, (gpointer) fm->p_frame);
637 fm->p_frame = NULL;
643 g_queue_push_tail(fm->frame_queue, (gpointer) mvf);
648 fm->p_frame = mvf;
649 fm->prev_timestamp = timestamp;
656 if (timestamp > fm->prev_timestamp) {
657 ret = mix_videoframe_set_timestamp(mvf, fm->prev_timestamp);
663 fm->prev_timestamp = timestamp;
665 g_queue_push_tail(fm->frame_queue, (gpointer) mvf);
675 MIX_RESULT mix_framemanager_enqueue(MixFrameManager *fm, MixVideoFrame *mvf) {
679 /*fm->mode = MIX_FRAMEORDER_MODE_DECODEORDER;*/
685 if (!MIX_IS_FRAMEMANAGER(fm)) {
689 if (!fm->initialized) {
696 if (fm->mode != MIX_FRAMEORDER_MODE_DISPLAYORDER && fm->mode
701 g_mutex_lock(fm->lock);
704 if (fm->mode == MIX_FRAMEORDER_MODE_DECODEORDER) {
708 g_queue_push_tail(fm->frame_queue, (gpointer) mvf);
712 if (fm->timebased_ordering) {
713 ret = mix_framemanager_timestamp_based_enqueue(fm, mvf);
715 ret = mix_framemanager_frametype_based_enqueue(fm, mvf);
719 g_mutex_unlock(fm->lock);
724 MIX_RESULT mix_framemanager_dequeue(MixFrameManager *fm, MixVideoFrame **mvf) {
728 if (!MIX_IS_FRAMEMANAGER(fm)) {
736 if (!fm->initialized) {
740 g_mutex_lock(fm->lock);
743 *mvf = (MixVideoFrame *) g_queue_pop_head(fm->frame_queue);
746 } else if (fm->eos) {
750 g_mutex_unlock(fm->lock);
755 MIX_RESULT mix_framemanager_eos(MixFrameManager *fm) {
759 if (!MIX_IS_FRAMEMANAGER(fm)) {
763 if (!fm->initialized) {
767 g_mutex_lock(fm->lock);
769 fm->eos = TRUE;
771 g_mutex_unlock(fm->lock);