status_t PluginManager::CreateWriter(Writer** writer, const media_file_format& mff, BDataIO* target) { TRACE("PluginManager::CreateWriter enter\n"); // Get the Writer responsible for this media_file_format from the server. server_get_writer_request request; request.internal_id = mff.id.internal_id; server_get_writer_reply reply; status_t ret = QueryServer(SERVER_GET_WRITER_FOR_FORMAT_FAMILY, &request, sizeof(request), &reply, sizeof(reply)); if (ret != B_OK) { printf("PluginManager::CreateWriter: can't get writer for file " "family: %s\n", strerror(ret)); return ret; } MediaPlugin* plugin = GetPlugin(reply.ref); if (plugin == NULL) { printf("PluginManager::CreateWriter: GetPlugin failed\n"); return B_ERROR; } WriterPlugin* writerPlugin = dynamic_cast<WriterPlugin*>(plugin); if (writerPlugin == NULL) { printf("PluginManager::CreateWriter: dynamic_cast failed\n"); PutPlugin(plugin); return B_ERROR; } *writer = writerPlugin->NewWriter(); if (*writer == NULL) { printf("PluginManager::CreateWriter: NewWriter failed\n"); PutPlugin(plugin); return B_ERROR; } (*writer)->Setup(target); (*writer)->fMediaPlugin = plugin; TRACE("PluginManager::CreateWriter leave\n"); return B_OK; }
status_t PluginManager::CreateWriter(Writer** writer, const media_file_format& mff, BDataIO* target) { TRACE("PluginManager::CreateWriter enter\n"); // Get the Writer responsible for this media_file_format from the server. entry_ref ref; status_t ret = AddOnManager::GetInstance()->GetWriter(&ref, mff.id.internal_id); if (ret != B_OK) { printf("PluginManager::CreateWriter: can't get writer for file " "family: %s\n", strerror(ret)); return ret; } MediaPlugin* plugin = GetPlugin(ref); if (plugin == NULL) { printf("PluginManager::CreateWriter: GetPlugin failed\n"); return B_ERROR; } WriterPlugin* writerPlugin = dynamic_cast<WriterPlugin*>(plugin); if (writerPlugin == NULL) { printf("PluginManager::CreateWriter: dynamic_cast failed\n"); PutPlugin(plugin); return B_ERROR; } *writer = writerPlugin->NewWriter(); if (*writer == NULL) { printf("PluginManager::CreateWriter: NewWriter failed\n"); PutPlugin(plugin); return B_ERROR; } (*writer)->Setup(target); (*writer)->fMediaPlugin = plugin; TRACE("PluginManager::CreateWriter leave\n"); return B_OK; }