|
|
|
@ -424,6 +424,29 @@ fail: |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf) |
|
|
|
|
{ |
|
|
|
|
int ret; |
|
|
|
|
char *str; |
|
|
|
|
|
|
|
|
|
ret = av_bprint_finalize(buf, &str); |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
if (!av_bprint_is_complete(buf)) { |
|
|
|
|
av_free(str); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
avctx->extradata = str; |
|
|
|
|
/* Note: the string is NUL terminated (so extradata can be read as a
|
|
|
|
|
* string), but the ending character is not accounted in the size (in |
|
|
|
|
* binary formats you are likely not supposed to mux that character). When |
|
|
|
|
* extradata is copied, it is also padded with AV_INPUT_BUFFER_PADDING_SIZE |
|
|
|
|
* zeros. */ |
|
|
|
|
avctx->extradata_size = buf->len; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int dvdsub_init(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
DVDSubtitleContext *dvdc = avctx->priv_data; |
|
|
|
@ -451,7 +474,7 @@ static int dvdsub_init(AVCodecContext *avctx) |
|
|
|
|
av_bprintf(&extradata, " %06"PRIx32"%c", |
|
|
|
|
dvdc->global_palette[i] & 0xFFFFFF, i < 15 ? ',' : '\n'); |
|
|
|
|
|
|
|
|
|
ret = avpriv_bprint_to_extradata(avctx, &extradata); |
|
|
|
|
ret = bprint_to_extradata(avctx, &extradata); |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|