dvdsubenc: make it usable for transcoding.
authorNicolas George <nicolas.george@normalesup.org>
Mon, 6 Aug 2012 12:14:27 +0000 (14:14 +0200)
committerNicolas George <nicolas.george@normalesup.org>
Tue, 14 Aug 2012 09:17:45 +0000 (11:17 +0200)
commit2dedd8f49622303f96c6f575af7f7a9b338b88ba
treedf0d1a91916fb17f898115d673415da06c9f0b23
parent0cad101ea10d01cb9f4780ebd915fb16dad19997
dvdsubenc: make it usable for transcoding.

DVD subtitles packets can only encode a single rectangle:
if there are several, copy them into a big transparent one.

DVD subtitles rely on an external 16-colors palette:
use a reasonable default one, stored in the private context,
and encode it into the extradata, as specified by Matroska.
TODO: allow to change the palette with an option.

Each packet can use four colors out of the global palette.
The old logic was to map transparent colors to the color 0
and all other colors to 3, 2, 1, cyclically in descending
frequency order, completely disregarding the original color.

Select the "best" four colors from the global palette, according
to heuristics based on frequency, opacity and brightness, and
arrange them in standard DVD order: background, foreground,
outline, other.
TODO: select the alpha value more finely; see if CHG_COLCON can
allow more than 4 colors per packet.

Reference:
http://dvd.sourceforge.net/dvdinfo/spu.html

With these changes, dvdsubenc can be used to transcode DVB subtitles
and get a very decent result.
libavcodec/dvdsubenc.c