Skip to content

Instantly share code, notes, and snippets.

View prabindh's full-sized avatar
💭
I may be slow to respond.

Prabindh Sundareson prabindh

💭
I may be slow to respond.
View GitHub Profile
@prabindh
prabindh / visual-studio-code-conda.sh
Last active June 24, 2021 12:24
Run visual studio code in Conda environment. Allows python debugging
Debugging with vscode and conda python:
- Install vs code
- Follow https://medium.com/analytics-vidhya/efficient-way-to-activate-conda-in-vscode-ef21c4c231f2 to add conda terminal to vs code via launch.json. Args have to be added like
"args": ["--aa=2", "--ab=1", "--sm", "--input=asd.img"]
- Close vscode
-- open conda prompt, activate required environment via conda activate myEnv
- launch vscode from the command prompt, using "code"
@prabindh
prabindh / ffmpeg.sh
Created June 3, 2021 11:10
FFMPEG commands for multimedia operations, streaming, and interop with CUDA/OpenGL
#Creating SBS (side by side) videos:
ffmpeg -i input_file -i input_file2 -filter_complex hstack -vcodec libx264 -b:v 30M -vsync 0 output.mp4
#MP4 from raw YUV
ffmpeg -f rawvideo -vcodec rawvideo -s 1920x1080 -pix_fmt yuv420p -i input.yuv -c:v libx264 -preset slow -qp 0 -vsync 0 -pix_fmt nv12 output.mp4
#Scaling:
@prabindh
prabindh / libcurl-static.cpp
Created March 30, 2021 06:54
Building C++ application with static libcurl
//Building C++ application with static build of libcurl:
/*
1. In the project, C++ preprocessor to be defined - "CURL_STATICLIB"
2. CURL itself should be built with:
- static option
- SSL static
- IPV6 static
- SSPI static
@prabindh
prabindh / ffmpeg-log.cpp
Created July 28, 2020 07:11
FFMPEG logging
// av_log_set_callback(ffmpeg_avcodec_log);
static void ffmpeg_avcodec_log(void *ptr, int val, const char * msg, va_list
ap)
{
AVClass* avc = ptr ? *(AVClass**)ptr : NULL;
FILE *flog = fopen("stream-receiver.log", "a");
if (avc)
{
@prabindh
prabindh / encode-video.cpp
Created July 28, 2020 03:41
calling ffmpeg encoder
#define OUTPUT_W 1920
#define OUTPUT_H 1080
#define OUTPUT_FPS 25
int main()
{
int ret = 0;
bool bUseHW = false;
bool bNv = false;
Encoder* pEnc = new Encoder(bUseHW, bNv, OUTPUT_W, OUTPUT_H, OUTPUT_FPS);
@prabindh
prabindh / eglimage_cuda.cpp
Created July 27, 2020 12:56
eglimage cuda
// Create a texture and register it for sharing with CUDA.
int setup_external_texture_oes(nengl_ws* ws, void* window)
{
int isSupported = -1;
isSupported = ws->check_extension("EGL_KHR_gl_texture_2D_image");
isSupported = ws->check_extension("GL_OES_EGL_image_external");
constexpr GLsizei texSize = 32;
GLubyte data[texSize * texSize * 4];
GLuint mSourceTexture, mExternalTexture;
@prabindh
prabindh / use-vbo-cuda.cpp
Created July 24, 2020 13:11
Use vbo with cuda
GLuint positionsVBO;
struct cudaGraphicsResource* positionsVBO_CUDA;
int main() {
// Explicitly set device
cudaGLSetGLDevice(0);
// Initialize OpenGL and GLUT
...
glutDisplayFunc(display);
@prabindh
prabindh / ffmpeg-encoder3.cpp
Created July 23, 2020 13:10
encode using vaapi
// from https://stackoverflow.com/questions/59666753/encode-video-from-c-using-libavcodec-and-vaapi
#ifndef ENCODER_H
#define ENCODER_H
#include <cassert>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/opt.h>
@prabindh
prabindh / ffmpeg-encode2.cpp
Created July 9, 2020 12:48
ffmpeg encode 2
// https://stackoverflow.com/questions/62279768/avcodec-encode-video2-the-memory-usage-is-very-high
extern "C"
{
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#include <libavcodec/avcodec.h>
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
@prabindh
prabindh / ffmpeg encode
Created July 6, 2020 11:30
ffmpeg-encode.cpp
// Snippet from https://stackoverflow.com/questions/16252905/why-do-i-get-a-crash-only-sometimes-when-closing-input-file-with-ffmpeg
// save the frame to file
int Bytes = avpicture_get_size(PIX_FMT_YUVJ420P, CodecCtx->width, CodecCtx->height);
BufferHandle buffer((uint8_t*)av_malloc(Bytes*sizeof(uint8_t)), av_free);
CodecContextHandle OutContext(avcodec_alloc_context3(NULL), free_context);
OutContext->bit_rate = CodecCtx->bit_rate;
OutContext->width = CodecCtx->width;
OutContext->height = CodecCtx->height;
OutContext->pix_fmt = PIX_FMT_YUVJ420P;
OutContext->codec_id = CODEC_ID_MJPEG;