From 93d87df37a21f19b1264935a1588b6f3652caca4 Mon Sep 17 00:00:00 2001 From: Jeffrey Tinker Date: Tue, 29 Mar 2011 07:44:43 -0700 Subject: [PATCH] Fix for b/4173948 - video & audio hang after multiple seeks Resolves the problem of the file offset being set to a large value if readAt returns an error instead of number of bytes read. I haven't been able to repro the failure yet since putting in this fix, so we still need to confirm that the player recovers correctly when the server error occurs. Change-Id: I963191144835a89310ad1b0ea0863dd536dff564 --- proprietary/wvm/WVMFileSource.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/proprietary/wvm/WVMFileSource.cpp b/proprietary/wvm/WVMFileSource.cpp index 3da21ff5..22c93196 100644 --- a/proprietary/wvm/WVMFileSource.cpp +++ b/proprietary/wvm/WVMFileSource.cpp @@ -50,24 +50,15 @@ void WVMFileSource::Seek(unsigned long long offset) size_t WVMFileSource::Read(size_t amount, unsigned char *buffer) { - size_t result = mDataSource->readAt(mOffset, buffer, amount); + ssize_t result = mDataSource->readAt(mOffset, buffer, amount); -#if 0 - // debug code - log packets to files - char filename[32]; - static int counter = 0; - sprintf(filename, "/data/wv/buf%d", counter++); - FILE *f = fopen(filename, "w"); - if (!f) - LOGE("WVMFileSource: can't open %s", filename); - else { - fwrite(buffer, amount, 1, f); - fclose(f); + if (result < 0) { + LOGE("mDataSource-readAt returned error %d\n", (int)result ); + result = 0; + } else { + mOffset += result; } - LOGD("WVMFileSource::Read(%d bytes to buf=%p)", amount, buffer); -#endif - mOffset += result; return result; }