コード例 #1
0
ファイル: camera.cpp プロジェクト: STMPNGRND/rospilot
    bool sendPreview()
    {
        if(camera != nullptr && camera->getLiveImage(&image)) {
            bool keyFrame = false;
            bool transcodedSuccessfully = false;
            imagePub.publish(image);
            jpegDecoder->decodeInPlace(&image);
            liveStream->addFrame(&image);
            recorder->addFrame(&image);
            if (detector != nullptr) {
                detector->addFrame(&image);
            }

            return true;
        }
        return false;
    }
コード例 #2
0
ファイル: jpeg_benchmark.cpp プロジェクト: STMPNGRND/rospilot
int main(int argc, char **argv)
{
    // XXX: Assumes that the input image 1600x1200
    PixelFormat pixelFormat = PIX_FMT_YUV420P;
    JpegDecoder *jpegDecoder = new FFmpegJpegDecoder(1600, 1200, pixelFormat);

    sensor_msgs::CompressedImage image;
    image.format = "jpeg";

    std::string path(argv[1]);
    std::fstream f(path, std::ifstream::binary | std::ios_base::in);
    if (!f) {
        std::cout << "Failed to open " << path << std::endl;
        return 1;
    }
    f.seekg(0, f.end);
    int length = f.tellg();
    f.seekg(0, f.beg);
    char *buffer = new char[length];
    f.read(buffer, length);
    f.close();
    for (int i = 0; i < length; i++) {
        image.data.push_back(buffer[i]);
    }
    delete buffer;

    sensor_msgs::CompressedImage images[10];
    for (int i = 0; i < 10; i++) {
        images[i] = image;
    }

    int junk = 0;
    std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
    for (int i = 0; i < 10; i++) {
        jpegDecoder->decodeInPlace(&images[i]);
        // Make sure there's a side effect
        junk += images[i].data.size();
    }
    std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
    double us = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() / 1000000.0;
    std::cout << "FFmpeg FPS " << 10 / us << std::endl;
    std::cout << "check: " << junk << std::endl;
    
    delete jpegDecoder;
    jpegDecoder = new TurboJpegDecoder(1600, 1200, pixelFormat);
    for (int i = 0; i < 10; i++) {
        images[i] = image;
    }
    junk = 0;
    start = std::chrono::steady_clock::now();
    for (int i = 0; i < 10; i++) {
        jpegDecoder->decodeInPlace(&images[i]);
        // Make sure there's a side effect
        junk += images[i].data.size();
    }
    end = std::chrono::steady_clock::now();
    us = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() / 1000000.0;
    std::cout << "TurboJpeg FPS " << 10 / us << std::endl;
    std::cout << "check: " << junk << std::endl;

    delete jpegDecoder;
    return 0;
}