206 lines
6.2 KiB
C++
206 lines
6.2 KiB
C++
/******************************************************************************
|
|
* Copyright (c) 2018(-2023) STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This file is part of the TouchGFX 4.22.0 distribution.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file in
|
|
* the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
*******************************************************************************/
|
|
|
|
/**
|
|
* @file touchgfx/widgets/VideoWidget.hpp
|
|
*
|
|
* Declares the touchgfx::VideoWidget class.
|
|
*/
|
|
#ifndef TOUCHGFX_VIDEOWIDGET_HPP
|
|
#define TOUCHGFX_VIDEOWIDGET_HPP
|
|
|
|
#include <touchgfx/Bitmap.hpp>
|
|
#include <touchgfx/Callback.hpp>
|
|
#include <touchgfx/hal/Types.hpp>
|
|
#include <touchgfx/hal/VideoController.hpp>
|
|
#include <touchgfx/widgets/Widget.hpp>
|
|
|
|
namespace touchgfx
|
|
{
|
|
class VideoWidget;
|
|
|
|
/**
|
|
* A Widget for displaying video.
|
|
*
|
|
* The Widget interacts with a VideoController instance.
|
|
*
|
|
* @see VideoController
|
|
*/
|
|
class VideoWidget : public Widget
|
|
{
|
|
public:
|
|
/** Default constructor. */
|
|
VideoWidget();
|
|
|
|
/** Destructor. Unregisters the Widget from the Controller. */
|
|
virtual ~VideoWidget();
|
|
|
|
/** Play the video. */
|
|
void play() const;
|
|
|
|
/** Pause the video. */
|
|
void pause() const;
|
|
|
|
/** Stop the video. */
|
|
void stop() const;
|
|
|
|
/**
|
|
* Check if the video is playing (not paused or stopped).
|
|
*
|
|
* @return Returns true if the video is playing.
|
|
*/
|
|
bool isPlaying() const;
|
|
|
|
/**
|
|
* Set repeat mode. When set the video is restarted when the end is reached.
|
|
*
|
|
* @param repeat When true, the video is repeated.
|
|
*/
|
|
void setRepeat(bool repeat) const;
|
|
|
|
/**
|
|
* Seek to specific frame. Frame number 1 is the first frame. The display is not updated updated
|
|
* unless the video is playing.
|
|
*
|
|
* @param frameNumber The frame number to seek to.
|
|
*
|
|
* @see showFrame
|
|
*/
|
|
void seek(uint32_t frameNumber) const;
|
|
|
|
/**
|
|
* Seek to a specific frame and update the display. Equal to seek if the video is playing.
|
|
*
|
|
* @param frameNumber The frame number to seek to.
|
|
*
|
|
* @see seek
|
|
*/
|
|
void showFrame(uint32_t frameNumber) const;
|
|
|
|
/**
|
|
* Get the current frame number.
|
|
*
|
|
* @return Returns the current frame number.
|
|
*/
|
|
uint32_t getCurrentFrameNumber() const;
|
|
|
|
/**
|
|
* Associates an action to be performed when the movie has ended. If the video is set to repeat,
|
|
* the action is also triggered when the animation starts over.
|
|
*
|
|
* @param callback The callback is executed when done. The callback is given the VideoWidget.
|
|
*/
|
|
void setMovieEndedAction(GenericCallback<const VideoWidget&>& callback)
|
|
{
|
|
movieEndedAction = &callback;
|
|
}
|
|
|
|
/**
|
|
* Clears the movie ended action previously set by setMovieEndedAction.
|
|
*
|
|
* @see setMovieEndedAction
|
|
*/
|
|
void clearMovieEndedAction()
|
|
{
|
|
movieEndedAction = 0;
|
|
}
|
|
|
|
/**
|
|
* Sets the frame rate of the video.
|
|
*
|
|
* To get 20 video frames pr second on a 60 fps display use video_frames = 20 and ui_frames = 60.
|
|
*
|
|
* @param ui_frames Number of UI frames (divider)
|
|
* @param video_frames Number of video_frames (dividend)
|
|
*/
|
|
void setFrameRate(uint32_t ui_frames, uint32_t video_frames) const;
|
|
|
|
/**
|
|
* Set the video data for the stream.
|
|
* The video is paused and set to start on the first frame.
|
|
*
|
|
* @param movie Pointer to the video data.
|
|
* @param length Length of the vide data.
|
|
*/
|
|
void setVideoData(const uint8_t* movie, const uint32_t length);
|
|
|
|
/**
|
|
* Set the video data for the stream.
|
|
* The video is paused and set to start on the first frame.
|
|
*
|
|
* @param [in,out] reader Reference to a VideoDataReader object.
|
|
*/
|
|
void setVideoData(VideoDataReader& reader);
|
|
|
|
/**
|
|
* Get Video information.
|
|
*
|
|
* Get information from the video data.
|
|
*
|
|
* @param [in,out] data Pointer to VideoInformation where information should be stored.
|
|
*/
|
|
void getVideoInformation(VideoInformation* data) const;
|
|
|
|
/**
|
|
* Set video buffer data.
|
|
* Only used when video frames are decoded to a buffer and not directly to the framebuffer.
|
|
*
|
|
* @param [in] videoBuffer Video buffer.
|
|
*/
|
|
void setVideoBuffer(uint8_t* const videoBuffer)
|
|
{
|
|
buffer = videoBuffer;
|
|
}
|
|
|
|
/**
|
|
* Set video buffer format.
|
|
* Only used when video frames are decoded to a buffer and not directly to the framebuffer.
|
|
*
|
|
* @param bufferFormat Format of the videoBuffer (RGB565 or RGB888)
|
|
* @param width Width of the videoBuffer in pixels
|
|
* @param height Height of the videoBuffer in pixels
|
|
*/
|
|
void setVideoBufferFormat(Bitmap::BitmapFormat bufferFormat, int16_t width, int16_t height)
|
|
{
|
|
format = bufferFormat;
|
|
bufferWidth = width;
|
|
bufferHeight = height;
|
|
}
|
|
|
|
virtual void handleTickEvent();
|
|
|
|
virtual void draw(const Rect& invalidatedArea) const;
|
|
|
|
virtual Rect getSolidRect() const;
|
|
|
|
private:
|
|
/**
|
|
* Reads information from the video. Sets the video width and height.
|
|
* Sets the framerate to speed specified in movie. Assumes 60 ui
|
|
* frame pr. second.
|
|
*/
|
|
void readVideoInformation();
|
|
|
|
VideoController::Handle handle; ///< The handle of this video stream
|
|
GenericCallback<const VideoWidget&>* movieEndedAction; ///< Pointer to the callback to be executed when the video is done.
|
|
uint8_t* buffer; ///< The buffer where the pixels are copied from
|
|
Bitmap::BitmapFormat format; ///< The pixel format for the data.
|
|
int16_t bufferWidth; ///< Width (stride) of buffer in pixels (when used)
|
|
int16_t bufferHeight; ///< Height of buffer in pixels (when used)
|
|
int16_t videoWidth; ///< Width of video in pixels
|
|
int16_t videoHeight; ///< Height of video in pixels
|
|
};
|
|
|
|
} // namespace touchgfx
|
|
|
|
#endif // TOUCHGFX_VIDEOWIDGET_HPP
|