WebKitMediaSourceGStreamerPrivate.h [plain text]
#pragma once
#if ENABLE(VIDEO) && USE(GSTREAMER) && ENABLE(MEDIA_SOURCE)
#include "AudioTrackPrivateGStreamer.h"
#include "SourceBufferPrivateGStreamer.h"
#include "VideoTrackPrivateGStreamer.h"
#include "WebKitMediaSourceGStreamer.h"
#include <gst/app/gstappsrc.h>
#include <gst/gst.h>
#include <wtf/Condition.h>
#include <wtf/RefPtr.h>
#include <wtf/glib/GRefPtr.h>
namespace WebCore {
class MediaPlayerPrivateGStreamerMSE;
};
void webKitMediaSrcUriHandlerInit(gpointer, gpointer);
#define WEBKIT_MEDIA_SRC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_MEDIA_SRC, WebKitMediaSrcPrivate))
typedef struct _Stream Stream;
struct _Stream {
WebKitMediaSrc* parent;
GstElement* appsrc;
GstPad* decodebinSinkPad;
WebCore::SourceBufferPrivateGStreamer* sourceBuffer;
WebCore::MediaSourceStreamTypeGStreamer type;
GstElement* parser;
GRefPtr<GstCaps> caps;
RefPtr<WebCore::AudioTrackPrivateGStreamer> audioTrack;
RefPtr<WebCore::VideoTrackPrivateGStreamer> videoTrack;
WebCore::FloatSize presentationSize;
bool appsrcNeedDataFlag;
MediaTime lastEnqueuedTime;
};
enum {
PROP_0,
PROP_LOCATION,
PROP_N_AUDIO,
PROP_N_VIDEO,
PROP_N_TEXT,
PROP_LAST
};
enum {
SIGNAL_VIDEO_CHANGED,
SIGNAL_AUDIO_CHANGED,
SIGNAL_TEXT_CHANGED,
LAST_SIGNAL
};
enum OnSeekDataAction {
Nothing,
MediaSourceSeekToTime
};
struct _WebKitMediaSrcPrivate {
Lock streamLock;
Condition streamCondition;
Deque<Stream*> streams;
GUniquePtr<gchar> location;
int numberOfAudioStreams;
int numberOfVideoStreams;
int numberOfTextStreams;
bool asyncStart;
bool allTracksConfigured;
unsigned numberOfPads;
MediaTime seekTime;
OnSeekDataAction appsrcSeekDataNextAction;
int appsrcSeekDataCount;
int appsrcNeedDataCount;
GRefPtr<GstBus> bus;
WebCore::MediaPlayerPrivateGStreamerMSE* mediaPlayerPrivate;
};
extern guint webKitMediaSrcSignals[LAST_SIGNAL];
extern GstAppSrcCallbacks enabledAppsrcCallbacks;
extern GstAppSrcCallbacks disabledAppsrcCallbacks;
void webKitMediaSrcUriHandlerInit(gpointer gIface, gpointer ifaceData);
void webKitMediaSrcFinalize(GObject*);
void webKitMediaSrcSetProperty(GObject*, guint propertyId, const GValue*, GParamSpec*);
void webKitMediaSrcGetProperty(GObject*, guint propertyId, GValue*, GParamSpec*);
void webKitMediaSrcDoAsyncStart(WebKitMediaSrc*);
void webKitMediaSrcDoAsyncDone(WebKitMediaSrc*);
GstStateChangeReturn webKitMediaSrcChangeState(GstElement*, GstStateChange);
gint64 webKitMediaSrcGetSize(WebKitMediaSrc*);
gboolean webKitMediaSrcQueryWithParent(GstPad*, GstObject*, GstQuery*);
void webKitMediaSrcUpdatePresentationSize(GstCaps*, Stream*);
void webKitMediaSrcLinkStreamToSrcPad(GstPad*, Stream*);
void webKitMediaSrcLinkParser(GstPad*, GstCaps*, Stream*);
void webKitMediaSrcFreeStream(WebKitMediaSrc*, Stream*);
void webKitMediaSrcCheckAllTracksConfigured(WebKitMediaSrc*);
GstURIType webKitMediaSrcUriGetType(GType);
const gchar* const* webKitMediaSrcGetProtocols(GType);
gchar* webKitMediaSrcGetUri(GstURIHandler*);
gboolean webKitMediaSrcSetUri(GstURIHandler*, const gchar*, GError**);
#endif // USE(GSTREAMER)