41 #ifndef FILMSTRO_FFMPEG_FFMPEGVIDEOSCALER_H_INCLUDED
42 #define FILMSTRO_FFMPEG_FFMPEGVIDEOSCALER_H_INCLUDED
52 sws_freeContext (scalerContext);
56 void setupScaler (
const int in_width,
const int in_height,
const AVPixelFormat in_format,
57 const int out_width,
const int out_height,
const AVPixelFormat out_format)
60 sws_freeContext (scalerContext);
61 scalerContext =
nullptr;
64 const AVPixFmtDescriptor* in_descriptor = av_pix_fmt_desc_get (in_format);
66 DBG (
"No description for input pixel format");
69 const int in_bitsPerPixel = av_get_padded_bits_per_pixel (in_descriptor);
70 for (
int i=0; i < 4; ++i)
71 inLinesizes [i] = i < in_descriptor->nb_components ? in_width * in_bitsPerPixel >> 3 : 0;
73 const AVPixFmtDescriptor* out_descriptor = av_pix_fmt_desc_get (out_format);
74 if (!out_descriptor) {
75 DBG (
"No description for output pixel format");
78 const int out_bitsPerPixel = av_get_padded_bits_per_pixel (out_descriptor);
79 for (
int i=0; i < 4; ++i)
80 outLinesizes [i] = i < out_descriptor->nb_components ? out_width * out_bitsPerPixel >> 3 : 0;
83 scalerContext = sws_getContext (in_width, in_height, in_format,
84 out_width, out_height, out_format,
85 SWS_BILINEAR, NULL, NULL, NULL);
87 DBG (
"Impossible to create scale context for the conversion");
97 juce::Image::BitmapData data (image, 0, 0,
100 juce::Image::BitmapData::writeOnly);
102 uint8_t* destination[4] = {data.data,
nullptr,
nullptr,
nullptr};
104 sws_scale (scalerContext,
119 juce::Image::BitmapData data (image, 0, 0,
123 uint8_t* source[4] = {data.data,
nullptr,
nullptr,
nullptr};
125 sws_scale (scalerContext,
137 SwsContext* scalerContext;
void setupScaler(const int in_width, const int in_height, const AVPixelFormat in_format, const int out_width, const int out_height, const AVPixelFormat out_format)
Setup a scaler to scale video frames and to convert pixel formats.
Definition: filmstro_ffmpeg_FFmpegVideoScaler.h:56
void convertImageToFrame(AVFrame *frame, const juce::Image &image)
Converts a JUCE Image into a ffmpeg AVFrame to be written into a video stream.
Definition: filmstro_ffmpeg_FFmpegVideoScaler.h:116
~FFmpegVideoScaler()
Definition: filmstro_ffmpeg_FFmpegVideoScaler.h:49
void convertFrameToImage(juce::Image &image, const AVFrame *frame)
takes an AVFrame from ffmpeg and converts it to a JUCE Image.
Definition: filmstro_ffmpeg_FFmpegVideoScaler.h:94
Definition: filmstro_ffmpeg_FFmpegVideoScaler.h:44
FFmpegVideoScaler()
Creates a scaler object.
Definition: filmstro_ffmpeg_FFmpegVideoScaler.h:47