Skip to content

Commit e9f99a4

Browse files
author
The Android Open Source Project
committedMar 3, 2009
auto import from //depot/cupcake/@137055
1 parent 93c7913 commit e9f99a4

File tree

20 files changed

+486
-372
lines changed

20 files changed

+486
-372
lines changed
 

‎android/author/PVMediaRecorder.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -359,4 +359,13 @@ status_t PVMediaRecorder::close()
359359
return mAuthorDriverWrapper->enqueueCommand(ac, 0, 0);
360360
}
361361

362+
status_t PVMediaRecorder::setListener(const sp<IMediaPlayerClient>& listener) {
363+
LOGV("setListener");
364+
if (mAuthorDriverWrapper == NULL) {
365+
LOGE("author driver wrapper is not initialized yet");
366+
return UNKNOWN_ERROR;
367+
}
368+
return mAuthorDriverWrapper->setListener(listener);
369+
}
370+
362371
}; // namespace android

‎android/author/android_audio_input.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,14 @@ void AndroidAudioInput::SendMicData(void)
10261026
data_hdr.flags=0;
10271027
data_hdr.duration = data.iDuration;
10281028
data_hdr.stream_id=0;
1029-
uint32 writeAsyncID = iPeer->writeAsync(0, 0, data.iData, data.iDataLen, data_hdr);
1029+
uint32 writeAsyncID;
1030+
int32 error = OsclErrNone;
1031+
OSCL_TRY(error, writeAsyncID = iPeer->writeAsync(0, 0, data.iData, data.iDataLen, data_hdr););
1032+
1033+
if (OsclErrNone != error) {
1034+
iWriteResponseQueueLock.Unlock();
1035+
return;
1036+
}
10301037

10311038
// Save the id and data pointer on iSentMediaData queue for writeComplete call
10321039
AndroidAudioInputMediaData sentData;

‎android/author/android_camera_input.cpp

