Fixed a bug with bitshifting float color values. ImageMagick can be built with different types of Quantum color values, and Im trying to make libopenshot work seemlessl with them.

This commit is contained in:
Jonathan Thomas
2014-07-03 17:52:16 -05:00
parent 4509254895
commit 77f4586f21
4 changed files with 11 additions and 11 deletions

View File

@@ -265,9 +265,9 @@ void DeckLinkOutputDelegate::WriteFrame(tr1::shared_ptr<openshot::Frame> frame)
{
// Update buffer (which is already linked to the AVFrame: pFrameRGB)
castBytes[row] = 0; // alpha
castBytes[row+1] = pixel_packets[packet].red >> bit_shift;
castBytes[row+2] = pixel_packets[packet].green >> bit_shift;
castBytes[row+3] = pixel_packets[packet].blue >> bit_shift;
castBytes[row+1] = (int) pixel_packets[packet].red >> bit_shift;
castBytes[row+2] = (int) pixel_packets[packet].green >> bit_shift;
castBytes[row+3] = (int) pixel_packets[packet].blue >> bit_shift;
}
#pragma omp critical (blackmagic_output_queue)

View File

@@ -1231,13 +1231,13 @@ void FFmpegWriter::process_video_packet(tr1::shared_ptr<Frame> frame)
{
// Update buffer (which is already linked to the AVFrame: pFrameRGB)
// Each color needs to be 8 bit (so I'm bit shifting the 16 bit ints)
frame_source->data[0][row] = pixel_packets[packet].red >> bit_shift;
frame_source->data[0][row+1] = pixel_packets[packet].green >> bit_shift;
frame_source->data[0][row+2] = pixel_packets[packet].blue >> bit_shift;
frame_source->data[0][row] = (int) pixel_packets[packet].red >> bit_shift;
frame_source->data[0][row+1] = (int) pixel_packets[packet].green >> bit_shift;
frame_source->data[0][row+2] = (int) pixel_packets[packet].blue >> bit_shift;
// Copy alpha channel (if needed)
if (step == 4)
frame_source->data[0][row+3] = pixel_packets[packet].opacity >> bit_shift;
frame_source->data[0][row+3] = (int) pixel_packets[packet].opacity >> bit_shift;
}
// Resize & convert pixel format

View File

@@ -75,9 +75,9 @@ void RendererBase::paint(const std::tr1::shared_ptr<Frame> & frame)
// Iterate through the pixel packets, and load our own buffer
const Magick::PixelPacket *pixels = frame->GetPixels();
for (int n = 0, i = 0; n < width * height; n += 1, i += 3) {
buffer[i+0] = pixels[n].red >> bit_shift;
buffer[i+1] = pixels[n].green >> bit_shift;
buffer[i+2] = pixels[n].blue >> bit_shift;
buffer[i+0] = (int) pixels[n].red >> bit_shift;
buffer[i+1] = (int) pixels[n].green >> bit_shift;
buffer[i+2] = (int) pixels[n].blue >> bit_shift;
}
#endif