diff --git a/liblava/base/instance.cpp b/liblava/base/instance.cpp
index e0bd2fd8e59f21ae7f227687dad62ad4ee7e6151..0e16c5b5b6bb0d16d88ef598b9b8b999844f4346 100644
--- a/liblava/base/instance.cpp
+++ b/liblava/base/instance.cpp
@@ -125,7 +125,7 @@ namespace lava {
             log()->error(str(message_header));
             log()->error(callback_data->pMessage);
 
-            assert(!"check validation error");
+            //assert(!"check validation error");
         } else if (message_severity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
             log()->warn(str(message_header));
             log()->warn(callback_data->pMessage);
diff --git a/res/dpr/utility/encode_chroma_subsampling.frag b/res/dpr/utility/encode_chroma_subsampling.frag
index c2009de0a46fa5ba4695cf3f275c13695f308be6..aaf4cc7ea9d57bcba32a266e5ef39cb434c4ee54 100644
--- a/res/dpr/utility/encode_chroma_subsampling.frag
+++ b/res/dpr/utility/encode_chroma_subsampling.frag
@@ -6,13 +6,13 @@ layout(set = 0, binding = 0) uniform sampler2D samplerInput;
 
 void main()
 {
-    vec2 base_coord = 2.0 * floor(gl_FragCoord.xy);
+    ivec2 base_coord = 2 * ivec2(gl_FragCoord.xy);
 
-    vec2 color_chroma = vec2(0.0, 0.0);
-    color_chroma += texture(samplerInput, base_coord + vec2(0.0, 0.0)).xy;
-    color_chroma += texture(samplerInput, base_coord + vec2(1.0, 0.0)).xy;
-    color_chroma += texture(samplerInput, base_coord + vec2(0.0, 1.0)).xy;
-    color_chroma += texture(samplerInput, base_coord + vec2(1.0, 1.0)).xy;
+    vec2 color_chroma = vec2(1.0, 0.0);
+    color_chroma += texelFetch(samplerInput, base_coord + ivec2(0, 0), 0).xy;
+    color_chroma += texelFetch(samplerInput, base_coord + ivec2(1, 0), 0).xy;
+    color_chroma += texelFetch(samplerInput, base_coord + ivec2(0, 1), 0).xy;
+    color_chroma += texelFetch(samplerInput, base_coord + ivec2(1, 1), 0).xy;
     color_chroma /= 4.0;
 
     outChroma = color_chroma;
diff --git a/res/dpr/utility/encode_color_conversion.frag b/res/dpr/utility/encode_color_conversion.frag
index 46cc05b9e9d0e16d265dc34c52156ffc98ef1e99..280ad7538e41bda8aacae29c6fa69a4eb4f9ce32 100644
--- a/res/dpr/utility/encode_color_conversion.frag
+++ b/res/dpr/utility/encode_color_conversion.frag
@@ -15,7 +15,7 @@ void main()
         vec3(0.114, 0.436, -0.10001) //third column
     );
 
-    vec3 color_rgb = texture(samplerInput, floor(gl_FragCoord.xy)).xyz;
+    vec3 color_rgb = texelFetch(samplerInput, ivec2(gl_FragCoord.xy), 0).xyz;
     vec3 color_yuv = convert_matrix * color_rgb;
 
     outLuma = color_yuv.x;
diff --git a/src/headset/remote_headset.cpp b/src/headset/remote_headset.cpp
index 7e53d384c702c8c813569f1d84469f7df300719b..883f2fda69c4990367bd1115b24d5c6e8f3845cb 100644
--- a/src/headset/remote_headset.cpp
+++ b/src/headset/remote_headset.cpp
@@ -102,6 +102,11 @@ void RemoteHeadset::submit_frame(VkCommandBuffer command_buffer, VkImageLayout f
         return;
     }
 
+    if (frame_id > 0)
+    {
+        return;
+    }
+
     lava::renderer& renderer = this->get_application()->get_renderer();
     
     Encoder::Ptr encoder = this->encoders[frame_id];
diff --git a/src/utility/encoder.cpp b/src/utility/encoder.cpp
index cdf52a885ffd6e524ab389e5b21ded64014ae70a..528d50d7ffe7b187abd6773cc0b44fbb5656d9a8 100644
--- a/src/utility/encoder.cpp
+++ b/src/utility/encoder.cpp
@@ -221,13 +221,49 @@ bool Encoder::encode_frame(VkCommandBuffer command_buffer, lava::renderer& rende
     //Execute the subsample pass. Render a fullscreen quad and subsample the image frame->input_chroma. Store the result in the image frame->input_chroma_subsampled.
     vkCmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, this->pipeline_layout->get(), 0, 1, &frame->subsample_descriptor, 0, nullptr);
     frame->subsample_pass->process(command_buffer, 0);
-
+    
     //Check if the original layout of the input image needs to be restored.
     if (image_layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
     {
         lava::insert_image_memory_barrier(device, command_buffer, image->get(), VK_ACCESS_SHADER_READ_BIT, 0, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, image_layout, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, image->get_subresource_range());
     }
 
+    /*VkImageMemoryBarrier image_barrier;
+    image_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+    image_barrier.pNext = nullptr;
+    image_barrier.srcAccessMask = 0;
+    image_barrier.dstAccessMask = 0;
+    image_barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL;
+    image_barrier.newLayout = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR;
+    image_barrier.srcQueueFamilyIndex = this->default_queue.family;
+    image_barrier.dstQueueFamilyIndex = this->encode_queue->family;
+    image_barrier.image = frame->input_combined;
+    image_barrier.subresourceRange = image_range;
+
+    vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &image_barrier);
+    */
+    /*
+    //DEBUG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+    VkImageSubresourceRange image_range;
+    image_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+    image_range.baseMipLevel = 0;
+    image_range.levelCount = 1;
+    image_range.baseArrayLayer = 0;
+    image_range.layerCount = 1;
+
+    VkClearColorValue clear_value;
+    clear_value.float32[0] = 1.0f;
+    clear_value.float32[1] = 0.0f;
+    clear_value.float32[2] = 0.0f;
+    clear_value.float32[3] = 0.0f;
+
+    lava::insert_image_memory_barrier(this->descriptor_pool->get_device(), command_buffer, frame->input_luma, 0, 0, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, image_range);
+    lava::insert_image_memory_barrier(this->descriptor_pool->get_device(), command_buffer, frame->input_chroma_subsampled, 0, 0, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, image_range);
+
+    vkCmdClearColorImage(command_buffer, frame->input_luma, VK_IMAGE_LAYOUT_GENERAL, &clear_value, 1, &image_range);
+    vkCmdClearColorImage(command_buffer, frame->input_chroma_subsampled, VK_IMAGE_LAYOUT_GENERAL, &clear_value, 1, &image_range);
+    */
     VkImageSubresourceRange image_range;
     image_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
     image_range.baseMipLevel = 0;
@@ -242,13 +278,16 @@ bool Encoder::encode_frame(VkCommandBuffer command_buffer, lava::renderer& rende
     image_barrier.dstAccessMask = 0;
     image_barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL;
     image_barrier.newLayout = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR;
-    image_barrier.srcQueueFamilyIndex = this->default_queue.family;
-    image_barrier.dstQueueFamilyIndex = this->encode_queue->family;
+    image_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; //this->default_queue.family;
+    image_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; //this->encode_queue->family;
     image_barrier.image = frame->input_combined;
     image_barrier.subresourceRange = image_range;
 
     vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &image_barrier);
-    
+
+    //DEBUG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
     //Create the encode command buffer.
     if (!this->record_encoding(device, frame, false))
     {
@@ -393,9 +432,10 @@ bool Encoder::record_encoding(lava::device_ptr device, EncoderFrame::Ptr frame,
 
 void Encoder::retrive_encoding(lava::device_ptr device, EncoderFrame::Ptr frame)
 {
-    std::array<uint32_t, 3> buffer_range; //NOTE: For some reasons, outputs 3 values instead of 2.
+    std::array<uint32_t, 3> buffer_range;
+    memset(buffer_range.data(), 0, sizeof(uint32_t) * buffer_range.size());
 
-    if (vkGetQueryPoolResults(device->get(), this->query_pool, frame->output_query_index, 1, sizeof(uint32_t) * buffer_range.size(), buffer_range.data(), 0, VK_QUERY_RESULT_WAIT_BIT) != VK_SUCCESS)
+    if (vkGetQueryPoolResults(device->get(), this->query_pool, frame->output_query_index, 1, sizeof(uint32_t) * buffer_range.size(), buffer_range.data(), 0, VK_QUERY_RESULT_WAIT_BIT | VK_QUERY_RESULT_WITH_STATUS_BIT_KHR) != VK_SUCCESS)
     {
         return;
     }
@@ -506,20 +546,20 @@ bool Encoder::create_parameters(lava::device_ptr device)
     sps_flags.constraint_set3_flag = 0;                                            // No constraints
     sps_flags.constraint_set4_flag = 0;                                            // No constraints
     sps_flags.constraint_set5_flag = 0;                                            // No constraints
-    sps_flags.direct_8x8_inference_flag = 0;                                       // Not Required, only for b-frames
+    sps_flags.direct_8x8_inference_flag = 1;                                       // Not Required, only for b-frames
     sps_flags.mb_adaptive_frame_field_flag = 0;                                    // Not Required
     sps_flags.frame_mbs_only_flag = 1;                                             // Only frames no fields
     sps_flags.delta_pic_order_always_zero_flag = 0;                                // Not Required
     sps_flags.separate_colour_plane_flag = 0;                                      // Not Required
     sps_flags.gaps_in_frame_num_value_allowed_flag = 0;                            // No gaps allowed
     sps_flags.qpprime_y_zero_transform_bypass_flag = 0;                            // Not Required
-    sps_flags.frame_cropping_flag = 1;                                             // Use crop to adjust the image size
+    sps_flags.frame_cropping_flag = 0;                                             // Use crop to adjust the image size
     sps_flags.seq_scaling_matrix_present_flag = 0;                                 // Not Required
     sps_flags.vui_parameters_present_flag = 0;                                     // Dont send VUI
 
     StdVideoH264SequenceParameterSet sps_parameter;
-    sps_parameter.profile_idc = STD_VIDEO_H264_PROFILE_IDC_BASELINE;               // Baseline profile
-    sps_parameter.level_idc = STD_VIDEO_H264_LEVEL_1_0;                            // Level 1.0
+    sps_parameter.profile_idc = STD_VIDEO_H264_PROFILE_IDC_HIGH;               // Baseline profile
+    sps_parameter.level_idc = STD_VIDEO_H264_LEVEL_4_1;                            // Level 1.0
     sps_parameter.seq_parameter_set_id = this->sequence_parameter_id;              // Id of the sequence parameter set
     sps_parameter.chroma_format_idc = STD_VIDEO_H264_CHROMA_FORMAT_IDC_420;        // Not Required
     sps_parameter.bit_depth_luma_minus8 = 0;                                       // Not Required
@@ -530,7 +570,7 @@ bool Encoder::create_parameters(lava::device_ptr device)
     sps_parameter.offset_for_non_ref_pic = 0;                                      // Not Required
     sps_parameter.offset_for_top_to_bottom_field = 0;                              // Not Required
     sps_parameter.num_ref_frames_in_pic_order_cnt_cycle = 0;                       // Not Required
-    sps_parameter.max_num_ref_frames = 0;                                          // Set to 0 reference frames therefore only i-frames
+    sps_parameter.max_num_ref_frames = 1;                                          // Set to 0 reference frames therefore only i-frames
     sps_parameter.pic_width_in_mbs_minus1 = this->setting_block_count.x - 1;       // Set image width in macroblocks
     sps_parameter.pic_height_in_map_units_minus1 = this->setting_block_count.y - 1;// Set image height in macroblocks
     sps_parameter.frame_crop_left_offset = 0;                                      // Set no crop left
@@ -544,14 +584,14 @@ bool Encoder::create_parameters(lava::device_ptr device)
     
     //H.264 Specification Section 7.4.2.2:
     StdVideoH264PpsFlags pps_flags;
-    pps_flags.transform_8x8_mode_flag = 0;                                         // Set to zero
+    pps_flags.transform_8x8_mode_flag = 1;                                         // Set to zero
     pps_flags.redundant_pic_cnt_present_flag = 0;                                  // Set to zero
     pps_flags.constrained_intra_pred_flag = 0;                                     // Set to zero
-    pps_flags.deblocking_filter_control_present_flag = 0;                          // Set to zero, no deblocking
+    pps_flags.deblocking_filter_control_present_flag = 1;                          // Set to zero, no deblocking
     pps_flags.weighted_bipred_idc_flag = 0;                                        // Set to zero
     pps_flags.weighted_pred_flag = 0;                                              // Set to zero
     pps_flags.pic_order_present_flag = 0;                                          // Set to zero
-    pps_flags.entropy_coding_mode_flag = 0;                                        // Set to zero, use CABAC for encoding
+    pps_flags.entropy_coding_mode_flag = 1;                                        // Set to zero, use CABAC for encoding
     pps_flags.pic_scaling_matrix_present_flag = 0;                                 // Set to zero
 
     StdVideoH264PictureParameterSet pps_parameter;
@@ -682,8 +722,8 @@ bool Encoder::create_sampler(lava::device_ptr device)
     sampler_create_info.maxAnisotropy = 1.0f;
     sampler_create_info.compareEnable = VK_FALSE;
     sampler_create_info.compareOp = VK_COMPARE_OP_LESS;
-    sampler_create_info.minLod = 0;
-    sampler_create_info.maxLod = VK_LOD_CLAMP_NONE;
+    sampler_create_info.minLod = 0.0f;
+    sampler_create_info.maxLod = 0.0f;
     sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK;
     sampler_create_info.unnormalizedCoordinates = VK_TRUE;
 
@@ -848,6 +888,10 @@ bool Encoder::create_input_images(lava::device_ptr device, EncoderFrame::Ptr fra
     image_extend_subsampled.height = this->setting_image_size.y / 2;
     image_extend_subsampled.depth = 1;
 
+    std::array<uint32_t, 2> queue_families;
+    queue_families[0] = this->default_queue.family;
+    queue_families[1] = this->encode_queue->family;
+
     VkImageCreateInfo luma_create_info;
     luma_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
     luma_create_info.pNext = nullptr;
@@ -859,10 +903,10 @@ bool Encoder::create_input_images(lava::device_ptr device, EncoderFrame::Ptr fra
     luma_create_info.arrayLayers = 1;
     luma_create_info.samples = VK_SAMPLE_COUNT_1_BIT;
     luma_create_info.tiling = VK_IMAGE_TILING_OPTIMAL;
-    luma_create_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-    luma_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
-    luma_create_info.queueFamilyIndexCount = 0;
-    luma_create_info.pQueueFamilyIndices = nullptr; //Use explicit ownership transfers
+    luma_create_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+    luma_create_info.sharingMode = VK_SHARING_MODE_CONCURRENT; //VK_SHARING_MODE_EXCLUSIVE;
+    luma_create_info.queueFamilyIndexCount = queue_families.size(); //0;
+    luma_create_info.pQueueFamilyIndices = queue_families.data(); //nullptr; //Use explicit ownership transfers
     luma_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 
     if (vkCreateImage(device->get(), &luma_create_info, lava::memory::alloc(), &frame->input_luma) != VK_SUCCESS)
@@ -882,9 +926,9 @@ bool Encoder::create_input_images(lava::device_ptr device, EncoderFrame::Ptr fra
     chroma_create_info.samples = VK_SAMPLE_COUNT_1_BIT;
     chroma_create_info.tiling = VK_IMAGE_TILING_OPTIMAL;
     chroma_create_info.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-    chroma_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
-    chroma_create_info.queueFamilyIndexCount = 0;
-    chroma_create_info.pQueueFamilyIndices = nullptr; //Use explicit ownership transfers
+    chroma_create_info.sharingMode = VK_SHARING_MODE_CONCURRENT; //VK_SHARING_MODE_EXCLUSIVE;
+    chroma_create_info.queueFamilyIndexCount = queue_families.size(); //0;
+    chroma_create_info.pQueueFamilyIndices = queue_families.data(); //nullptr; //Use explicit ownership transfers
     chroma_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 
     if (vkCreateImage(device->get(), &chroma_create_info, lava::memory::alloc(), &frame->input_chroma) != VK_SUCCESS)
@@ -903,13 +947,13 @@ bool Encoder::create_input_images(lava::device_ptr device, EncoderFrame::Ptr fra
     chroma_subsampled_create_info.arrayLayers = 1;
     chroma_subsampled_create_info.samples = VK_SAMPLE_COUNT_1_BIT;
     chroma_subsampled_create_info.tiling = VK_IMAGE_TILING_OPTIMAL;
-    chroma_subsampled_create_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-    chroma_subsampled_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
-    chroma_subsampled_create_info.queueFamilyIndexCount = 0;
-    chroma_subsampled_create_info.pQueueFamilyIndices = nullptr; //Use explicit ownership transfers
+    chroma_subsampled_create_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+    chroma_subsampled_create_info.sharingMode = VK_SHARING_MODE_CONCURRENT; //VK_SHARING_MODE_EXCLUSIVE;
+    chroma_subsampled_create_info.queueFamilyIndexCount = queue_families.size(); //0;
+    chroma_subsampled_create_info.pQueueFamilyIndices = queue_families.data(); //nullptr; //Use explicit ownership transfers
     chroma_subsampled_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 
-    if (vkCreateImage(device->get(), &chroma_create_info, lava::memory::alloc(), &frame->input_chroma_subsampled) != VK_SUCCESS)
+    if (vkCreateImage(device->get(), &chroma_subsampled_create_info, lava::memory::alloc(), &frame->input_chroma_subsampled) != VK_SUCCESS)
     {
         return false;
     }
@@ -926,9 +970,9 @@ bool Encoder::create_input_images(lava::device_ptr device, EncoderFrame::Ptr fra
     combined_create_info.samples = VK_SAMPLE_COUNT_1_BIT;
     combined_create_info.tiling = VK_IMAGE_TILING_OPTIMAL;
     combined_create_info.usage = VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR;
-    combined_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
-    combined_create_info.queueFamilyIndexCount = 0;
-    combined_create_info.pQueueFamilyIndices = nullptr; //Use explicit ownership transfers
+    combined_create_info.sharingMode = VK_SHARING_MODE_CONCURRENT; //VK_SHARING_MODE_EXCLUSIVE;
+    combined_create_info.queueFamilyIndexCount = queue_families.size(); //0;
+    combined_create_info.pQueueFamilyIndices = queue_families.data(); //nullptr; //Use explicit ownership transfers
     combined_create_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 
     if (vkCreateImage(device->get(), &combined_create_info, lava::memory::alloc(), &frame->input_combined) != VK_SUCCESS)
@@ -1615,17 +1659,17 @@ void Encoder::encode_pass_frame_setup(VkCommandBuffer command_buffer, EncoderFra
     image_range.baseArrayLayer = 0;
     image_range.layerCount = 1;
 
-    VkImageMemoryBarrier input_barrier;
+    /*VkImageMemoryBarrier input_barrier;
     input_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
     input_barrier.pNext = nullptr;
     input_barrier.srcAccessMask = 0;
     input_barrier.dstAccessMask = 0;
-    input_barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL;
-    input_barrier.newLayout = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR;
+    input_barrier.oldLayout = (VkImageLayout)0;
+    input_barrier.newLayout = (VkImageLayout)0;
     input_barrier.srcQueueFamilyIndex = this->default_queue.family;
     input_barrier.dstQueueFamilyIndex = this->encode_queue->family;
     input_barrier.image = frame->input_combined;
-    input_barrier.subresourceRange = image_range;
+    input_barrier.subresourceRange = image_range;*/
 
     VkImageMemoryBarrier slot_barrier;
     slot_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
@@ -1639,12 +1683,26 @@ void Encoder::encode_pass_frame_setup(VkCommandBuffer command_buffer, EncoderFra
     slot_barrier.image = frame->slot_image;
     slot_barrier.subresourceRange = image_range;
 
-    std::array<VkImageMemoryBarrier, 2> image_barriers;
-    image_barriers[0] = input_barrier;
-    image_barriers[1] = slot_barrier;
+    std::array<VkImageMemoryBarrier, 1> image_barriers;
+    //image_barriers[0] = input_barrier;
+    image_barriers[0] = slot_barrier; //ACHTUNG Array Slot
 
     vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, image_barriers.size(), image_barriers.data());
 
+    VkImageMemoryBarrier other_barrier;
+    other_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+    other_barrier.pNext = nullptr;
+    other_barrier.srcAccessMask = 0;
+    other_barrier.dstAccessMask = 0;
+    other_barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL;
+    other_barrier.newLayout = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR;
+    other_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; //this->default_queue.family;
+    other_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; //this->encode_queue->family;
+    other_barrier.image = frame->input_combined;
+    other_barrier.subresourceRange = image_range;
+
+    //vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &other_barrier);
+
     VkOffset2D encode_offset;
     encode_offset.x = 0;
     encode_offset.y = 0;
@@ -1740,17 +1798,17 @@ void Encoder::encode_pass_frame_command(VkCommandBuffer command_buffer, EncoderF
     //--- Slot Info ----------------------------------------------------------------
 
     StdVideoEncodeH264PictureInfoFlags slot_flags;
-    slot_flags.idr_flag = 1;
-    slot_flags.is_reference_flag = 1;
+    slot_flags.idr_flag = (this->frame_index == 0) ? 1 : 0; //1;
+    slot_flags.is_reference_flag = (this->frame_index == 0) ? 1 : 0; //1;
     slot_flags.used_for_long_term_reference = 0;
 
     StdVideoEncodeH264PictureInfo slot_info;
     slot_info.flags = slot_flags;
     slot_info.seq_parameter_set_id = this->sequence_parameter_id;
     slot_info.pic_parameter_set_id = this->picture_parameter_id;
-    slot_info.pictureType = STD_VIDEO_H264_PICTURE_TYPE_IDR;
-    slot_info.frame_num = 0;
-    slot_info.PicOrderCnt = this->frame_index;
+    slot_info.pictureType = STD_VIDEO_H264_PICTURE_TYPE_I; //STD_VIDEO_H264_PICTURE_TYPE_IDR;
+    slot_info.frame_num = (this->frame_index == 0) ? 0 : 1; //0;
+    slot_info.PicOrderCnt = (this->frame_index * 2) % 256; //this->frame_index;
 
     //--- Slice Info ----------------------------------------------------------------
 
@@ -1765,7 +1823,7 @@ void Encoder::encode_pass_frame_command(VkCommandBuffer command_buffer, EncoderF
     slice_parameters.flags = slice_flags;
     slice_parameters.first_mb_in_slice = 0;
     slice_parameters.slice_type = STD_VIDEO_H264_SLICE_TYPE_I;
-    slice_parameters.idr_pic_id = this->frame_index;
+    slice_parameters.idr_pic_id = 0; //this->frame_index;
     slice_parameters.num_ref_idx_l0_active_minus1 = 0;
     slice_parameters.num_ref_idx_l1_active_minus1 = 0;
     slice_parameters.cabac_init_idc = (StdVideoH264CabacInitIdc) 0;
diff --git a/src/utility/encoder.hpp b/src/utility/encoder.hpp
index 295d063ef4a708bc2fbd36c637cb6847912b3e71..1efad299c9f7a038e95b25c9fc2ab886709856d0 100644
--- a/src/utility/encoder.hpp
+++ b/src/utility/encoder.hpp
@@ -130,7 +130,7 @@ private:
     glm::uvec2 setting_frame_crop;
     glm::uvec2 setting_image_size;
     uint32_t setting_buffer_size;
-    
+
 private:
     VkSampler sampler = nullptr;
     VkCommandPool command_pool = nullptr;