lavc: add support for CODEC_CAP_DELAY in subtitles
This patch adds CODEC_CAP_DELAY support to avcodec_decode_subtitle2. For DVB teletext decoding, a single teletext packet can contain multiple teletext pages. In order to support that, the teletext decoder may buffer some pages. Signed-off-by: Marton Balint <cus@passwd.hu> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
b387a24cb4
commit
dbe6f9f2c2
@ -15,6 +15,9 @@ libavutil: 2012-10-22
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2013-10-27 - xxxxxxx - lavc 55.39.100 - avcodec.h
|
||||
Add CODEC_CAP_DELAY support to avcodec_decode_subtitle2.
|
||||
|
||||
2013-10-27 - xxxxxxx - lavu 52.48.100 - parseutils.h
|
||||
Add av_get_known_color_name().
|
||||
|
||||
|
@ -3894,6 +3894,14 @@ int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
|
||||
* and reusing a get_buffer written for video codecs would probably perform badly
|
||||
* due to a potentially very different allocation pattern.
|
||||
*
|
||||
* Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
|
||||
* and output. This means that for some packets they will not immediately
|
||||
* produce decoded output and need to be flushed at the end of decoding to get
|
||||
* all the decoded data. Flushing is done by calling this function with packets
|
||||
* with avpkt->data set to NULL and avpkt->size set to 0 until it stops
|
||||
* returning subtitles. It is safe to flush even those decoders that are not
|
||||
* marked with CODEC_CAP_DELAY, then no subtitles will be returned.
|
||||
*
|
||||
* @param avctx the codec context
|
||||
* @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be
|
||||
freed with avsubtitle_free if *got_sub_ptr is set.
|
||||
|
@ -2322,7 +2322,7 @@ static int recode_subtitle(AVCodecContext *avctx,
|
||||
AVPacket tmp;
|
||||
#endif
|
||||
|
||||
if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER)
|
||||
if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER || inpkt->size == 0)
|
||||
return 0;
|
||||
|
||||
#if CONFIG_ICONV
|
||||
@ -2407,7 +2407,7 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
|
||||
*got_sub_ptr = 0;
|
||||
avcodec_get_subtitle_defaults(sub);
|
||||
|
||||
if (avpkt->size) {
|
||||
if ((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size) {
|
||||
AVPacket pkt_recoded;
|
||||
AVPacket tmp = *avpkt;
|
||||
int did_split = av_packet_split_side_data(&tmp);
|
||||
|
@ -29,8 +29,8 @@
|
||||
#include "libavutil/avutil.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 55
|
||||
#define LIBAVCODEC_VERSION_MINOR 38
|
||||
#define LIBAVCODEC_VERSION_MICRO 101
|
||||
#define LIBAVCODEC_VERSION_MINOR 39
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
LIBAVCODEC_VERSION_MINOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user