ffmpeg_mux.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Muxer internal APIs - should not be included outside of ffmpeg_mux*
  3. *
  4. * This file is part of FFmpeg.
  5. *
  6. * FFmpeg is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * FFmpeg is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with FFmpeg; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. #ifndef FFTOOLS_FFMPEG_MUX_H
  21. #define FFTOOLS_FFMPEG_MUX_H
  22. #include <stdatomic.h>
  23. #include <stdint.h>
  24. #include "thread_queue.h"
  25. #include "libavformat/avformat.h"
  26. #include "libavcodec/packet.h"
  27. #include "libavutil/dict.h"
  28. #include "libavutil/fifo.h"
  29. #include "libavutil/thread.h"
  30. typedef struct MuxStream {
  31. OutputStream ost;
  32. // name used for logging
  33. char log_name[32];
  34. /* the packets are buffered here until the muxer is ready to be initialized */
  35. AVFifo *muxing_queue;
  36. AVBSFContext *bsf_ctx;
  37. EncStats stats;
  38. int64_t max_frames;
  39. /*
  40. * The size of the AVPackets' buffers in queue.
  41. * Updated when a packet is either pushed or pulled from the queue.
  42. */
  43. size_t muxing_queue_data_size;
  44. int max_muxing_queue_size;
  45. /* Threshold after which max_muxing_queue_size will be in effect */
  46. size_t muxing_queue_data_threshold;
  47. /* dts of the last packet sent to the muxer, in the stream timebase
  48. * used for making up missing dts values */
  49. int64_t last_mux_dts;
  50. } MuxStream;
  51. typedef struct Muxer {
  52. OutputFile of;
  53. // name used for logging
  54. char log_name[32];
  55. AVFormatContext *fc;
  56. pthread_t thread;
  57. ThreadQueue *tq;
  58. AVDictionary *opts;
  59. int thread_queue_size;
  60. /* filesize limit expressed in bytes */
  61. int64_t limit_filesize;
  62. atomic_int_least64_t last_filesize;
  63. int header_written;
  64. SyncQueue *sq_mux;
  65. AVPacket *sq_pkt;
  66. } Muxer;
  67. /* whether we want to print an SDP, set in of_open() */
  68. extern int want_sdp;
  69. int mux_check_init(Muxer *mux);
  70. static MuxStream *ms_from_ost(OutputStream *ost)
  71. {
  72. return (MuxStream*)ost;
  73. }
  74. #endif /* FFTOOLS_FFMPEG_MUX_H */