Loading media/libstagefright/omx/OMXNodeInstance.cpp +56 −20 Original line number Diff line number Diff line Loading @@ -686,6 +686,7 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { CLOG_CONFIG(setPortMode, "%s(%d), port %d", asString(mode), mode, portIndex); status_t err = OK; switch (mode) { case IOMX::kPortModeDynamicANWBuffer: { Loading @@ -694,17 +695,19 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { CLOG_INTERNAL(setPortMode, "Legacy adaptive experiment: " "not setting port mode to %s(%d) on output", asString(mode), mode); return StatusFromOMXError(OMX_ErrorUnsupportedIndex); err = StatusFromOMXError(OMX_ErrorUnsupportedIndex); break; } status_t err = enableNativeBuffers_l( err = enableNativeBuffers_l( portIndex, OMX_TRUE /*graphic*/, OMX_TRUE); if (err != OK) { return err; break; } } (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); return storeMetaDataInBuffers_l(portIndex, OMX_TRUE, NULL); err = storeMetaDataInBuffers_l(portIndex, OMX_TRUE, NULL); break; } case IOMX::kPortModeDynamicNativeHandle: Loading @@ -712,13 +715,15 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { if (portIndex != kPortIndexInput) { CLOG_ERROR(setPortMode, BAD_VALUE, "%s(%d) mode is only supported on input port", asString(mode), mode); return BAD_VALUE; err = BAD_VALUE; break; } (void)enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_FALSE); (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); MetadataBufferType metaType = kMetadataBufferTypeNativeHandleSource; return storeMetaDataInBuffers_l(portIndex, OMX_TRUE, &metaType); err = storeMetaDataInBuffers_l(portIndex, OMX_TRUE, &metaType); break; } case IOMX::kPortModePresetSecureBuffer: Loading @@ -726,7 +731,8 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { // Allow on both input and output. (void)storeMetaDataInBuffers_l(portIndex, OMX_FALSE, NULL); (void)enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_FALSE); return enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_TRUE); err = enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_TRUE); break; } case IOMX::kPortModePresetANWBuffer: Loading @@ -734,7 +740,8 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { if (portIndex != kPortIndexOutput) { CLOG_ERROR(setPortMode, BAD_VALUE, "%s(%d) mode is only supported on output port", asString(mode), mode); return BAD_VALUE; err = BAD_VALUE; break; } // Check if we're simulating legacy mode with metadata mode, Loading @@ -743,7 +750,7 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { if (storeMetaDataInBuffers_l(portIndex, OMX_TRUE, NULL) == OK) { CLOG_INTERNAL(setPortMode, "Legacy adaptive experiment: " "metdata mode enabled successfully"); return OK; break; } CLOG_INTERNAL(setPortMode, "Legacy adaptive experiment: " Loading @@ -754,15 +761,15 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { // Disable secure buffer and enable graphic buffer (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); status_t err = enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_TRUE); err = enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_TRUE); if (err != OK) { return err; break; } // Not running experiment, or metadata is not supported. // Disable metadata mode and use legacy mode. (void)storeMetaDataInBuffers_l(portIndex, OMX_FALSE, NULL); return OK; break; } case IOMX::kPortModePresetByteBuffer: Loading @@ -771,15 +778,19 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { (void)enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_FALSE); (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); (void)storeMetaDataInBuffers_l(portIndex, OMX_FALSE, NULL); return OK; break; } default: CLOG_ERROR(setPortMode, BAD_VALUE, "invalid port mode %d", mode); err = BAD_VALUE; break; } CLOG_ERROR(setPortMode, BAD_VALUE, "invalid port mode %d", mode); return BAD_VALUE; if (err == OK) { mPortMode[portIndex] = mode; } return err; } status_t OMXNodeInstance::enableNativeBuffers_l( Loading Loading @@ -1057,16 +1068,33 @@ status_t OMXNodeInstance::useBuffer( } switch (omxBuffer.mBufferType) { case OMXBuffer::kBufferTypePreset: case OMXBuffer::kBufferTypePreset: { if (mPortMode[portIndex] != IOMX::kPortModeDynamicANWBuffer && mPortMode[portIndex] != IOMX::kPortModeDynamicNativeHandle) { break; } return useBuffer_l(portIndex, NULL, NULL, buffer); } case OMXBuffer::kBufferTypeSharedMem: case OMXBuffer::kBufferTypeSharedMem: { if (mPortMode[portIndex] != IOMX::kPortModePresetByteBuffer) { break; } return useBuffer_l(portIndex, omxBuffer.mMem, NULL, buffer); } case OMXBuffer::kBufferTypeANWBuffer: case OMXBuffer::kBufferTypeANWBuffer: { if (mPortMode[portIndex] != IOMX::kPortModePresetANWBuffer) { break; } return useGraphicBuffer_l(portIndex, omxBuffer.mGraphicBuffer, buffer); } case OMXBuffer::kBufferTypeHidlMemory: { if (mPortMode[portIndex] != IOMX::kPortModePresetByteBuffer && mPortMode[portIndex] != IOMX::kPortModeDynamicANWBuffer) { break; } sp<IHidlMemory> hidlMemory = mapMemory(omxBuffer.mHidlMemory); if (hidlMemory == nullptr) { ALOGE("OMXNodeInstance useBuffer() failed to map memory"); Loading @@ -1075,10 +1103,13 @@ status_t OMXNodeInstance::useBuffer( return useBuffer_l(portIndex, NULL, hidlMemory, buffer); } default: return BAD_VALUE; break; } return BAD_VALUE; ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return INVALID_OPERATION; } status_t OMXNodeInstance::useBuffer_l( Loading Loading @@ -1514,6 +1545,11 @@ status_t OMXNodeInstance::allocateSecureBuffer( android_errorWriteLog(0x534e4554, "35467458"); return BAD_VALUE; } if (mPortMode[portIndex] != IOMX::kPortModePresetSecureBuffer) { ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return INVALID_OPERATION; } BufferMeta *buffer_meta = new BufferMeta(portIndex); OMX_BUFFERHEADERTYPE *header; Loading Loading
media/libstagefright/omx/OMXNodeInstance.cpp +56 −20 Original line number Diff line number Diff line Loading @@ -686,6 +686,7 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { CLOG_CONFIG(setPortMode, "%s(%d), port %d", asString(mode), mode, portIndex); status_t err = OK; switch (mode) { case IOMX::kPortModeDynamicANWBuffer: { Loading @@ -694,17 +695,19 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { CLOG_INTERNAL(setPortMode, "Legacy adaptive experiment: " "not setting port mode to %s(%d) on output", asString(mode), mode); return StatusFromOMXError(OMX_ErrorUnsupportedIndex); err = StatusFromOMXError(OMX_ErrorUnsupportedIndex); break; } status_t err = enableNativeBuffers_l( err = enableNativeBuffers_l( portIndex, OMX_TRUE /*graphic*/, OMX_TRUE); if (err != OK) { return err; break; } } (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); return storeMetaDataInBuffers_l(portIndex, OMX_TRUE, NULL); err = storeMetaDataInBuffers_l(portIndex, OMX_TRUE, NULL); break; } case IOMX::kPortModeDynamicNativeHandle: Loading @@ -712,13 +715,15 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { if (portIndex != kPortIndexInput) { CLOG_ERROR(setPortMode, BAD_VALUE, "%s(%d) mode is only supported on input port", asString(mode), mode); return BAD_VALUE; err = BAD_VALUE; break; } (void)enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_FALSE); (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); MetadataBufferType metaType = kMetadataBufferTypeNativeHandleSource; return storeMetaDataInBuffers_l(portIndex, OMX_TRUE, &metaType); err = storeMetaDataInBuffers_l(portIndex, OMX_TRUE, &metaType); break; } case IOMX::kPortModePresetSecureBuffer: Loading @@ -726,7 +731,8 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { // Allow on both input and output. (void)storeMetaDataInBuffers_l(portIndex, OMX_FALSE, NULL); (void)enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_FALSE); return enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_TRUE); err = enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_TRUE); break; } case IOMX::kPortModePresetANWBuffer: Loading @@ -734,7 +740,8 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { if (portIndex != kPortIndexOutput) { CLOG_ERROR(setPortMode, BAD_VALUE, "%s(%d) mode is only supported on output port", asString(mode), mode); return BAD_VALUE; err = BAD_VALUE; break; } // Check if we're simulating legacy mode with metadata mode, Loading @@ -743,7 +750,7 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { if (storeMetaDataInBuffers_l(portIndex, OMX_TRUE, NULL) == OK) { CLOG_INTERNAL(setPortMode, "Legacy adaptive experiment: " "metdata mode enabled successfully"); return OK; break; } CLOG_INTERNAL(setPortMode, "Legacy adaptive experiment: " Loading @@ -754,15 +761,15 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { // Disable secure buffer and enable graphic buffer (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); status_t err = enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_TRUE); err = enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_TRUE); if (err != OK) { return err; break; } // Not running experiment, or metadata is not supported. // Disable metadata mode and use legacy mode. (void)storeMetaDataInBuffers_l(portIndex, OMX_FALSE, NULL); return OK; break; } case IOMX::kPortModePresetByteBuffer: Loading @@ -771,15 +778,19 @@ status_t OMXNodeInstance::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) { (void)enableNativeBuffers_l(portIndex, OMX_TRUE /*graphic*/, OMX_FALSE); (void)enableNativeBuffers_l(portIndex, OMX_FALSE /*graphic*/, OMX_FALSE); (void)storeMetaDataInBuffers_l(portIndex, OMX_FALSE, NULL); return OK; break; } default: CLOG_ERROR(setPortMode, BAD_VALUE, "invalid port mode %d", mode); err = BAD_VALUE; break; } CLOG_ERROR(setPortMode, BAD_VALUE, "invalid port mode %d", mode); return BAD_VALUE; if (err == OK) { mPortMode[portIndex] = mode; } return err; } status_t OMXNodeInstance::enableNativeBuffers_l( Loading Loading @@ -1057,16 +1068,33 @@ status_t OMXNodeInstance::useBuffer( } switch (omxBuffer.mBufferType) { case OMXBuffer::kBufferTypePreset: case OMXBuffer::kBufferTypePreset: { if (mPortMode[portIndex] != IOMX::kPortModeDynamicANWBuffer && mPortMode[portIndex] != IOMX::kPortModeDynamicNativeHandle) { break; } return useBuffer_l(portIndex, NULL, NULL, buffer); } case OMXBuffer::kBufferTypeSharedMem: case OMXBuffer::kBufferTypeSharedMem: { if (mPortMode[portIndex] != IOMX::kPortModePresetByteBuffer) { break; } return useBuffer_l(portIndex, omxBuffer.mMem, NULL, buffer); } case OMXBuffer::kBufferTypeANWBuffer: case OMXBuffer::kBufferTypeANWBuffer: { if (mPortMode[portIndex] != IOMX::kPortModePresetANWBuffer) { break; } return useGraphicBuffer_l(portIndex, omxBuffer.mGraphicBuffer, buffer); } case OMXBuffer::kBufferTypeHidlMemory: { if (mPortMode[portIndex] != IOMX::kPortModePresetByteBuffer && mPortMode[portIndex] != IOMX::kPortModeDynamicANWBuffer) { break; } sp<IHidlMemory> hidlMemory = mapMemory(omxBuffer.mHidlMemory); if (hidlMemory == nullptr) { ALOGE("OMXNodeInstance useBuffer() failed to map memory"); Loading @@ -1075,10 +1103,13 @@ status_t OMXNodeInstance::useBuffer( return useBuffer_l(portIndex, NULL, hidlMemory, buffer); } default: return BAD_VALUE; break; } return BAD_VALUE; ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return INVALID_OPERATION; } status_t OMXNodeInstance::useBuffer_l( Loading Loading @@ -1514,6 +1545,11 @@ status_t OMXNodeInstance::allocateSecureBuffer( android_errorWriteLog(0x534e4554, "35467458"); return BAD_VALUE; } if (mPortMode[portIndex] != IOMX::kPortModePresetSecureBuffer) { ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return INVALID_OPERATION; } BufferMeta *buffer_meta = new BufferMeta(portIndex); OMX_BUFFERHEADERTYPE *header; Loading