• Anton Khirnov's avatar
    decode: restructure the core decoding code · 061a0c14
    Anton Khirnov authored
    Currently, the new decoding API is pretty much just a wrapper around the
    old deprecated one. This is problematic, since it interferes with making
    full use of the flexibility added by the new API. The old API should
    also be removed at some future point.
    
    Reorganize the code so that the new send_packet/receive_frame functions
    call the actual decoding directly and change the old deprecated
    avcodec_decode_* functions into wrappers around the new API.
    
    The new internal API for decoders is now changing as well. Before this
    commit, it mirrors the public API, so the decoders need to implement
    send_packet() and receive_frame() callbacks. This turns out to require
    awkward constructs in both the decoders and the generic code. After this
    commit, the decoders only implement the receive_frame() callback and
    call a new internal function, ff_decode_get_packet() to obtain input
    data, in the same manner to how the bitstream filters now work.
    
    avcodec will now always make a reference to the input packet, which means
    that non-refcounted input packets will be copied. Keeping the previous
    behaviour, where this copy could sometimes be avoided, would make the
    code significantly more complex and fragile for only dubious gains,
    since packets are typically small and everyone who cares about
    performance should use refcounted packets anyway.
    061a0c14
utils.c 53.4 KB