Fix for 4198445 HC - Support for Widevine Live Streaming (adaptive)

Change-Id: Id3a8a997fb1186c6af6e94f2fc2d4788238a0452
This commit is contained in:
Jeffrey Tinker
2011-05-26 10:49:15 -07:00
parent a7d2e068b6
commit 66d9ff5fb5
7 changed files with 43 additions and 11 deletions

View File

@@ -241,6 +241,15 @@ status_t WVMExtractorImpl::readMetaData()
videoMetaData->setInt32(kKeyWidth, width);
videoMetaData->setInt32(kKeyHeight, height);
if (mIsLiveStream) {
float scaleUsed;
result = WV_Play(mSession, 1.0, &scaleUsed, "npt=now-");
if (result != WV_Status_OK) {
LOGE("WV_Play for live stream setup failed: %d", result);
return ERROR_IO;
}
}
status_t status;
status = readAVCCMetaData(videoMetaData);
@@ -251,8 +260,15 @@ status_t WVMExtractorImpl::readMetaData()
if (status != OK)
return status;
mAudioSource = new WVMMediaSource(mSession, WV_EsSelector_Audio, audioMetaData);
mVideoSource = new WVMMediaSource(mSession, WV_EsSelector_Video, videoMetaData);
if (mIsLiveStream) {
result = WV_Pause(mSession, "");
if (result != WV_Status_OK) {
LOGE("WV_Pause for live stream setup failed: %d", result);
}
}
mAudioSource = new WVMMediaSource(mSession, WV_EsSelector_Audio, audioMetaData, mIsLiveStream);
mVideoSource = new WVMMediaSource(mSession, WV_EsSelector_Video, videoMetaData, mIsLiveStream);
// Since the WVExtractor goes away soon after this, we delegate ownership of some resources
// to the constructed media source
@@ -276,7 +292,7 @@ status_t WVMExtractorImpl::readAVCCMetaData(sp<MetaData> videoMetaData)
const unsigned char *config;
unsigned long size;
int limit = 50;
int limit = 500;
do {
size_t bytesRead;
bool auStart, sync;
@@ -293,7 +309,7 @@ status_t WVMExtractorImpl::readAVCCMetaData(sp<MetaData> videoMetaData)
result = WV_Info_GetCodecConfig(mSession, WV_CodecConfigType_AVCC, config, size);
if (result != WV_Status_OK)
usleep(100);
usleep(10000);
} while (result == WV_Status_Warning_Not_Available && limit-- > 0);
if (result != WV_Status_OK) {
@@ -322,7 +338,7 @@ status_t WVMExtractorImpl::readESDSMetaData(sp<MetaData> audioMetaData)
const unsigned char *config;
unsigned long size;
int limit = 50;
int limit = 500;
do {
size_t bytesRead;
bool auStart, sync;
@@ -339,7 +355,7 @@ status_t WVMExtractorImpl::readESDSMetaData(sp<MetaData> audioMetaData)
result = WV_Info_GetCodecConfig(mSession, WV_CodecConfigType_ESDS, config, size);
if (result != WV_Status_OK)
usleep(100);
usleep(10000);
} while (result == WV_Status_Warning_Not_Available && limit-- > 0);
if (result != WV_Status_OK) {