Parses the video_stream_descriptor (H.222 2.6.2) to look for the still_picture_flag. This is exposed to the user via a new AV_DISPOSITION_STILL_IMAGE. See for example https://tmm1.s3.amazonaws.com/music-choice.ts, whose video stream only updates every ~6 seconds. Signed-off-by: Aman Gupta <aman@tmm1.net> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>tags/n4.1
@@ -15,6 +15,9 @@ libavutil: 2017-10-21 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2018-05-xx - xxxxxxxxxx - lavf 58.14.100 - avformat.h | |||||
Add AV_DISPOSITION_STILL_IMAGE | |||||
2018-05-xx - xxxxxxxxxx - lavu 56.18.101 - hwcontext_cuda.h | 2018-05-xx - xxxxxxxxxx - lavu 56.18.101 - hwcontext_cuda.h | ||||
Add AVCUDADeviceContext.stream. | Add AVCUDADeviceContext.stream. | ||||
@@ -846,6 +846,7 @@ typedef struct AVStreamInternal AVStreamInternal; | |||||
#define AV_DISPOSITION_DESCRIPTIONS 0x20000 | #define AV_DISPOSITION_DESCRIPTIONS 0x20000 | ||||
#define AV_DISPOSITION_METADATA 0x40000 | #define AV_DISPOSITION_METADATA 0x40000 | ||||
#define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts) | #define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts) | ||||
#define AV_DISPOSITION_STILL_IMAGE 0x100000 ///< still images in video stream (still_picture_flag=1 in mpegts) | |||||
/** | /** | ||||
* Options for behavior on timestamp wrap detection. | * Options for behavior on timestamp wrap detection. | ||||
@@ -551,6 +551,8 @@ static void dump_stream_format(AVFormatContext *ic, int i, | |||||
av_log(NULL, AV_LOG_INFO, " (descriptions)"); | av_log(NULL, AV_LOG_INFO, " (descriptions)"); | ||||
if (st->disposition & AV_DISPOSITION_DEPENDENT) | if (st->disposition & AV_DISPOSITION_DEPENDENT) | ||||
av_log(NULL, AV_LOG_INFO, " (dependent)"); | av_log(NULL, AV_LOG_INFO, " (dependent)"); | ||||
if (st->disposition & AV_DISPOSITION_STILL_IMAGE) | |||||
av_log(NULL, AV_LOG_INFO, " (still image)"); | |||||
av_log(NULL, AV_LOG_INFO, "\n"); | av_log(NULL, AV_LOG_INFO, "\n"); | ||||
dump_metadata(NULL, st->metadata, " "); | dump_metadata(NULL, st->metadata, " "); | ||||
@@ -1683,6 +1683,11 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type | |||||
mpegts_find_stream_type(st, desc_tag, DESC_types); | mpegts_find_stream_type(st, desc_tag, DESC_types); | ||||
switch (desc_tag) { | switch (desc_tag) { | ||||
case 0x02: /* video stream descriptor */ | |||||
if (get8(pp, desc_end) & 0x1) { | |||||
st->disposition |= AV_DISPOSITION_STILL_IMAGE; | |||||
} | |||||
break; | |||||
case 0x1E: /* SL descriptor */ | case 0x1E: /* SL descriptor */ | ||||
desc_es_id = get16(pp, desc_end); | desc_es_id = get16(pp, desc_end); | ||||
if (desc_es_id < 0) | if (desc_es_id < 0) | ||||
@@ -32,8 +32,8 @@ | |||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | ||||
// Also please add any ticket numbers that you believe might be affected here | // Also please add any ticket numbers that you believe might be affected here | ||||
#define LIBAVFORMAT_VERSION_MAJOR 58 | #define LIBAVFORMAT_VERSION_MAJOR 58 | ||||
#define LIBAVFORMAT_VERSION_MINOR 13 | |||||
#define LIBAVFORMAT_VERSION_MICRO 102 | |||||
#define LIBAVFORMAT_VERSION_MINOR 14 | |||||
#define LIBAVFORMAT_VERSION_MICRO 100 | |||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
LIBAVFORMAT_VERSION_MINOR, \ | LIBAVFORMAT_VERSION_MINOR, \ | ||||