fs56089.patch 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. diff -rupN ffmpeg-3.4.orig/libavformat/aviobuf.c ffmpeg-3.4/libavformat/aviobuf.c
  2. --- ffmpeg-3.4.orig/libavformat/aviobuf.c 2017-11-02 14:57:16.078834563 +0100
  3. +++ ffmpeg-3.4/libavformat/aviobuf.c 2017-11-02 15:02:52.549816990 +0100
  4. @@ -531,6 +531,24 @@ void avio_write_marker(AVIOContext *s, i
  5. s->last_time = time;
  6. }
  7. +static int read_packet_wrapper(AVIOContext *s, uint8_t *buf, int size)
  8. +{
  9. + int ret;
  10. +
  11. + if (!s->read_packet)
  12. + return AVERROR_EOF;
  13. + ret = s->read_packet(s->opaque, buf, size);
  14. +#if FF_API_OLD_AVIO_EOF_0
  15. + if (!ret && !s->max_packet_size) {
  16. + av_log(NULL, AV_LOG_WARNING, "Invalid return value 0 for stream protocol\n");
  17. + ret = AVERROR_EOF;
  18. + }
  19. +#else
  20. + av_assert2(ret || s->max_packet_size);
  21. +#endif
  22. + return ret;
  23. +}
  24. +
  25. /* Input stream */
  26. static void fill_buffer(AVIOContext *s)
  27. @@ -569,10 +587,7 @@ static void fill_buffer(AVIOContext *s)
  28. len = s->orig_buffer_size;
  29. }
  30. - if (s->read_packet)
  31. - len = s->read_packet(s->opaque, dst, len);
  32. - else
  33. - len = 0;
  34. + len = read_packet_wrapper(s, dst, len);
  35. if (len <= 0) {
  36. /* do not modify buffer if EOF reached so that a seek back can
  37. be done without rereading data */
  38. @@ -644,8 +659,7 @@ int avio_read(AVIOContext *s, unsigned c
  39. if (len == 0 || s->write_flag) {
  40. if((s->direct || size > s->buffer_size) && !s->update_checksum) {
  41. // bypass the buffer and read data directly into buf
  42. - if(s->read_packet)
  43. - len = s->read_packet(s->opaque, buf, size);
  44. + len = read_packet_wrapper(s, buf, size);
  45. if (len <= 0) {
  46. /* do not modify buffer if EOF reached so that a seek back can
  47. @@ -711,7 +725,7 @@ int avio_read_partial(AVIOContext *s, un
  48. return -1;
  49. if (s->read_packet && s->write_flag) {
  50. - len = s->read_packet(s->opaque, buf, size);
  51. + len = read_packet_wrapper(s, buf, size);
  52. if (len > 0)
  53. s->pos += len;
  54. return len;
  55. diff -rupN ffmpeg-3.4.orig/libavformat/avio.h ffmpeg-3.4/libavformat/avio.h
  56. --- ffmpeg-3.4.orig/libavformat/avio.h 2017-11-02 14:57:16.078834563 +0100
  57. +++ ffmpeg-3.4/libavformat/avio.h 2017-11-02 14:59:15.602300896 +0100
  58. @@ -452,6 +452,8 @@ void avio_free_directory_entry(AVIODirEn
  59. * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise.
  60. * @param opaque An opaque pointer to user-specific data.
  61. * @param read_packet A function for refilling the buffer, may be NULL.
  62. + * For stream protocols, must never return 0 but rather
  63. + * a proper AVERROR code.
  64. * @param write_packet A function for writing the buffer contents, may be NULL.
  65. * The function may not change the input buffers content.
  66. * @param seek A function for seeking to specified byte position, may be NULL.
  67. diff -rupN ffmpeg-3.4.orig/libavformat/version.h ffmpeg-3.4/libavformat/version.h
  68. --- ffmpeg-3.4.orig/libavformat/version.h 2017-11-02 14:57:16.082167807 +0100
  69. +++ ffmpeg-3.4/libavformat/version.h 2017-11-02 15:04:01.704627612 +0100
  70. @@ -97,6 +97,9 @@
  71. #ifndef FF_API_OLD_ROTATE_API
  72. #define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 58)
  73. #endif
  74. +#ifndef FF_API_OLD_AVIO_EOF_0
  75. +#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 58)
  76. +#endif
  77. #ifndef FF_API_R_FRAME_RATE