forked from huceke/omxplayer
-
Notifications
You must be signed in to change notification settings - Fork 1
/
OMXVideo.h
132 lines (110 loc) · 4.19 KB
/
OMXVideo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#pragma once
/*
* Copyright (C) 2010 Team XBMC
* http://www.xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#if defined(HAVE_OMXLIB)
#include "OMXCore.h"
#include "OMXStreamInfo.h"
#include <IL/OMX_Video.h>
#include "OMXClock.h"
#include "OMXReader.h"
#include "guilib/Geometry.h"
#define CLASSNAME "COMXVideo"
class DllAvUtil;
class DllAvFormat;
class COMXVideo
{
public:
COMXVideo();
~COMXVideo();
// Required overrides
bool SendDecoderConfig();
bool NaluFormatStartCodes(enum CodecID codec, uint8_t *in_extradata, int in_extrasize);
bool Open(COMXStreamInfo &hints, OMXClock *clock, const CRect &m_DestRect, float display_aspect = 0.0f, bool deinterlace = false, bool hdmi_clock_sync = false, float fifo_size = 0.0f, void* boblight_instance = NULL, int boblight_sizedown = 64, int boblight_margin = 10, int boblight_timeout = 35);
void Close(void);
unsigned int GetFreeSpace();
unsigned int GetSize();
OMXPacket *GetText();
int DecodeText(uint8_t *pData, int iSize, double dts, double pts);
int Decode(uint8_t *pData, int iSize, double dts, double pts);
void Reset(void);
void SetDropState(bool bDrop);
bool Pause();
bool Resume();
std::string GetDecoderName() { return m_video_codec_name; };
void SetVideoRect(const CRect& SrcRect, const CRect& DestRect);
int GetInputBufferSize();
void WaitCompletion();
static void* BoblightClientThread(void* data);
static OMX_ERRORTYPE BufferDoneHandler(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_BUFFERHEADERTYPE* pBuffer);
protected:
// Video format
bool m_drop_state;
unsigned int m_decoded_width;
unsigned int m_decoded_height;
OMX_VIDEO_CODINGTYPE m_codingType;
COMXCoreComponent m_omx_text;
COMXCoreComponent m_omx_decoder;
COMXCoreComponent m_omx_render;
COMXCoreComponent m_omx_sched;
COMXCoreComponent m_omx_image_fx;
COMXCoreComponent m_omx_split;
COMXCoreComponent m_omx_resize;
static void* m_boblight; //pointer to boblight instance
int m_boblight_sizedown;
int m_boblight_margin;
//internal boblight variables follow
static unsigned int m_boblight_margin_t;
static unsigned int m_boblight_margin_b;
static unsigned int m_boblight_margin_l;
static unsigned int m_boblight_margin_r;
static int m_boblight_width;
static int m_boblight_height;
static int m_boblight_timeout;
static OMX_BUFFERHEADERTYPE* m_boblight_bufferpointer;
//boblight threads
static volatile bool m_boblight_threadstop; //set true to stop all threads
static pthread_t m_boblight_clientthread;
static pthread_mutex_t m_boblight_bufferdone_mutex;
static pthread_cond_t m_boblight_bufferdone_cond;
static volatile bool m_boblight_bufferdone_flag;
COMXCoreComponent *m_omx_clock;
OMXClock *m_av_clock;
COMXCoreTunel m_omx_tunnel_text;
COMXCoreTunel m_omx_tunnel_decoder;
COMXCoreTunel m_omx_tunnel_clock;
COMXCoreTunel m_omx_tunnel_sched;
COMXCoreTunel m_omx_tunnel_image_fx;
COMXCoreTunel m_omx_tunnel_split;
COMXCoreTunel m_omx_tunnel_resize;
bool m_is_open;
bool m_Pause;
bool m_setStartTime;
bool m_setStartTimeText;
uint8_t *m_extradata;
int m_extrasize;
std::string m_video_codec_name;
bool m_deinterlace;
bool m_hdmi_clock_sync;
bool m_first_text;
CRect m_dst_rect;
CRect m_src_rect;
};
#endif