+24-9
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ OSCL_DLL_ENTRY_POINT_DEFAULT()
4040
AndroidCameraInput::AndroidCameraInput()
4141
: OsclTimerObject(OsclActiveObject::EPriorityNominal, "AndroidCameraInput")
4242
{
43-
LOGV("constructor");
43+
LOGV("constructor(%p)", this);
4444
iCmdIdCounter = 0;
4545
iPeer = NULL;
4646
iThreadLoggedOn = false;
@@ -751,18 +751,21 @@ void AndroidCameraInput::Run()
751751
iFrameQueueMutex.Lock();
752752
while (!iFrameQueue.empty()) {
753753
AndroidCameraInputMediaData data = iFrameQueue[0];
754-
iFrameQueue.erase(iFrameQueue.begin());
755754

756755
uint32 writeAsyncID = 0;
757-
int32 error = 0;
758-
OSCL_TRY(error,writeAsyncID = iPeer->writeAsync(0, 0, (uint8*) (data.iFrameBuffer->pointer()),
756+
int32 error = OsclErrNone;
757+
OSCL_TRY(error,writeAsyncID = iPeer->writeAsync(PVMI_MEDIAXFER_FMT_TYPE_DATA, 0, (uint8*) (data.iFrameBuffer->pointer()),
759758
data.iFrameSize, data.iXferHeader););
760759

761-
if (!error) {
762-
data.iId = writeAsyncID;
763-
iSentMediaData.push_back(data);
764-
++mFrameRefCount;
760+
if (OsclErrNone != error) {
761+
break;
765762
}
763+
764+
iFrameQueue.erase(iFrameQueue.begin());
765+
766+
data.iId = writeAsyncID;
767+
iSentMediaData.push_back(data);
768+
++mFrameRefCount;
766769
}
767770
iFrameQueueMutex.Unlock();
768771
PVMFStatus status = PVMFFailure;
@@ -917,18 +920,30 @@ PVMFStatus AndroidCameraInput::DoInit()
917920

918921
LOGD("Intended mFrameWidth=%d, mFrameHeight=%d ",mFrameWidth, mFrameHeight);
919922
String8 s = mCamera->getParameters();
923+
if (s.length() == 0) {
924+
LOGE("Failed to get camera(%p) parameters", mCamera.get());
925+
return PVMFFailure;
926+
}
920927
CameraParameters p(s);
921928
p.setPreviewSize(mFrameWidth, mFrameHeight);
922929
s = p.flatten();
923-
mCamera->setParameters(s);
930+
if (mCamera->setParameters(s) != NO_ERROR) {
931+
LOGE("Failed to set camera(%p) parameters", mCamera.get());
932+
return PVMFFailure;
933+
}
924934

925935
// Since we may not honor the preview size that app has requested
926936
// It is a good idea to get the actual preview size and used it
927937
// for video recording.
928938
CameraParameters newCameraParam(mCamera->getParameters());
929939
newCameraParam.getPreviewSize(&mFrameWidth, &mFrameHeight);
940+
if (mFrameWidth < 0 || mFrameHeight < 0) {
941+
LOGE("Failed to get camera(%p) preview size", mCamera.get());
942+
return PVMFFailure;
943+
}
930944
LOGD("Actual mFrameWidth=%d, mFrameHeight=%d ",mFrameWidth, mFrameHeight);
931945
if (mCamera->startPreview() != NO_ERROR) {
946+
LOGE("Failed to start camera(%p) preview", mCamera.get());
932947
return PVMFFailure;
933948
}
934949
return PVMFSuccess;

‎android/author/authordriver.cpp

+17-2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ status_t AuthorDriverWrapper::enqueueCommand(author_command *ac, media_completio
8585
return NO_INIT;
8686
}
8787

88+
status_t AuthorDriverWrapper::setListener(const sp<IMediaPlayerClient>& listener) {
89+
if (mAuthorDriver) {
90+
return mAuthorDriver->setListener(listener);
91+
}
92+
return NO_INIT;
93+
}
94+
8895
AuthorDriver::AuthorDriver()
8996
: OsclActiveObject(OsclActiveObject::EPriorityNominal, "AuthorDriver"),
9097
mAuthor(NULL),
@@ -811,8 +818,11 @@ void AuthorDriver::HandleErrorEvent(const PVAsyncErrorEvent& aEvent)
811818
{
812819
LOGE("HandleErrorEvent(%d)", aEvent.GetEventType());
813820

814-
// FIXME:
815-
// Send error event to client via callback
821+
if (mListener != NULL) {
822+
mListener->notify(
823+
MEDIA_RECORDER_EVENT_ERROR, MEDIA_RECORDER_ERROR_UNKNOWN,
824+
aEvent.GetEventType());
825+
}
816826
}
817827

818828
void AuthorDriver::HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent)
@@ -837,4 +847,9 @@ PVAEState AuthorDriver::getAuthorEngineState()
837847
return PVAE_STATE_IDLE;
838848
}
839849

850+
status_t AuthorDriver::setListener(const sp<IMediaPlayerClient>& listener) {
851+
mListener = listener;
852+
853+
return android::OK;
854+
}
840855

‎android/author/authordriver.h

+4
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ public PVErrorEventObserver
218218
status_t getMaxAmplitude(int *max);
219219
PVAEState getAuthorEngineState();
220220

221+
status_t setListener(const sp<IMediaPlayerClient>& listener);
222+
221223
private:
222224
// Finish up a non-async command in such a way that
223225
// the event loop will keep running.
@@ -275,6 +277,7 @@ public PVErrorEventObserver
275277
Mutex mQueueLock;
276278

277279
sp<ICamera> mCamera;
280+
sp<IMediaPlayerClient> mListener;
278281
};
279282

280283
class AuthorDriverWrapper
@@ -284,6 +287,7 @@ class AuthorDriverWrapper
284287
~AuthorDriverWrapper();
285288
status_t enqueueCommand(author_command *ec, media_completion_f comp, void *cookie);
286289
status_t getMaxAmplitude(int *max);
290+
status_t setListener(const sp<IMediaPlayerClient>& listener);
287291

288292
private:
289293
void resetAndClose();

‎android/mediascanner.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,21 @@ status_t MediaScanner::doProcessDirectory(char *path, int pathRemaining, const c
594594
}
595595

596596
int type = entry->d_type;
597+
if (type == DT_UNKNOWN) {
598+
// If the type is unknown, stat() the file instead.
599+
// This is sometimes necessary when accessing NFS mounted filesystems, but
600+
// could be needed in other cases well.
601+
struct stat statbuf;
602+
if (stat(path, &statbuf) == 0) {
603+
if (S_ISREG(statbuf.st_mode)) {
604+
type = DT_REG;
605+
} else if (S_ISDIR(statbuf.st_mode)) {
606+
type = DT_DIR;
607+
}
608+
} else {
609+
LOGD("stat() failed for %s: %s", path, strerror(errno) );
610+
}
611+
}
597612
if (type == DT_REG || type == DT_DIR) {
598613
int nameLength = strlen(name);
599614
bool isDirectory = (type == DT_DIR);

‎codecs_v2/audio/mp3/dec/src/pvmp3_huffman_parsing.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,10 @@ int32 pvmp3_huffman_parsing(int32 is[SUBBANDS_NUMBER*FILTERBANK_BANDS],
306306
if (pMainData->usedBits > grBits)
307307
{
308308
i -= 4;
309+
if (i < 0 || i > SUBBANDS_NUMBER*FILTERBANK_BANDS - 4)
310+
{
311+
i = 0;
312+
}
309313
is[i] = 0;
310314
is[(i+1)] = 0;
311315
is[(i+2)] = 0;

‎codecs_v2/omx/omx_common/src/pv_omxmastercore.cpp

+9-23
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
* and limitations under the License.
1616
* -------------------------------------------------------------------
1717
*/
18+
19+
#include <utils/threads.h>
20+
1821
#include "pv_omxdefs.h"
1922
#include "omx_component.h"
2023
#include "pv_omxcore.h"
@@ -26,7 +29,7 @@
2629
#include "qc_omxcore.h"
2730

2831
//Number of base instances
29-
OsclMutex g_OMX_Mutex;
32+
android::Mutex g_OMX_Mutex;
3033
OMX_U32 g_NumMasterOMXInstances = 0;
3134
void *g_Wrapper = NULL;
3235
void *g_MasterRegistry = NULL;
@@ -62,7 +65,7 @@ OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_Init()
6265
OMX_U32 index;
6366
OMX_U32 master_index = 0;
6467

65-
g_OMX_Mutex.Lock();
68+
android::Mutex::Autolock l(g_OMX_Mutex);
6669
g_NumMasterOMXInstances++;
6770

6871
if (g_NumMasterOMXInstances == 1)
@@ -72,7 +75,6 @@ OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_Init()
7275
PV_OMX_WrapperBase **pWrapper = (PV_OMX_WrapperBase **)malloc(NUMBER_OF_OMX_CORES * sizeof(PV_OMX_WrapperBase *));
7376
if (pWrapper == NULL)
7477
{
75-
g_OMX_Mutex.Unlock();
7678
return OMX_ErrorInsufficientResources;
7779
}
7880
// set the global ptr to this array
@@ -81,15 +83,13 @@ OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_Init()
8183
PVOMXMasterRegistryStruct *pOMXMasterRegistry = (PVOMXMasterRegistryStruct *)malloc(MAX_NUMBER_OF_OMX_COMPONENTS * sizeof(PVOMXMasterRegistryStruct));
8284
if (pOMXMasterRegistry == NULL)
8385
{
84-
g_OMX_Mutex.Unlock();
8586
return OMX_ErrorInsufficientResources;
8687
}
8788
g_MasterRegistry = (void*)pOMXMasterRegistry;
8889

8990
PVOMXCompHandles *pOMXCompHandles = (PVOMXCompHandles *)malloc(MAX_NUMBER_OF_OMX_COMPONENTS * sizeof(PVOMXCompHandles));
9091
if (pOMXCompHandles == NULL)
9192
{
92-
g_OMX_Mutex.Unlock();
9393
return OMX_ErrorInsufficientResources;
9494
}
9595
g_OMXCompHandles = (void*)pOMXCompHandles;
@@ -191,7 +191,6 @@ OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_Init()
191191
g_TotalNumOMXComponents = master_index;
192192
}
193193

194-
g_OMX_Mutex.Unlock();
195194
return OMX_ErrorNone;
196195
}
197196

@@ -200,7 +199,7 @@ OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_Deinit()
200199
OMX_U32 jj;
201200
OMX_ERRORTYPE Status = OMX_ErrorNone;
202201

203-
g_OMX_Mutex.Lock();
202+
android::Mutex::Autolock l(g_OMX_Mutex);
204203
g_NumMasterOMXInstances--;
205204
if (g_NumMasterOMXInstances == 0)
206205
{
@@ -232,7 +231,6 @@ OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_Deinit()
232231

233232

234233
}
235-
g_OMX_Mutex.Unlock();
236234
return OMX_ErrorNone;
237235
}
238236

@@ -246,11 +244,10 @@ OMX_API OMX_ERRORTYPE PV_MasterOMX_GetComponentsOfRole(
246244
OMX_U32 ii;
247245
// initialize
248246
*pNumComps = 0;
249-
g_OMX_Mutex.Lock();
247+
android::Mutex::Autolock l(g_OMX_Mutex);
250248
PVOMXMasterRegistryStruct *pOMXMasterRegistry = (PVOMXMasterRegistryStruct *) g_MasterRegistry;
251249
if (pOMXMasterRegistry == NULL)
252250
{
253-
g_OMX_Mutex.Unlock();
254251
return OMX_ErrorNone;
255252
}
256253

@@ -272,7 +269,6 @@ OMX_API OMX_ERRORTYPE PV_MasterOMX_GetComponentsOfRole(
272269
}
273270
}
274271

275-
g_OMX_Mutex.Unlock();
276272
return OMX_ErrorNone;
277273

278274
}
@@ -287,17 +283,15 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_GetHandle(
287283
OMX_ERRORTYPE Status = OMX_ErrorNone;
288284
OMX_U32 ii, kk;
289285

290-
g_OMX_Mutex.Lock();
286+
android::Mutex::Autolock l(g_OMX_Mutex);
291287
PVOMXMasterRegistryStruct *pOMXMasterRegistry = (PVOMXMasterRegistryStruct *) g_MasterRegistry;
292288
if (pOMXMasterRegistry == NULL)
293289
{
294-
g_OMX_Mutex.Unlock();
295290
return OMX_ErrorComponentNotFound;
296291
}
297292
PVOMXCompHandles *pOMXCompHandles = (PVOMXCompHandles *)g_OMXCompHandles;
298293
if (pOMXCompHandles == NULL)
299294
{
300-
g_OMX_Mutex.Unlock();
301295
return OMX_ErrorComponentNotFound;
302296
}
303297

@@ -315,7 +309,6 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_GetHandle(
315309
if (ii == g_TotalNumOMXComponents)
316310
{
317311
// could not find a component with the given name
318-
g_OMX_Mutex.Unlock();
319312
return OMX_ErrorComponentNotFound;
320313
}
321314

@@ -335,7 +328,6 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_GetHandle(
335328
}
336329
if (kk == MAX_NUMBER_OF_OMX_COMPONENTS)
337330
{
338-
g_OMX_Mutex.Unlock();
339331
return OMX_ErrorComponentNotFound;
340332
}
341333

@@ -347,12 +339,10 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_GetHandle(
347339
pOMXCompHandles[kk].handle = *pHandle;
348340
pOMXCompHandles[kk].OMXCoreIndex = index;
349341
}
350-
g_OMX_Mutex.Unlock();
351342
return Status;
352343
}
353344
else
354345
{
355-
g_OMX_Mutex.Unlock();
356346
return OMX_ErrorInsufficientResources;
357347
}
358348

@@ -366,11 +356,10 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_FreeHandle(OMX_IN OMX_HANDLETYPE
366356
// here, we need to first find the handle among instantiated components
367357
// then we retrieve the core based on component handle
368358
// finally, call the OMX_FreeHandle for appropriate core
369-
g_OMX_Mutex.Lock();
359+
android::Mutex::Autolock l(g_OMX_Mutex);
370360
PVOMXCompHandles *pOMXCompHandles = (PVOMXCompHandles *)g_OMXCompHandles;
371361
if (pOMXCompHandles == NULL)
372362
{
373-
g_OMX_Mutex.Unlock();
374363
return OMX_ErrorComponentNotFound;
375364
}
376365
for (ii = 0; ii < MAX_NUMBER_OF_OMX_COMPONENTS; ii ++)
@@ -386,7 +375,6 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_FreeHandle(OMX_IN OMX_HANDLETYPE
386375
if (ii == MAX_NUMBER_OF_OMX_COMPONENTS)
387376
{
388377
// could not find a component with the given name
389-
g_OMX_Mutex.Unlock();
390378
return OMX_ErrorComponentNotFound;
391379
}
392380

@@ -398,12 +386,10 @@ OMX_API OMX_ERRORTYPE OMX_APIENTRY PV_MasterOMX_FreeHandle(OMX_IN OMX_HANDLETYPE
398386
Status = (*(pWrapper[index]->GetpOMX_FreeHandle()))(hComponent);
399387
//we're done with this, so get rid of the component handle
400388
pOMXCompHandles[ii].handle = NULL;
401-
g_OMX_Mutex.Unlock();
402389
return Status;
403390
}
404391
else
405392
{
406-
g_OMX_Mutex.Unlock();
407393
return OMX_ErrorInsufficientResources;
408394
}
409395

0 commit comments

Comments
 (0)
Please sign in to comment.