std::vector<byte_t> TextEncoding::encode(const Char* str, int length, int* outUsedDefaultCharCount) { // TODO: this が UTF16 なら memcpy でよい // 入力に入っている最悪パターンの文字数 size_t srcMaxCharCount = length; // 出力バッファに必要な最大バイト数 size_t outputMaxByteCount = srcMaxCharCount * maxByteCount(); // 出力バッファ作成 std::vector<byte_t> output(outputMaxByteCount + maxByteCount()); // \0 強制格納に備え、1文字分余裕のあるサイズを指定する // convert std::unique_ptr<TextEncoder> encoder(createEncoder()); TextEncodeResult result; encoder->convertFromUTF16( (const UTF16*)str, length, output.data(), output.size(), &result); if (outUsedDefaultCharCount) { *outUsedDefaultCharCount = encoder->usedDefaultCharCount(); } output.resize(result.outputByteCount); return output; }
void Kwave::CodecPlugin::load(QStringList &/* params */) { use(); m_codec.m_use_count++; if (m_codec.m_use_count == 1) { m_codec.m_encoder = createEncoder(); if (m_codec.m_encoder) Kwave::CodecManager::registerEncoder(*m_codec.m_encoder); m_codec.m_decoder = createDecoder(); if (m_codec.m_decoder) Kwave::CodecManager::registerDecoder(*m_codec.m_decoder); } }
int Private_Impl_Still::initialize() { if ( _isInitialized ) return 0; if ( createCamera() ) { cout << API_NAME << ": Failed to create camera component.\n"; destroyCamera(); return -1; } else if ( createEncoder() ) { cout << API_NAME << ": Failed to create encoder component.\n"; destroyCamera(); return -1; } else { camera_still_port = camera->output[MMAL_CAMERA_CAPTURE_PORT]; encoder_input_port = encoder->input[0]; encoder_output_port = encoder->output[0]; if ( connectPorts ( camera_still_port, encoder_input_port, &encoder_connection ) != MMAL_SUCCESS ) { cout << "ERROR: Could not connect encoder ports!\n"; return -1; } } _isInitialized=true; return 0; }
QString GstExporter::exportVideo() { qDebug() << "Starting Videoexport..."; QGst::BinPtr mixer = createVideoMixer(); QGst::BinPtr encoder = createEncoder(); QGst::ElementPtr scale = QGst::ElementFactory::make("videoscale"); QGst::ElementPtr sink = QGst::ElementFactory::make("filesink"); QGst::ElementPtr capsfilter = createCapsFilter(exportWidthPx, exportHeightPx); QString recordingTime = rec_->datetime.toString("yyyy_MM_dd_hh_mm_ss"); qDebug() << "Loaded recodring, recording time: " << rec_->datetime; QDir current = QDir::current(); current.mkdir("exports"); current.cd("exports"); QString filename = current.absoluteFilePath("export-" + recordingTime + ".mp4"); sink->setProperty("location", filename); m_pipeline = QGst::Pipeline::create(); m_pipeline->add(mixer, capsfilter, encoder, scale, sink); m_pipeline->linkMany(mixer, capsfilter, scale, encoder, sink); qDebug() << "GstExporter: pipeline: Added and linked all elements"; m_pipeline->bus()->addSignalWatch(); QGlib::connect(m_pipeline->bus(), "message", this, &GstExporter::onBusMessage); qDebug() << "exportVideo(): Starting pipeline"; m_pipeline->setState(QGst::StatePlaying); timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &GstExporter::progressPercent); timer->start(1000); return current.relativeFilePath(filename); }