various: conformed frame usages to respect stride
This commit is contained in:
@@ -324,7 +324,7 @@ FramePtr FFmpegDecoder::RetrieveVideo(const rational &timecode, const int &divid
|
||||
|
||||
// Convert frame to RGB/A for the rest of the pipeline
|
||||
uint8_t* output_data = reinterpret_cast<uint8_t*>(copy->data());
|
||||
int output_linesize = copy->width() * PixelFormat::BytesPerPixel(native_pix_fmt_);
|
||||
int output_linesize = copy->linesize_bytes();
|
||||
|
||||
sws_scale(scale_ctx_,
|
||||
input_data,
|
||||
|
||||
@@ -254,7 +254,7 @@ void FFmpegEncoder::WriteInternal(FramePtr frame)
|
||||
|
||||
// Use swscale context to convert formats/linesizes
|
||||
input_data = frame->const_data();
|
||||
input_linesize = frame->width() * PixelFormat::BytesPerPixel(video_conversion_fmt_);
|
||||
input_linesize = frame->linesize_bytes();
|
||||
error_code = sws_scale(video_scale_ctx_,
|
||||
reinterpret_cast<const uint8_t**>(&input_data),
|
||||
&input_linesize,
|
||||
|
||||
+7
-7
@@ -50,11 +50,16 @@ void Frame::set_video_params(const VideoRenderingParams ¶ms)
|
||||
linesize_ = qCeil(static_cast<double>(params.width()) / 16.0) * 16;
|
||||
}
|
||||
|
||||
int Frame::linesize() const
|
||||
int Frame::linesize_pixels() const
|
||||
{
|
||||
return linesize_;
|
||||
}
|
||||
|
||||
int Frame::linesize_bytes() const
|
||||
{
|
||||
return linesize_pixels() * PixelFormat::BytesPerPixel(params_.format());
|
||||
}
|
||||
|
||||
const int &Frame::width() const
|
||||
{
|
||||
return params_.width();
|
||||
@@ -76,7 +81,7 @@ Color Frame::get_pixel(int x, int y) const
|
||||
return Color();
|
||||
}
|
||||
|
||||
int pixel_index = y * width() + x;
|
||||
int pixel_index = y * linesize_pixels() + x;
|
||||
|
||||
int byte_offset = PixelFormat::GetBufferSize(video_params().format(), pixel_index, 1);
|
||||
|
||||
@@ -118,11 +123,6 @@ void Frame::set_native_timestamp(const int64_t ×tamp)
|
||||
native_timestamp_ = timestamp;
|
||||
}
|
||||
|
||||
QByteArray Frame::ToByteArray() const
|
||||
{
|
||||
return data_;
|
||||
}
|
||||
|
||||
char *Frame::data()
|
||||
{
|
||||
return data_.data();
|
||||
|
||||
+2
-8
@@ -47,7 +47,8 @@ public:
|
||||
const VideoRenderingParams& video_params() const;
|
||||
void set_video_params(const VideoRenderingParams& params);
|
||||
|
||||
int linesize() const;
|
||||
int linesize_pixels() const;
|
||||
int linesize_bytes() const;
|
||||
const int& width() const;
|
||||
const int& height() const;
|
||||
const PixelFormat::Format& format() const;
|
||||
@@ -69,13 +70,6 @@ public:
|
||||
const int64_t& native_timestamp();
|
||||
void set_native_timestamp(const int64_t& timestamp);
|
||||
|
||||
/**
|
||||
* @brief Returns a copy of the data in this frame as a QByteArray
|
||||
*
|
||||
* Will always do a deep copy. If you want to affect the data directly, use data() instead.
|
||||
*/
|
||||
QByteArray ToByteArray() const;
|
||||
|
||||
/**
|
||||
* @brief Get the data buffer of this frame
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user