void vp9_print_modes_and_motion_vectors(VP9_COMMON *cm, char *file) { int mi_row; int mi_col; int mi_index = 0; FILE *mvs = fopen(file, "a"); MODE_INFO **mi_8x8 = cm->mi_grid_visible; int rows = cm->mi_rows; int cols = cm->mi_cols; print_mi_data(cm, mvs, "Partitions:", offsetof(MB_MODE_INFO, sb_type)); print_mi_data(cm, mvs, "Modes:", offsetof(MB_MODE_INFO, mode)); print_mi_data(cm, mvs, "Skips:", offsetof(MB_MODE_INFO, skip_coeff)); print_mi_data(cm, mvs, "Ref frame:", offsetof(MB_MODE_INFO, ref_frame[0])); print_mi_data(cm, mvs, "Transform:", offsetof(MB_MODE_INFO, tx_size)); print_mi_data(cm, mvs, "UV Modes:", offsetof(MB_MODE_INFO, uv_mode)); log_frame_info(cm, "Vectors ", mvs); for (mi_row = 0; mi_row < rows; mi_row++) { fprintf(mvs, "V "); for (mi_col = 0; mi_col < cols; mi_col++) { fprintf(mvs, "%4d:%4d ", mi_8x8[mi_index]->mbmi.mv[0].as_mv.row, mi_8x8[mi_index]->mbmi.mv[0].as_mv.col); mi_index++; } fprintf(mvs, "\n"); mi_index += 8; } fprintf(mvs, "\n"); fclose(mvs); }
static void print_mi_data(VP9_COMMON *cm, FILE *file, char *descriptor, size_t member_offset) { int mi_row; int mi_col; int mi_index = 0; MODE_INFO **mi_8x8 = cm->mi_grid_visible; int rows = cm->mi_rows; int cols = cm->mi_cols; char prefix = descriptor[0]; log_frame_info(cm, descriptor, file); mi_index = 0; for (mi_row = 0; mi_row < rows; mi_row++) { fprintf(file, "%c ", prefix); for (mi_col = 0; mi_col < cols; mi_col++) { fprintf(file, "%2d ", *((int*) ((char *) (&mi_8x8[mi_index]->mbmi) + member_offset))); mi_index++; } fprintf(file, "\n"); mi_index += 8; } fprintf(file, "\n"); }
void vp9_print_modes_and_motion_vectors(VP9_COMMON *cm, const char *file) { int mi_row; int mi_col; FILE *mvs = fopen(file, "a"); MODE_INFO **mi = cm->mi_grid_visible; int rows = cm->mi_rows; int cols = cm->mi_cols; print_mi_data(cm, mvs, "Partitions:", offsetof(MODE_INFO, sb_type)); print_mi_data(cm, mvs, "Modes:", offsetof(MODE_INFO, mode)); print_mi_data(cm, mvs, "Ref frame:", offsetof(MODE_INFO, ref_frame[0])); print_mi_data(cm, mvs, "Transform:", offsetof(MODE_INFO, tx_size)); print_mi_data(cm, mvs, "UV Modes:", offsetof(MODE_INFO, uv_mode)); // output skip infomation. log_frame_info(cm, "Skips:", mvs); for (mi_row = 0; mi_row < rows; mi_row++) { fprintf(mvs, "S "); for (mi_col = 0; mi_col < cols; mi_col++) { fprintf(mvs, "%2d ", mi[0]->skip); mi++; } fprintf(mvs, "\n"); mi += 8; } fprintf(mvs, "\n"); // output motion vectors. log_frame_info(cm, "Vectors ", mvs); mi = cm->mi_grid_visible; for (mi_row = 0; mi_row < rows; mi_row++) { fprintf(mvs, "V "); for (mi_col = 0; mi_col < cols; mi_col++) { fprintf(mvs, "%4d:%4d ", mi[0]->mv[0].as_mv.row, mi[0]->mv[0].as_mv.col); mi++; } fprintf(mvs, "\n"); mi += 8; } fprintf(mvs, "\n"); fclose(mvs); }
void obs_output_stop(obs_output_t output) { if (output) { os_event_signal(output->reconnect_stop_event); if (output->reconnect_thread_active) pthread_join(output->reconnect_thread, NULL); output->info.stop(output->context.data); signal_stop(output, OBS_OUTPUT_SUCCESS); if (output->video) log_frame_info(output); } }
static void obs_output_end_data_capture_internal(obs_output_t *output, bool signal) { int ret; if (!obs_output_valid(output, "obs_output_end_data_capture")) return; if (!active(output) || !data_active(output)) { if (signal) { signal_stop(output); output->stop_code = OBS_OUTPUT_SUCCESS; } return; } if (delay_active(output)) { os_atomic_set_bool(&output->delay_capturing, false); if (!os_atomic_load_long(&output->delay_restart_refs)) { os_atomic_set_bool(&output->delay_active, false); } else { os_event_signal(output->stopping_event); return; } } os_atomic_set_bool(&output->data_active, false); if (output->video) log_frame_info(output); if (data_capture_ending(output)) pthread_join(output->end_data_capture_thread, NULL); os_atomic_set_bool(&output->end_data_capture_thread_active, true); ret = pthread_create(&output->end_data_capture_thread, NULL, end_data_capture_thread, output); if (ret != 0) { blog(LOG_WARNING, "Failed to create end_data_capture_thread " "for output '%s'!", output->context.name); end_data_capture_thread(output); } if (signal) { signal_stop(output); output->stop_code = OBS_OUTPUT_SUCCESS; } }
void obs_output_actual_stop(obs_output_t *output, bool force) { output->stopped = true; os_event_signal(output->reconnect_stop_event); if (output->reconnect_thread_active) pthread_join(output->reconnect_thread, NULL); if (output->context.data) output->info.stop(output->context.data); if (output->video) log_frame_info(output); if (output->delay_active && (force || !output->delay_restart_refs)) { output->delay_active = false; obs_output_end_data_capture(output); } if (force || !output->delay_active) signal_stop(output, OBS_OUTPUT_SUCCESS); }