Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VideoPlayer: add method for requesting desired video resolution to de… #9531

Merged
merged 1 commit into from Apr 3, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions addons/kodi.inputstream/addon.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon id="kodi.inputstream" version="1.0.3" provider-name="Team Kodi">
<backwards-compatibility abi="1.0.3"/>
<addon id="kodi.inputstream" version="1.0.4" provider-name="Team Kodi">
<backwards-compatibility abi="1.0.4"/>
<requires>
<import addon="xbmc.core" version="0.1.0"/>
</requires>
Expand Down
12 changes: 12 additions & 0 deletions xbmc/addons/InputStream.cpp
Expand Up @@ -548,5 +548,17 @@ bool CInputStream::IsRealTimeStream()
return ret;
}

void CInputStream::SetVideoResolution(int width, int height)
{
try
{
m_pStruct->SetVideoResolution(width, height);
}
catch (std::exception &e)
{
CLog::Log(LOGERROR, "CInputStream::SetVideoResolution - error. Reason: %s", e.what());
}
}

} /*namespace ADDON*/

1 change: 1 addition & 0 deletions xbmc/addons/InputStream.h
Expand Up @@ -76,6 +76,7 @@ namespace ADDON
void SetSpeed(int iSpeed);
void EnableStream(int iStreamId, bool enable);
void EnableStreamAtPTS(int iStreamId, uint64_t pts);
void SetVideoResolution(int width, int height);

// stream
int ReadStream(uint8_t* buf, unsigned int size);
Expand Down
Expand Up @@ -139,6 +139,11 @@ extern "C"
*/
void DemuxSetSpeed(int speed);

/*!
* Sets desired width / height
* @param width / hight
*/
void SetVideoResolution(int width, int height);

/*!
* Totel time in ms
Expand Down Expand Up @@ -238,6 +243,7 @@ extern "C"
pClient->DemuxRead = DemuxRead;
pClient->DemuxSeekTime = DemuxSeekTime;
pClient->DemuxSetSpeed = DemuxSetSpeed;
pClient->SetVideoResolution = SetVideoResolution;

pClient->GetTotalTime = GetTotalTime;
pClient->GetTime = GetTime;
Expand Down
Expand Up @@ -140,6 +140,7 @@ extern "C" {
DemuxPacket* (__cdecl* DemuxRead)(void);
bool (__cdecl* DemuxSeekTime)(int, bool, double*);
void (__cdecl* DemuxSetSpeed)(int);
bool (__cdecl* SetVideoResolution)(int, int);

// IDisplayTime
int (__cdecl* GetTotalTime)(void);
Expand Down
6 changes: 6 additions & 0 deletions xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemux.h
Expand Up @@ -347,6 +347,12 @@ class CDVDDemux
*/
virtual void EnableStreamAtPTS(int64_t demuxerId, int id, uint64_t pts) { EnableStreamAtPTS(id, pts); };

/*
* sets desired width / height for video stream
* adaptive demuxers like DASH can use this to choose best fitting video stream
*/
virtual void SetVideoResolution(int width, int height) {};

/*
* return the id of the demuxer
*/
Expand Down
8 changes: 8 additions & 0 deletions xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.cpp
Expand Up @@ -617,3 +617,11 @@ void CDVDDemuxClient::EnableStreamAtPTS(int id, uint64_t pts)
m_IDemux->EnableStreamAtPTS(id, pts);
}
}

void CDVDDemuxClient::SetVideoResolution(int width, int height)
{
if (m_IDemux)
{
m_IDemux->SetVideoResolution(width, height);
}
}
1 change: 1 addition & 0 deletions xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxClient.h
Expand Up @@ -51,6 +51,7 @@ class CDVDDemuxClient : public CDVDDemux
virtual bool SupportsEnableAtPTS() override { return m_IDemux ? m_IDemux->SupportsEnableAtPTS():false; };
virtual void EnableStream(int id, bool enable) override;
virtual void EnableStreamAtPTS(int id, uint64_t pts) override;
virtual void SetVideoResolution(int width, int height) override;

protected:
void RequestStreams();
Expand Down
1 change: 1 addition & 0 deletions xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStream.h
Expand Up @@ -131,6 +131,7 @@ class CDVDInputStream
virtual bool SeekTime(int time, bool backward = false, double* startpts = NULL) = 0;
virtual void AbortDemux() = 0;
virtual void FlushDemux() = 0;
virtual void SetVideoResolution(int width, int height) {};
};

enum ENextStream
Expand Down
8 changes: 8 additions & 0 deletions xbmc/cores/VideoPlayer/DVDInputStreams/InputStreamAddon.cpp
Expand Up @@ -265,3 +265,11 @@ void CInputStreamAddon::FlushDemux()

m_addon->FlushDemux();
}

void CInputStreamAddon::SetVideoResolution(int width, int height)
{
if (!m_addon)
return;

m_addon->SetVideoResolution(width, height);
}
1 change: 1 addition & 0 deletions xbmc/cores/VideoPlayer/DVDInputStreams/InputStreamAddon.h
Expand Up @@ -83,6 +83,7 @@ class CInputStreamAddon :
virtual bool SeekTime(int time, bool backward = false, double* startpts = NULL) override;
virtual void AbortDemux() override;
virtual void FlushDemux() override;
virtual void SetVideoResolution(int width, int height) override;

protected:
ADDON::CInputStream *m_addon;
Expand Down
4 changes: 4 additions & 0 deletions xbmc/cores/VideoPlayer/VideoPlayer.cpp
Expand Up @@ -3721,6 +3721,10 @@ bool CVideoPlayer::OpenVideoStream(CDVDStreamInfo& hint, bool reset)
m_SelectionStreams.Clear(STREAM_NONE, STREAM_SOURCE_VIDEOMUX);
}

// TODO desired resolution needs to come from somewhere else
RESOLUTION_INFO res = g_graphicsContext.GetResInfo();
m_pDemuxer->SetVideoResolution(res.iWidth, res.iHeight);

return true;

}
Expand Down