Skip to content

Refactor: Move demuxer-related options from global ccx_options to ccx_demuxer struct #2101

@AhmedAlian7

Description

@AhmedAlian7

Problem

Several functions in src/lib_ccx/file_functions.c rely on the global ccx_options struct for configuration values, specifically:

  • ccx_options.live_stream
  • ccx_options.buffer_input
  • ccx_options.input_source
  • ccx_options.binary_concat

This creates tight coupling between the demuxer logic and global application state.

Current Behavior

Functions such as:

  • buffered_read_opt()
  • switch_to_next_file()
  • ccx_demuxer_open()
  • ccx_demuxer_close()

directly access the global ccx_options struct instead of receiving configuration through the demuxer context.

Why This Is Problematic

  • Testability — Functions relying on globals are difficult to unit test in isolation.
  • Encapsulation — The demuxer's behavior depends on external state it does not own.
  • Thread safety — Global state increases the risk of race conditions in multi-threaded scenarios.
  • Library reuse — Tight coupling makes lib_ccx harder to use as a standalone library.

Proposed Solution

  • Add live_stream, buffer_input, input_source, and binary_concat fields to struct ccx_demuxer.
  • Initialize these fields from ccx_options during demuxer initialization (e.g., in init_demuxer()).
  • Update affected functions to read configuration from the demuxer context (ctx->) instead of the global ccx_options.

Affected Files

  • src/lib_ccx/ccx_demuxer.h
  • src/lib_ccx/ccx_demuxer.c
  • src/lib_ccx/file_functions.c

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions