Tunneled Video Playback support

Added native_window_set_sideband_stream() method to Surface.[h|cpp]
 Added ConfigureVideoTunnelModeParams OMX configuration structure to
 HardwareAPI.h

Bug: 16132368
Change-Id: I28fa1b9dbe858d93e353e0991098cad45c626bd9
This commit is contained in:
Rachad 2014-07-29 17:53:53 -07:00 committed by Rachad Alao
parent 812e039aeb
commit 7cb0d39016
3 changed files with 32 additions and 0 deletions

View File

@ -145,6 +145,7 @@ private:
int dispatchSetUsage(va_list args);
int dispatchLock(va_list args);
int dispatchUnlockAndPost(va_list args);
int dispatchSetSidebandStream(va_list args);
protected:
virtual int dequeueBuffer(ANativeWindowBuffer** buffer, int* fenceFd);

View File

@ -214,6 +214,27 @@ struct DescribeColorFormatParams {
MediaImage sMediaImage;
};
// A pointer to this struct is passed to OMX_SetParameter or OMX_GetParameter
// when the extension index for the
// 'OMX.google.android.index.configureVideoTunnelMode' extension is given.
// If the extension is supported then tunneled playback mode should be supported
// by the codec. If bTunneled is set to OMX_TRUE then the video decoder should
// operate in "tunneled" mode and output its decoded frames directly to the
// sink. In this case nAudioHwSync is the HW SYNC ID of the audio HAL Output
// stream to sync the video with. If bTunneled is set to OMX_FALSE, "tunneled"
// mode should be disabled and nAudioHwSync should be ignored.
// OMX_GetParameter is used to query tunneling configuration. bTunneled should
// return whether decoder is operating in tunneled mode, and if it is,
// pSidebandWindow should contain the codec allocated sideband window handle.
struct ConfigureVideoTunnelModeParams {
OMX_U32 nSize; // IN
OMX_VERSIONTYPE nVersion; // IN
OMX_U32 nPortIndex; // IN
OMX_BOOL bTunneled; // IN/OUT
OMX_U32 nAudioHwSync; // IN
OMX_PTR pSidebandWindow; // OUT
};
} // namespace android
extern android::OMXPluginBase *createOMXPlugin();

View File

@ -24,6 +24,7 @@
#include <utils/Log.h>
#include <utils/Trace.h>
#include <utils/NativeHandle.h>
#include <ui/Fence.h>
@ -443,6 +444,9 @@ int Surface::perform(int operation, va_list args)
case NATIVE_WINDOW_API_DISCONNECT:
res = dispatchDisconnect(args);
break;
case NATIVE_WINDOW_SET_SIDEBAND_STREAM:
res = dispatchSetSidebandStream(args);
break;
default:
res = NAME_NOT_FOUND;
break;
@ -533,6 +537,12 @@ int Surface::dispatchUnlockAndPost(va_list args __attribute__((unused))) {
return unlockAndPost();
}
int Surface::dispatchSetSidebandStream(va_list args) {
native_handle_t* sH = va_arg(args, native_handle_t*);
sp<NativeHandle> sidebandHandle = NativeHandle::create(sH, false);
setSidebandStream(sidebandHandle);
return OK;
}
int Surface::connect(int api) {
ATRACE_CALL();