status_t PluginManager::CreateEncoder(Encoder** _encoder, const media_codec_info* codecInfo, uint32 flags) { TRACE("PluginManager::CreateEncoder enter\n"); // Get encoder for this codec info from the server server_get_encoder_for_codec_info_request request; server_get_encoder_for_codec_info_reply reply; request.id = codecInfo->id; status_t ret = QueryServer(SERVER_GET_ENCODER_FOR_CODEC_INFO, &request, sizeof(request), &reply, sizeof(reply)); if (ret != B_OK) { printf("PluginManager::CreateEncoder: can't get encoder for codec %s: " "%s\n", codecInfo->pretty_name, strerror(ret)); return ret; } MediaPlugin* plugin = GetPlugin(reply.ref); if (!plugin) { printf("PluginManager::CreateEncoder: GetPlugin failed\n"); return B_ERROR; } EncoderPlugin* encoderPlugin = dynamic_cast<EncoderPlugin*>(plugin); if (encoderPlugin == NULL) { printf("PluginManager::CreateEncoder: dynamic_cast failed\n"); PutPlugin(plugin); return B_ERROR; } *_encoder = encoderPlugin->NewEncoder(*codecInfo); if (*_encoder == NULL) { printf("PluginManager::CreateEncoder: NewEncoder() failed\n"); PutPlugin(plugin); return B_ERROR; } TRACE(" created encoder: %p\n", *_encoder); (*_encoder)->fMediaPlugin = plugin; TRACE("PluginManager::CreateEncoder leave\n"); return B_OK; }
status_t PluginManager::CreateEncoder(Encoder** encoder, const media_format& format) { TRACE("PluginManager::CreateEncoder enter nr2\n"); entry_ref ref; status_t ret = AddOnManager::GetInstance()->GetEncoderForFormat( &ref, format); if (ret != B_OK) { ERROR("PluginManager::CreateEncoder: can't get decoder for format: " "%s\n", strerror(ret)); return ret; } MediaPlugin* plugin = GetPlugin(ref); if (plugin == NULL) { ERROR("PluginManager::CreateEncoder: GetPlugin failed\n"); return B_ERROR; } EncoderPlugin* encoderPlugin = dynamic_cast<EncoderPlugin*>(plugin); if (encoderPlugin == NULL) { ERROR("PluginManager::CreateEncoder: dynamic_cast failed\n"); PutPlugin(plugin); return B_ERROR; } *encoder = encoderPlugin->NewEncoder(format); if (*encoder == NULL) { ERROR("PluginManager::CreateEncoder: NewEncoder() failed\n"); PutPlugin(plugin); return B_ERROR; } TRACE(" created encoder: %p\n", *encoder); (*encoder)->fMediaPlugin = plugin; TRACE("PluginManager::CreateEncoder leave nr2\n"); return B_OK; }
status_t PluginManager::CreateEncoder(Encoder** _encoder, const media_codec_info* codecInfo, uint32 flags) { TRACE("PluginManager::CreateEncoder enter\n"); // Get encoder for this codec info from the server entry_ref ref; status_t ret = AddOnManager::GetInstance()->GetEncoder(&ref, codecInfo->id); if (ret != B_OK) { printf("PluginManager::CreateEncoder: can't get encoder for codec %s: " "%s\n", codecInfo->pretty_name, strerror(ret)); return ret; } MediaPlugin* plugin = GetPlugin(ref); if (!plugin) { printf("PluginManager::CreateEncoder: GetPlugin failed\n"); return B_ERROR; } EncoderPlugin* encoderPlugin = dynamic_cast<EncoderPlugin*>(plugin); if (encoderPlugin == NULL) { printf("PluginManager::CreateEncoder: dynamic_cast failed\n"); PutPlugin(plugin); return B_ERROR; } *_encoder = encoderPlugin->NewEncoder(*codecInfo); if (*_encoder == NULL) { printf("PluginManager::CreateEncoder: NewEncoder() failed\n"); PutPlugin(plugin); return B_ERROR; } TRACE(" created encoder: %p\n", *_encoder); (*_encoder)->fMediaPlugin = plugin; TRACE("PluginManager::CreateEncoder leave\n"); return B_OK; }