/* * GStreamer * Copyright (C) 2013 Fluendo S.L. <support@fluendo.com> * Authors: Andoni Morales Alastruey <amorales@fluendo.com> * * 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GST_AVF_ASSET_SRC_H__ #define __GST_AVF_ASSET_SRC_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include <gst/gst.h> #include <gst/base/base.h> #include <gst/audio/audio.h> #import <AVFoundation/AVFoundation.h> #import <AVFoundation/AVAssetReader.h> #import <AVFoundation/AVAssetReaderOutput.h> G_BEGIN_DECLS #define GST_TYPE_AVF_ASSET_SRC \ (gst_avf_asset_src_get_type()) #define GST_AVF_ASSET_SRC_READER(obj) \ ((__bridge GstAVFAssetReader *)(obj->reader)) #define GST_AVF_ASSET_SRC(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AVF_ASSET_SRC,GstAVFAssetSrc)) #define GST_AVF_ASSET_SRC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AVF_ASSET_SRC,GstAVFAssetSrcClass)) #define GST_IS_AVF_ASSET_SRC(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AVF_ASSET_SRC)) #define GST_IS_AVF_ASSET_SRC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVF_ASSET_SRC)) #define GST_AVF_ASSET_SRC_ERROR gst_avf_asset_src_error_quark () typedef struct _GstAVFAssetSrc GstAVFAssetSrc; typedef struct _GstAVFAssetSrcClass GstAVFAssetSrcClass; typedef enum { GST_AVF_ASSET_READER_MEDIA_TYPE_AUDIO, GST_AVF_ASSET_READER_MEDIA_TYPE_VIDEO, } GstAVFAssetReaderMediaType; typedef enum { GST_AVF_ASSET_ERROR_NOT_PLAYABLE, GST_AVF_ASSET_ERROR_INIT, GST_AVF_ASSET_ERROR_START, GST_AVF_ASSET_ERROR_READ, } GstAVFAssetError; typedef enum { GST_AVF_ASSET_SRC_STATE_STOPPED, GST_AVF_ASSET_SRC_STATE_STARTED, GST_AVF_ASSET_SRC_STATE_READING, } GstAVFAssetSrcState; @interface GstAVFAssetReader: NSObject { AVAsset *asset; AVAssetReader *reader; AVAssetReaderTrackOutput *video_track; AVAssetReaderTrackOutput *audio_track; NSArray *audio_tracks; NSArray *video_tracks; int selected_audio_track; int selected_video_track; GstCaps *audio_caps; GstCaps *video_caps; gboolean reading; GstClockTime duration; GstClockTime position; } @property GstClockTime duration; @property GstClockTime position; - (id) initWithURI:(gchar*) uri : (GError **) error; - (void) start : (GError **) error; - (void) stop; - (void) seekTo: (guint64) start : (guint64) stop : (GError **) error; - (BOOL) hasMediaType: (GstAVFAssetReaderMediaType) type; - (GstCaps *) getCaps: (GstAVFAssetReaderMediaType) type; - (BOOL) selectTrack: (GstAVFAssetReaderMediaType) type : (gint) index; - (GstBuffer *) nextBuffer: (GstAVFAssetReaderMediaType) type : (GError **) error; @end struct _GstAVFAssetSrc { GstElement element; GstPad *videopad; GstPad *audiopad; gint selected_video_track; gint selected_audio_track; /* NOTE: ARC no longer allows Objective-C pointers in structs. */ /* Instead, use gpointer with explicit __bridge_* calls */ gpointer reader; GstAVFAssetSrcState state; GMutex lock; GstEvent *seek_event; GstFlowReturn last_audio_pad_ret; GstFlowReturn last_video_pad_ret; /* Properties */ gchar * uri; }; struct _GstAVFAssetSrcClass { GstElementClass parent_class; }; GType gst_avf_asset_src_get_type (void); G_END_DECLS #endif /* __GST_AVF_ASSET_SRC_H__ */