Add video player (#2)
https://github.com/sony/flutter-embedded-linux/issues/124
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
// Copyright 2021 Sony Group Corporation. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef PACKAGES_VIDEO_PLAYER_VIDEO_PLAYER_ELINUX_GST_VIDEO_PLAYER_H_
|
||||
#define PACKAGES_VIDEO_PLAYER_VIDEO_PLAYER_ELINUX_GST_VIDEO_PLAYER_H_
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include <memory>
|
||||
#include <shared_mutex>
|
||||
#include <string>
|
||||
|
||||
#include "video_player_stream_handler.h"
|
||||
|
||||
class GstVideoPlayer {
|
||||
public:
|
||||
GstVideoPlayer(const std::string& uri,
|
||||
std::unique_ptr<VideoPlayerStreamHandler> handler);
|
||||
~GstVideoPlayer();
|
||||
|
||||
static void GstLibraryLoad();
|
||||
static void GstLibraryUnload();
|
||||
|
||||
bool Play();
|
||||
bool Pause();
|
||||
bool Stop();
|
||||
bool SetVolume(double volume);
|
||||
bool SetPlaybackRate(double rate);
|
||||
void SetAutoRepeat(bool auto_repeat) { auto_repeat_ = auto_repeat; };
|
||||
bool SetSeek(int64_t position);
|
||||
int64_t GetDuration();
|
||||
int64_t GetCurrentPosition();
|
||||
const uint8_t* GetFrameBuffer();
|
||||
int32_t GetWidth() const { return width_; };
|
||||
int32_t GetHeight() const { return height_; };
|
||||
|
||||
private:
|
||||
struct GstVideoElements {
|
||||
GstElement* pipeline;
|
||||
GstElement* playbin;
|
||||
GstElement* video_convert;
|
||||
GstElement* video_sink;
|
||||
GstElement* output;
|
||||
GstBus* bus;
|
||||
GstBuffer* buffer;
|
||||
};
|
||||
|
||||
static void HandoffHandler(GstElement* fakesink, GstBuffer* buf,
|
||||
GstPad* new_pad, gpointer user_data);
|
||||
static gboolean HandleGstMessage(GstBus* bus, GstMessage* message,
|
||||
gpointer user_data);
|
||||
std::string ParseUri(const std::string& uri);
|
||||
bool CreatePipeline();
|
||||
void DestroyPipeline();
|
||||
void Preroll();
|
||||
void GetVideoSize(int32_t& width, int32_t& height);
|
||||
|
||||
GstVideoElements gst_;
|
||||
std::string uri_;
|
||||
std::unique_ptr<uint32_t> pixels_;
|
||||
int32_t width_;
|
||||
int32_t height_;
|
||||
double volume_ = 1.0;
|
||||
double playback_rate_ = 1.0;
|
||||
bool mute_ = false;
|
||||
bool auto_repeat_ = false;
|
||||
std::shared_mutex mutex_buffer_;
|
||||
std::unique_ptr<VideoPlayerStreamHandler> stream_handler_;
|
||||
};
|
||||
|
||||
#endif // PACKAGES_VIDEO_PLAYER_VIDEO_PLAYER_ELINUX_GST_VIDEO_PLAYER_H_
|
||||
Reference in New Issue
Block a user