aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--asxparser.c17
-rw-r--r--cfg-mplayer.h2
-rw-r--r--input/input.c24
-rw-r--r--input/input.h6
-rw-r--r--libaf/af_format.h1
-rw-r--r--libaf/filter.c90
-rw-r--r--libaf/filter.h13
-rw-r--r--libaf/format.c45
-rw-r--r--libmpcodecs/dec_video.c13
-rw-r--r--libmpcodecs/dec_video.h1
-rw-r--r--libmpcodecs/pullup.c15
-rw-r--r--libmpcodecs/pullup.h1
-rw-r--r--libmpcodecs/vfcap.h2
-rw-r--r--libmpdemux/demuxer.c48
-rw-r--r--libmpdemux/demuxer.h2
-rw-r--r--libmpdemux/mpeg_packetizer.c23
-rw-r--r--libmpdemux/mpeg_packetizer.h9
-rw-r--r--libmpdemux/stheader.h2
-rw-r--r--libmpdemux/video.c3
-rw-r--r--libmpdemux/yuv4mpeg.c767
-rw-r--r--libmpdemux/yuv4mpeg.h452
-rw-r--r--libmpdemux/yuv4mpeg_intern.h78
-rw-r--r--libmpdemux/yuv4mpeg_ratio.c112
-rw-r--r--libvo/aspect.c5
-rw-r--r--libvo/aspect.h1
-rw-r--r--libvo/osd.c14
-rw-r--r--libvo/osd.h1
-rw-r--r--libvo/osd_template.c24
-rw-r--r--libvo/video_out.h1
-rw-r--r--m_struct.c36
-rw-r--r--m_struct.h16
-rw-r--r--mplayer.c3
-rw-r--r--sub/spudec.c19
-rw-r--r--sub/spudec.h2
-rw-r--r--sub/sub.c70
-rw-r--r--sub/sub.h7
-rw-r--r--sub/sub_cc.c349
-rw-r--r--sub/sub_cc.h29
-rw-r--r--sub/subreader.c259
-rw-r--r--sub/subreader.h6
-rw-r--r--sub/vobsub.c241
-rw-r--r--sub/vobsub.h4
-rw-r--r--subopt-helper.c8
-rw-r--r--subopt-helper.h1
45 files changed, 0 insertions, 2825 deletions
diff --git a/Makefile b/Makefile
index f3209ff528..af3fd72135 100644
--- a/Makefile
+++ b/Makefile
@@ -370,8 +370,6 @@ SRCS_COMMON = asxparser.c \
libmpdemux/mp_taglists.c \
libmpdemux/mpeg_packetizer.c \
libmpdemux/video.c \
- libmpdemux/yuv4mpeg.c \
- libmpdemux/yuv4mpeg_ratio.c \
libvo/osd.c \
libvo/eosd_packer.c \
osdep/numcores.c \
@@ -392,7 +390,6 @@ SRCS_COMMON = asxparser.c \
sub/find_subfiles.c \
sub/spudec.c \
sub/sub.c \
- sub/sub_cc.c \
sub/subassconvert.c \
sub/subreader.c \
sub/vobsub.c \
diff --git a/asxparser.c b/asxparser.c
index 89cf7bd1a1..44236b8c18 100644
--- a/asxparser.c
+++ b/asxparser.c
@@ -68,9 +68,6 @@ asx_parse_attribs(ASX_Parser_t* parser,char* buffer,char*** _attribs);
char*
asx_get_attrib(const char* attrib,char** attribs);
-int
-asx_attrib_to_enum(const char* val,char** valid_vals);
-
#define asx_free_attribs(a) asx_list_free(&a,free)
////// List utils
@@ -109,20 +106,6 @@ asx_get_attrib(const char* attrib,char** attribs) {
return NULL;
}
-int
-asx_attrib_to_enum(const char* val,char** valid_vals) {
- char** ptr;
- int r = 0;
-
- if(valid_vals == NULL || val == NULL) return -2;
- for(ptr = valid_vals ; ptr[0] != NULL ; ptr++) {
- if(strcasecmp(val,ptr[0]) == 0) return r;
- r++;
- }
-
- return -1;
-}
-
#define asx_warning_attrib_required(p,e,a) mp_msg(MSGT_PLAYTREE,MSGL_WARN,"At line %d : element %s don't have the required attribute %s",p->line,e,a)
#define asx_warning_body_parse_error(p,e) mp_msg(MSGT_PLAYTREE,MSGL_WARN,"At line %d : error while parsing %s body",p->line,e)
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 06a93d6bdb..6deea83634 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -581,8 +581,6 @@ const m_option_t common_opts[] = {
// specify IFO file for VOBSUB subtitle
{"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL},
// enable Closed Captioning display
- {"subcc", &subcc_enabled, CONF_TYPE_INT, CONF_RANGE, 0, 4, NULL},
- {"no-subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"overlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 2, NULL},
{"sub-bg-color", &sub_bg_color, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL},
{"sub-bg-alpha", &sub_bg_alpha, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL},
diff --git a/input/input.c b/input/input.c
index 73e48436dd..e162572bed 100644
--- a/input/input.c
+++ b/input/input.c
@@ -859,30 +859,6 @@ int mp_input_add_key_fd(struct input_ctx *ictx, int fd, int select,
return 1;
}
-int mp_input_parse_and_queue_cmds(struct input_ctx *ictx, const char *str)
-{
- int cmd_num = 0;
-
- while (*str == '\n' || *str == '\r' || *str == ' ')
- ++str;
- while (*str) {
- mp_cmd_t *cmd;
- size_t len = strcspn(str, "\r\n");
- char *cmdbuf = talloc_size(NULL, len + 1);
- av_strlcpy(cmdbuf, str, len + 1);
- cmd = mp_input_parse_cmd(cmdbuf);
- if (cmd) {
- mp_input_queue_cmd(ictx, cmd);
- ++cmd_num;
- }
- str += len;
- while (*str == '\n' || *str == '\r' || *str == ' ')
- ++str;
- talloc_free(cmdbuf);
- }
- return cmd_num;
-}
-
mp_cmd_t *mp_input_parse_cmd(char *str)
{
int i, l;
diff --git a/input/input.h b/input/input.h
index a4d9b8dab6..9092e2226d 100644
--- a/input/input.h
+++ b/input/input.h
@@ -252,12 +252,6 @@ struct mp_cmd *mp_input_get_cmd(struct input_ctx *ictx, int time,
/* Parse text and return corresponding struct mp_cmd. */
struct mp_cmd *mp_input_parse_cmd(char *str);
-/**
- * Parse and queue commands separated by '\n'.
- * Return number of commands queued.
- */
-int mp_input_parse_and_queue_cmds(struct input_ctx *ictx, const char *str);
-
// After getting a command from mp_input_get_cmd you need to free it using this
// function
void mp_cmd_free(struct mp_cmd *cmd);
diff --git a/libaf/af_format.h b/libaf/af_format.h
index 751e97ef3a..e5e5e15b58 100644
--- a/libaf/af_format.h
+++ b/libaf/af_format.h
@@ -111,7 +111,6 @@
#define AF_FORMAT_IS_AC3(fmt) (((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_AC3)
-int af_str2fmt(const char *str);
int af_str2fmt_short(const char *str);
int af_fmt2bits(int format);
int af_bits2fmt(int bits);
diff --git a/libaf/filter.c b/libaf/filter.c
index c5ab039130..b272125fd8 100644
--- a/libaf/filter.c
+++ b/libaf/filter.c
@@ -46,51 +46,6 @@ inline FLOAT_TYPE af_filter_fir(register unsigned int n, const FLOAT_TYPE* w,
return y;
}
-/* C implementation of parallel FIR filter y(k)=w(k) * x(k) (where * denotes convolution)
-
- n number of filter taps, where mod(n,4)==0
- d number of filters
- xi current index in xq
- w filter taps k by n big
- x input signal must be a circular buffers which are indexed backwards
- y output buffer
- s output buffer stride
-*/
-FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int d, unsigned int xi,
- const FLOAT_TYPE** w, const FLOAT_TYPE** x, FLOAT_TYPE* y,
- unsigned int s)
-{
- register const FLOAT_TYPE* xt = *x + xi;
- register const FLOAT_TYPE* wt = *w;
- register int nt = 2*n;
- while(d-- > 0){
- *y = af_filter_fir(n,wt,xt);
- wt+=n;
- xt+=nt;
- y+=s;
- }
- return y;
-}
-
-/* Add new data to circular queue designed to be used with a parallel
- FIR filter, with d filters. xq is the circular queue, in pointing
- at the new samples, xi current index in xq and n the length of the
- filter. xq must be n*2 by k big, s is the index for in.
-*/
-int af_filter_updatepq(unsigned int n, unsigned int d, unsigned int xi,
- FLOAT_TYPE** xq, const FLOAT_TYPE* in, unsigned int s)
-{
- register FLOAT_TYPE* txq = *xq + xi;
- register int nt = n*2;
-
- while(d-- >0){
- *txq= *(txq+n) = *in;
- txq+=nt;
- in+=s;
- }
- return (++xi)&(n-1);
-}
-
/******************************************************************************
* FIR filter design
******************************************************************************/
@@ -234,51 +189,6 @@ int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, const FLOAT_TYPE* fc,
return 0;
}
-/* Design polyphase FIR filter from prototype filter
-
- n length of prototype filter
- k number of polyphase components
- w prototype filter taps
- pw Parallel FIR filter
- g Filter gain
- flags FWD forward indexing
- REW reverse indexing
- ODD multiply every 2nd filter tap by -1 => HP filter
-
- returns 0 if OK, -1 if fail
-*/
-int af_filter_design_pfir(unsigned int n, unsigned int k, const FLOAT_TYPE* w,
- FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags)
-{
- int l = (int)n/k; // Length of individual FIR filters
- int i; // Counters
- int j;
- FLOAT_TYPE t; // g * w[i]
-
- // Sanity check
- if(l<1 || k<1 || !w || !pw)
- return -1;
-
- // Do the stuff
- if(flags&REW){
- for(j=l-1;j>-1;j--){//Columns
- for(i=0;i<(int)k;i++){//Rows
- t=g * *w++;
- pw[i][j]=t * ((flags & ODD) ? ((j & 1) ? -1 : 1) : 1);
- }
- }
- }
- else{
- for(j=0;j<l;j++){//Columns
- for(i=0;i<(int)k;i++){//Rows
- t=g * *w++;
- pw[i][j]=t * ((flags & ODD) ? ((j & 1) ? 1 : -1) : 1);
- }
- }
- }
- return -1;
-}
-
/******************************************************************************
* IIR filter design
******************************************************************************/
diff --git a/libaf/filter.h b/libaf/filter.h
index a7c8a71c6a..aed33352c2 100644
--- a/libaf/filter.h
+++ b/libaf/filter.h
@@ -56,22 +56,9 @@
// Exported functions
FLOAT_TYPE af_filter_fir(unsigned int n, const FLOAT_TYPE* w, const FLOAT_TYPE* x);
-FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int k,
- unsigned int xi, const FLOAT_TYPE** w,
- const FLOAT_TYPE** x, FLOAT_TYPE* y,
- unsigned int s);
-
-//int af_filter_updateq(unsigned int n, unsigned int xi,
-// FLOAT_TYPE* xq, FLOAT_TYPE* in);
-int af_filter_updatepq(unsigned int n, unsigned int k, unsigned int xi,
- FLOAT_TYPE** xq, const FLOAT_TYPE* in, unsigned int s);
-
int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, const FLOAT_TYPE* fc,
unsigned int flags, FLOAT_TYPE opt);
-int af_filter_design_pfir(unsigned int n, unsigned int k, const FLOAT_TYPE* w,
- FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags);
-
int af_filter_szxform(const FLOAT_TYPE* a, const FLOAT_TYPE* b, FLOAT_TYPE Q,
FLOAT_TYPE fc, FLOAT_TYPE fs, FLOAT_TYPE *k,
FLOAT_TYPE *coef);
diff --git a/libaf/format.c b/libaf/format.c
index 5d77eabeea..638485cc23 100644
--- a/libaf/format.c
+++ b/libaf/format.c
@@ -26,51 +26,6 @@
#include "af.h"
-// Convert from string to format
-int af_str2fmt(const char* str)
-{
- int format=0;
- // Scan for endianness
- if(strstr(str,"be") || strstr(str,"BE"))
- format |= AF_FORMAT_BE;
- else if(strstr(str,"le") || strstr(str,"LE"))
- format |= AF_FORMAT_LE;
- else
- format |= AF_FORMAT_NE;
-
- // Scan for special formats
- if(strstr(str,"mulaw") || strstr(str,"MULAW")){
- format |= AF_FORMAT_MU_LAW; return format;
- }
- if(strstr(str,"alaw") || strstr(str,"ALAW")){
- format |= AF_FORMAT_A_LAW; return format;
- }
- if(strstr(str,"ac3") || strstr(str,"AC3")){
- format |= AF_FORMAT_AC3 | AF_FORMAT_16BIT; return format;
- }
- if(strstr(str,"mpeg2") || strstr(str,"MPEG2")){
- format |= AF_FORMAT_MPEG2; return format;
- }
- if(strstr(str,"imaadpcm") || strstr(str,"IMAADPCM")){
- format |= AF_FORMAT_IMA_ADPCM; return format;
- }
-
- // Scan for int/float
- if(strstr(str,"float") || strstr(str,"FLOAT")){
- format |= AF_FORMAT_F; return format;
- }
- else
- format |= AF_FORMAT_I;
-
- // Scan for signed/unsigned
- if(strstr(str,"unsigned") || strstr(str,"UNSIGNED"))
- format |= AF_FORMAT_US;
- else
- format |= AF_FORMAT_SI;
-
- return format;
-}
-
int af_fmt2bits(int format)
{
if (AF_FORMAT_IS_AC3(format)) return 16;
diff --git a/libmpcodecs/dec_video.c b/libmpcodecs/dec_video.c
index 804b4d60b4..148514db95 100644
--- a/libmpcodecs/dec_video.c
+++ b/libmpcodecs/dec_video.c
@@ -72,19 +72,6 @@ int get_video_quality_max(sh_video_t *sh_video)
return 0;
}
-void set_video_quality(sh_video_t *sh_video, int quality)
-{
- vf_instance_t *vf = sh_video->vfilter;
- if (vf) {
- int ret = vf->control(vf, VFCTRL_SET_PP_LEVEL, (void *) (&quality));
- if (ret == CONTROL_TRUE)
- return; // success
- }
- const struct vd_functions *vd = sh_video->vd_driver;
- if (vd)
- vd->control(sh_video, VDCTRL_SET_PP_LEVEL, (void *) (&quality));
-}
-
int set_video_colors(sh_video_t *sh_video, const char *item, int value)
{
vf_instance_t *vf = sh_video->vfilter;
diff --git a/libmpcodecs/dec_video.h b/libmpcodecs/dec_video.h
index ab4b55bef7..878744396c 100644
--- a/libmpcodecs/dec_video.h
+++ b/libmpcodecs/dec_video.h
@@ -36,7 +36,6 @@ void *decode_video(sh_video_t *sh_video, struct demux_packet *packet,
int filter_video(sh_video_t *sh_video, void *frame, double pts);
int get_video_quality_max(sh_video_t *sh_video);
-void set_video_quality(sh_video_t *sh_video, int quality);
int get_video_colors(sh_video_t *sh_video, const char *item, int *value);
int set_video_colors(sh_video_t *sh_video, const char *item, int value);
diff --git a/libmpcodecs/pullup.c b/libmpcodecs/pullup.c
index b70aa9b56f..bd25c187d6 100644
--- a/libmpcodecs/pullup.c
+++ b/libmpcodecs/pullup.c
@@ -442,21 +442,6 @@ void pullup_submit_field(struct pullup_context *c, struct pullup_buffer *b,
c->head = c->head->next;
}
-void pullup_flush_fields(struct pullup_context *c)
-{
- struct pullup_field *f;
-
- for (f = c->first; f && f != c->head; f = f->next) {
- pullup_release_buffer(f->buffer, f->parity);
- f->buffer = 0;
- }
- c->first = c->last = 0;
-}
-
-
-
-
-
diff --git a/libmpcodecs/pullup.h b/libmpcodecs/pullup.h
index 99aaa45dc2..0948737919 100644
--- a/libmpcodecs/pullup.h
+++ b/libmpcodecs/pullup.h
@@ -89,7 +89,6 @@ struct pullup_buffer *pullup_get_buffer(struct pullup_context *c, int parity);
void pullup_submit_field(struct pullup_context *c, struct pullup_buffer *b,
int parity, double pts);
-void pullup_flush_fields(struct pullup_context *c);
struct pullup_frame *pullup_get_frame(struct pullup_context *c);
void pullup_pack_frame(struct pullup_context *c, struct pullup_frame *fr);
diff --git a/libmpcodecs/vfcap.h b/libmpcodecs/vfcap.h
index c9b943177d..eca9b5ef7f 100644
--- a/libmpcodecs/vfcap.h
+++ b/libmpcodecs/vfcap.h
@@ -26,8 +26,6 @@
#define VFCAP_CSP_SUPPORTED_BY_HW 0x2
// set if the driver/filter can draw OSD
#define VFCAP_OSD 0x4
-// set if the driver/filter can handle compressed SPU stream
-#define VFCAP_SPU 0x8
// scaling up/down by hardware, or software:
#define VFCAP_HWSCALE_UP 0x10
#define VFCAP_HWSCALE_DOWN 0x20
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index e77e32b942..d6e7584915 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -309,17 +309,6 @@ sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid)
return demuxer->s_streams[id];
}
-struct sh_sub *new_sh_sub_sid_lang(struct demuxer *demuxer, int id, int sid,
- const char *lang)
-{
- struct sh_sub *sh = new_sh_sub_sid(demuxer, id, sid);
- if (lang && lang[0] && strcmp(lang, "und")) {
- sh->lang = talloc_strdup(sh, lang);
- mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", sid, lang);
- }
- return sh;
-}
-
static void free_sh_sub(sh_sub_t *sh)
{
mp_msg(MSGT_DEMUXER, MSGL_DBG2, "DEMUXER: freeing sh_sub at %p\n", sh);
@@ -681,43 +670,6 @@ int demux_read_data(demux_stream_t *ds, unsigned char *mem, int len)
return bytes;
}
-/**
- * \brief read data until the given 3-byte pattern is encountered, up to maxlen
- * \param mem memory to read data into, may be NULL to discard data
- * \param maxlen maximum number of bytes to read
- * \param read number of bytes actually read
- * \param pattern pattern to search for (lowest 8 bits are ignored)
- * \return whether pattern was found
- */
-int demux_pattern_3(demux_stream_t *ds, unsigned char *mem, int maxlen,
- int *read, uint32_t pattern)
-{
- register uint32_t head = 0xffffff00;
- register uint32_t pat = pattern & 0xffffff00;
- int total_len = 0;
- do {
- register unsigned char *ds_buf = &ds->buffer[ds->buffer_size];
- int len = ds->buffer_size - ds->buffer_pos;
- register long pos = -len;
- if (unlikely(pos >= 0)) { // buffer is empty
- ds_fill_buffer(ds);
- continue;
- }
- do {
- head |= ds_buf[pos];
- head <<= 8;
- } while (++pos && head != pat);
- len += pos;
- if (total_len + len > maxlen)
- len = maxlen - total_len;
- len = demux_read_data(ds, mem ? &mem[total_len] : NULL, len);
- total_len += len;
- } while ((head != pat || total_len < 3) && total_len < maxlen && !ds->eof);
- if (read)
- *read = total_len;
- return total_len >= 3 && head == pat;
-}
-
void ds_free_packs(demux_stream_t *ds)
{
demux_packet_t *dp = ds->first;
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 0e208d666e..295c148ec0 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -317,8 +317,6 @@ static inline int ds_tell_pts(struct demux_stream *ds)
}
int demux_read_data(struct demux_stream *ds, unsigned char *mem, int len);
-int demux_pattern_3(struct demux_stream *ds, unsigned char *mem, int maxlen,
- int *read, uint32_t pattern);
#define demux_peekc(ds) ( \
(likely(ds->buffer_pos<ds->buffer_size)) ? ds->buffer[ds->buffer_pos] \
diff --git a/libmpdemux/mpeg_packetizer.c b/libmpdemux/mpeg_packetizer.c
index 0b4b1fa8d5..82e688df12 100644
--- a/libmpdemux/mpeg_packetizer.c
+++ b/libmpdemux/mpeg_packetizer.c
@@ -145,26 +145,3 @@ send_mpeg_pes_packet (unsigned char *data, int len, int id, uint64_t pts,
{
return send_mpeg_pes_packet_ll(data, len, id, pts, type, NULL, 0, 0, my_write);
}
-
-
-/* Send MPEG <type> PS packet */
-int
-send_mpeg_ps_packet(unsigned char *data, int len, int id, uint64_t pts, int type,
- int my_write (const unsigned char *data, int len))
-{
- if(type == 2)
- my_write (ps2_header, sizeof (ps2_header));
- else
- my_write (ps1_header, sizeof (ps1_header));
- return send_mpeg_pes_packet (data, len, id, pts, type, my_write);
-}
-
-/* Send MPEG 2 LPCM packet */
-int
-send_mpeg_lpcm_packet(unsigned char* data, int len,
- int id, uint64_t pts, int freq_id,
- int my_write (const unsigned char *data, int len))
-{
- unsigned char header[7] = {0xA0, 0x07, 0x00, 0x04, 0x0C, 1 | (freq_id << 4), 0x80};
- return send_mpeg_pes_packet_ll(data, len, 0xBD, pts, 2, header, sizeof(header), 1, my_write);
-}
diff --git a/libmpdemux/mpeg_packetizer.h b/libmpdemux/mpeg_packetizer.h
index 380b0b463b..ec9325bfad 100644
--- a/libmpdemux/mpeg_packetizer.h
+++ b/libmpdemux/mpeg_packetizer.h
@@ -34,13 +34,4 @@
int send_mpeg_pes_packet (unsigned char *data, int len, int id, uint64_t pts,
int type, int my_write (const unsigned char *data, int len));
-/* Send MPEG <type> PS packet */
-int send_mpeg_ps_packet (unsigned char *data, int len, int id, uint64_t pts,
- int type,int my_write (const unsigned char *data, int len));
-
-/* Send MPEG 2 LPCM packet */
-int send_mpeg_lpcm_packet (unsigned char *data, int len,
- int id, uint64_t pts, int freq_id,
- int my_write (const unsigned char *data, int len));
-
#endif /* MPLAYER_MPEG_PACKETIZER_H */
diff --git a/libmpdemux/stheader.h b/libmpdemux/stheader.h
index 6feefa9ef0..c93bcf8185 100644
--- a/libmpdemux/stheader.h
+++ b/libmpdemux/stheader.h
@@ -159,8 +159,6 @@ struct sh_audio *new_sh_audio_aid(struct demuxer *demuxer, int id, int aid);
struct sh_video *new_sh_video_vid(struct demuxer *demuxer, int id, int vid);
#define new_sh_sub(d, i) new_sh_sub_sid(d, i, i)
struct sh_sub *new_sh_sub_sid(struct demuxer *demuxer, int id, int sid);
-struct sh_sub *new_sh_sub_sid_lang(struct demuxer *demuxer, int id, int sid,
- const char *lang);
void free_sh_audio(struct demuxer *demuxer, int id);
void free_sh_video(struct sh_video *sh);
diff --git a/libmpdemux/video.c b/libmpdemux/video.c
index 7daef29360..27e924f883 100644
--- a/libmpdemux/video.c
+++ b/libmpdemux/video.c
@@ -34,9 +34,6 @@
#endif
#include "stheader.h"
-/* sub_cc (closed captions)*/
-#include "sub/sub_cc.h"
-
/* biCompression constant */
#define BI_RGB 0L
diff --git a/libmpdemux/yuv4mpeg.c b/libmpdemux/yuv4mpeg.c
deleted file mode 100644
index 1606faa41b..0000000000
--- a/libmpdemux/yuv4mpeg.c
+++ /dev/null
@@ -1,767 +0,0 @@
-/*
- * yuv4mpeg.c: Functions for reading and writing "new" YUV4MPEG streams
- *
- * Copyright (C) 2001 Matthew J. Marjanovic <maddog@mir.com>
- *
- * This file is part of the MJPEG Tools package (mjpeg.sourceforge.net).
- * Ported to mplayer by Rik Snel <rsnel@cube.dyndns.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#include "config.h"
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "yuv4mpeg.h"
-#include "yuv4mpeg_intern.h"
-#include "mp_msg.h"
-#include "libavutil/attributes.h"
-
-static int _y4mparam_allow_unknown_tags = 1; /* default is forgiveness */
-
-static void *(*_y4m_alloc)(size_t bytes) = malloc;
-static void (*_y4m_free)(void *ptr) = free;
-
-int y4m_allow_unknown_tags(int yn) {
- int old = _y4mparam_allow_unknown_tags;
- if (yn >= 0) _y4mparam_allow_unknown_tags = (yn) ? 1 : 0;
- return old;
-}
-
-
-
-/*************************************************************************
- *
- * Convenience functions for fd read/write
- *
- * - guaranteed to transfer entire payload (or fail)
- * - returns:
- * 0 on complete success
- * +(# of remaining bytes) on eof (for y4m_read)
- * -(# of rem. bytes) on error (and ERRNO should be set)
- *
- *************************************************************************/
-
-
-ssize_t y4m_read(stream_t *s, char *buf, size_t len)
-{
- ssize_t n;
-
- while (len > 0) {
- n = stream_read(s, buf, len);
- if (n <= 0) {
- /* return amount left to read */
- if (n == 0)
- return len; /* n == 0 --> eof */
- else
- return -len; /* n < 0 --> error */
- }
- buf += n;
- len -= n;
- }
- return 0;
-}
-
-
-#if 0 /* not needed */
-ssize_t y4m_write(int fd, char *buf, size_t len)
-{
- ssize_t n;
-
- while (len > 0) {
- n = write(fd, buf, len);
- if (n < 0) return -len; /* return amount left to write */
- buf += n;
- len -= n;
- }
- return 0;
-}
-#endif
-
-
-/*************************************************************************
- *
- * "Extra tags" handling
- *
- *************************************************************************/
-
-
-static char *y4m_new_xtag(void)
-{
- return _y4m_alloc(Y4M_MAX_XTAG_SIZE);
-}
-
-
-void y4m_init_xtag_list(y4m_xtag_list_t *xtags)
-{
- int i;
- xtags->count = 0;
- for (i = 0; i < Y4M_MAX_XTAGS; i++) {
- xtags->tags[i] = NULL;
- }
-}
-
-
-void y4m_fini_xtag_list(y4m_xtag_list_t *xtags)
-{
- int i;
- for (i = 0; i < Y4M_MAX_XTAGS; i++) {
- if (xtags->tags[i] != NULL) {
- _y4m_free(xtags->tags[i]);
- xtags->tags[i] = NULL;
- }
- }
- xtags->count = 0;
-}
-
-
-void y4m_copy_xtag_list(y4m_xtag_list_t *dest, const y4m_xtag_list_t *src)
-{
- int i;
- for (i = 0; i < src->count; i++) {
- if (dest->tags[i] == NULL)
- dest->tags[i] = y4m_new_xtag();
- strncpy(dest->tags[i], src->tags[i], Y4M_MAX_XTAG_SIZE);
- }
- dest->count = src->count;
-}
-
-
-
-#if 0
-static int y4m_snprint_xtags(char *s, int maxn, y4m_xtag_list_t *xtags)
-{
- int i, room;
-
- for (i = 0, room = maxn - 1; i < xtags->count; i++) {
- int n = snprintf(s, room + 1, " %s", xtags->tags[i]);
- if ((n < 0) || (n > room)) return Y4M_ERR_HEADER;
- s += n;
- room -= n;
- }
- s[0] = '\n'; /* finish off header with newline */
- s[1] = '\0'; /* ...and end-of-string */
- return Y4M_OK;
-}
-#endif
-
-
-int y4m_xtag_count(const y4m_xtag_list_t *xtags)
-{
- return xtags->count;
-}
-
-
-const char *y4m_xtag_get(const y4m_xtag_list_t *xtags, int n)
-{
- if (n >= xtags->count)
- return NULL;
- else
- return xtags->tags[n];
-}
-
-
-int y4m_xtag_add(y4m_xtag_list_t *xtags, const char *tag)
-{
- if (xtags->count >= Y4M_MAX_XTAGS) return Y4M_ERR_XXTAGS;
- if (xtags->tags[xtags->count] == NULL) {
- xtags->tags[xtags->count] = y4m_new_xtag();
- }
- strncpy(xtags->tags[xtags->count], tag, Y4M_MAX_XTAG_SIZE);
- (xtags->count)++;
- return Y4M_OK;
-}
-
-
-int y4m_xtag_remove(y4m_xtag_list_t *xtags, int n)
-{
- int i;
- char *q;
-
- if ((n < 0) || (n >= xtags->count)) return Y4M_ERR_RANGE;
- q = xtags->tags[n];
- for (i = n; i < (xtags->count - 1); i++)
- xtags->tags[i] = xtags->tags[i+1];
- xtags->tags[i] = q;
- (xtags->count)--;
- return Y4M_OK;
-}
-
-
-int y4m_xtag_clearlist(y4m_xtag_list_t *xtags)
-{
- xtags->count = 0;
- return Y4M_OK;
-}
-
-
-int y4m_xtag_addlist(y4m_xtag_list_t *dest, const y4m_xtag_list_t *src)
-{
- int i, j;
-
- if ((dest->count + src->count) > Y4M_MAX_XTAGS) return Y4M_ERR_XXTAGS;
- for (i = dest->count, j = 0;
- j < src->count;
- i++, j++) {
- if (dest->tags[i] == NULL)
- dest->tags[i] = y4m_new_xtag();
- strncpy(dest->tags[i], src->tags[i], Y4M_MAX_XTAG_SIZE);
- }
- dest->count += src->count;
- return Y4M_OK;
-}
-
-
-/*************************************************************************
- *
- * Creators/destructors for y4m_*_info_t structures
- *
- *************************************************************************/
-
-
-void y4m_init_stream_info(y4m_stream_info_t *info)
-{
- if (info == NULL) return;
- /* initialize info */
- info->width = Y4M_UNKNOWN;
- info->height = Y4M_UNKNOWN;
- info->interlace = Y4M_UNKNOWN;
- info->framerate = y4m_fps_UNKNOWN;
- info->sampleaspect = y4m_sar_UNKNOWN;
- y4m_init_xtag_list(&(info->x_tags));
-}
-
-
-void y4m_copy_stream_info(y4m_stream_info_t *dest, y4m_stream_info_t *src)
-{
- if ((dest == NULL) || (src == NULL)) return;
- /* copy info */
- dest->width = src->width;
- dest->height = src->height;
- dest->interlace = src->interlace;
- dest->framerate = src->framerate;
- dest->sampleaspect = src->sampleaspect;
- y4m_copy_xtag_list(&(dest->x_tags), &(src->x_tags));
-}
-
-
-void y4m_fini_stream_info(y4m_stream_info_t *info)
-{
- if (info == NULL) return;
- y4m_fini_xtag_list(&(info->x_tags));
-}
-
-
-void y4m_si_set_width(y4m_stream_info_t *si, int width)
-{
- si->width = width;
- si->framelength = (si->height * si->width) * 3 / 2;
-}
-
-int y4m_si_get_width(y4m_stream_info_t *si)
-{ return si->width; }
-
-void y4m_si_set_height(y4m_stream_info_t *si, int height)
-{
- si->height = height;
- si->framelength = (si->height * si->width) * 3 / 2;
-}
-
-int y4m_si_get_height(y4m_stream_info_t *si)
-{ return si->height; }
-
-void y4m_si_set_interlace(y4m_stream_info_t *si, int interlace)
-{ si->interlace = interlace; }
-
-int y4m_si_get_interlace(y4m_stream_info_t *si)
-{ return si->interlace; }
-
-void y4m_si_set_framerate(y4m_stream_info_t *si, y4m_ratio_t framerate)
-{ si->framerate = framerate; }
-
-y4m_ratio_t y4m_si_get_framerate(y4m_stream_info_t *si)
-{ return si->framerate; }
-
-void y4m_si_set_sampleaspect(y4m_stream_info_t *si, y4m_ratio_t sar)
-{ si->sampleaspect = sar; }
-
-y4m_ratio_t y4m_si_get_sampleaspect(y4m_stream_info_t *si)
-{ return si->sampleaspect; }
-
-int y4m_si_get_framelength(y4m_stream_info_t *si)
-{ return si->framelength; }
-
-y4m_xtag_list_t *y4m_si_xtags(y4m_stream_info_t *si)
-{ return &(si->x_tags); }
-
-
-
-void y4m_init_frame_info(y4m_frame_info_t *info)
-{
- if (info == NULL) return;
- /* initialize info */
- y4m_init_xtag_list(&(info->x_tags));
-}
-
-
-void y4m_copy_frame_info(y4m_frame_info_t *dest, y4m_frame_info_t *src)
-{
- if ((dest == NULL) || (src == NULL)) return;
- /* copy info */
- y4m_copy_xtag_list(&(dest->x_tags), &(src->x_tags));
-}
-
-
-void y4m_fini_frame_info(y4m_frame_info_t *info)
-{
- if (info == NULL) return;
- y4m_fini_xtag_list(&(info->x_tags));
-}
-
-
-
-/*************************************************************************
- *
- * Tag parsing
- *
- *************************************************************************/
-
-int y4m_parse_stream_tags(char *s, y4m_stream_info_t *i)
-{
- char *token, *value;
- char tag;
- int err;
-
- /* parse fields */
- for (token = strtok(s, Y4M_DELIM);
- token != NULL;
- token = strtok(NULL, Y4M_DELIM)) {
- if (token[0] == '\0') continue; /* skip empty strings */
- tag = token[0];
- value = token + 1;
- switch (tag) {
- case 'W': /* width */
- i->width = atoi(value);
- if (i->width <= 0) return Y4M_ERR_RANGE;
- break;
- case 'H': /* height */
- i->height = atoi(value);
- if (i->height <= 0) return Y4M_ERR_RANGE;
- break;
- case 'F': /* frame rate (fps) */
- if ((err = y4m_parse_ratio(&(i->framerate), value)) != Y4M_OK)
- return err;
- if (i->framerate.n < 0) return Y4M_ERR_RANGE;
- break;
- case 'I': /* interlacing */
- switch (value[0]) {
- case 'p': i->interlace = Y4M_ILACE_NONE; break;
- case 't': i->interlace = Y4M_ILACE_TOP_FIRST; break;
- case 'b': i->interlace = Y4M_ILACE_BOTTOM_FIRST; break;
- case '?':
- default:
- i->interlace = Y4M_UNKNOWN; break;
- }
- break;
- case 'A': /* sample (pixel) aspect ratio */
- if ((err = y4m_parse_ratio(&(i->sampleaspect), value)) != Y4M_OK)
- return err;
- if (i->sampleaspect.n < 0) return Y4M_ERR_RANGE;
- break;
- case 'X': /* 'X' meta-tag */
- if ((err = y4m_xtag_add(&(i->x_tags), token)) != Y4M_OK) return err;
- break;
- default:
- /* possible error on unknown options */
- if (_y4mparam_allow_unknown_tags) {
- /* unknown tags ok: store in xtag list and warn... */
- if ((err = y4m_xtag_add(&(i->x_tags), token)) != Y4M_OK) return err;
- mp_msg(MSGT_DEMUX, MSGL_WARN, "Unknown stream tag encountered: '%s'\n", token);
- } else {
- /* unknown tags are *not* ok */
- return Y4M_ERR_BADTAG;
- }
- break;
- }
- }
- /* Error checking... width and height must be known since we can't
- * parse without them
- */
- if( i->width == Y4M_UNKNOWN || i->height == Y4M_UNKNOWN )
- return Y4M_ERR_HEADER;
- /* ta da! done. */
- return Y4M_OK;
-}
-
-
-
-static int y4m_parse_frame_tags(char *s, y4m_frame_info_t *i)
-{
- char *token, *value av_unused;
- char tag;
- int err;
-
- /* parse fields */
- for (token = strtok(s, Y4M_DELIM);
- token != NULL;
- token = strtok(NULL, Y4M_DELIM)) {
- if (token[0] == '\0') continue; /* skip empty strings */
- tag = token[0];
- value = token + 1;
- switch (tag) {
- case 'X': /* 'X' meta-tag */
- if ((err = y4m_xtag_add(&(i->x_tags), token)) != Y4M_OK) return err;
- break;
- default:
- /* possible error on unknown options */
- if (_y4mparam_allow_unknown_tags) {
- /* unknown tags ok: store in xtag list and warn... */
- if ((err = y4m_xtag_add(&(i->x_tags), token)) != Y4M_OK) return err;
- mp_msg(MSGT_DEMUX, MSGL_WARN, "Unknown frame tag encountered: '%s'\n", token);
- } else {
- /* unknown tags are *not* ok */
- return Y4M_ERR_BADTAG;
- }
- break;
- }
- }
- /* ta da! done. */
- return Y4M_OK;
-}
-
-
-
-
-
-/*************************************************************************
- *
- * Read/Write stream header
- *
- *************************************************************************/
-
-
-int y4m_read_stream_header(stream_t *s, y4m_stream_info_t *i)
-{
- char line[Y4M_LINE_MAX];
- char *p;
- int n;
- int err;
-
- /* read the header line */
- for (n = 0, p = line; n < Y4M_LINE_MAX; n++, p++) {
- if (y4m_read(s, p, 1))
- return Y4M_ERR_SYSTEM;
- if (*p == '\n') {
- *p = '\0'; /* Replace linefeed by end of string */
- break;
- }
- }
- if (n >= Y4M_LINE_MAX)
- return Y4M_ERR_HEADER;
- /* look for keyword in header */
- if (strncmp(line, Y4M_MAGIC, strlen(Y4M_MAGIC)))
- return Y4M_ERR_MAGIC;
- if ((err = y4m_parse_stream_tags(line + strlen(Y4M_MAGIC), i)) != Y4M_OK)
- return err;
-
- i->framelength = (i->height * i->width) * 3 / 2;
- return Y4M_OK;
-}
-
-
-#if 0
-int y4m_write_stream_header(int fd, y4m_stream_info_t *i)
-{
- char s[Y4M_LINE_MAX+1];
- int n;
- int err;
-
- y4m_ratio_reduce(&(i->framerate));
- y4m_ratio_reduce(&(i->sampleaspect));
- n = snprintf(s, sizeof(s), "%s W%d H%d F%d:%d I%s A%d:%d",
- Y4M_MAGIC,
- i->width,
- i->height,
- i->framerate.n, i->framerate.d,
- (i->interlace == Y4M_ILACE_NONE) ? "p" :
- (i->interlace == Y4M_ILACE_TOP_FIRST) ? "t" :
- (i->interlace == Y4M_ILACE_BOTTOM_FIRST) ? "b" : "?",
- i->sampleaspect.n, i->sampleaspect.d);
- if ((n < 0) || (n > Y4M_LINE_MAX)) return Y4M_ERR_HEADER;
- if ((err = y4m_snprint_xtags(s + n, sizeof(s) - n - 1, &(i->x_tags)))
- != Y4M_OK)
- return err;
- /* non-zero on error */
- return (y4m_write(fd, s, strlen(s)) ? Y4M_ERR_SYSTEM : Y4M_OK);
-}
-#endif
-
-
-
-
-/*************************************************************************
- *
- * Read/Write frame header
- *
- *************************************************************************/
-
-int y4m_read_frame_header(stream_t *s, y4m_frame_info_t *i)
-{
- char line[Y4M_LINE_MAX];
- char *p;
- int n;
- ssize_t remain;
-
- /* This is more clever than read_stream_header...
- Try to read "FRAME\n" all at once, and don't try to parse
- if nothing else is there...
- */
- remain = y4m_read(s, line, sizeof(Y4M_FRAME_MAGIC));
- if (remain != 0)
- {
- /* A clean EOF should end exactly at a frame-boundary */
- if( remain == sizeof(Y4M_FRAME_MAGIC) )
- return Y4M_ERR_EOF;
- else
- return Y4M_ERR_SYSTEM;
- }
- if (strncmp(line, Y4M_FRAME_MAGIC, sizeof(Y4M_FRAME_MAGIC)-1))
- return Y4M_ERR_MAGIC;
- if (line[sizeof(Y4M_FRAME_MAGIC)-1] == '\n')
- return Y4M_OK; /* done -- no tags: that was the end-of-line. */
-
- if (line[sizeof(Y4M_FRAME_MAGIC)-1] != Y4M_DELIM[0]) {
- return Y4M_ERR_MAGIC; /* wasn't a space -- what was it? */
- }
-
- /* proceed to get the tags... (overwrite the magic) */
- for (n = 0, p = line; n < Y4M_LINE_MAX; n++, p++) {
- if (y4m_read(s, p, 1))
- return Y4M_ERR_SYSTEM;
- if (*p == '\n') {
- *p = '\0'; /* Replace linefeed by end of string */
- break;
- }
- }
- if (n >= Y4M_LINE_MAX) return Y4M_ERR_HEADER;
- /* non-zero on error */
- return y4m_parse_frame_tags(line, i);
-}
-
-
-#if 0
-int y4m_write_frame_header(int fd, y4m_frame_info_t *i)
-{
- char s[Y4M_LINE_MAX+1];
- int n;
- int err;
-
- n = snprintf(s, sizeof(s), "%s", Y4M_FRAME_MAGIC);
- if ((n < 0) || (n > Y4M_LINE_MAX)) return Y4M_ERR_HEADER;
- if ((err = y4m_snprint_xtags(s + n, sizeof(s) - n - 1, &(i->x_tags)))
- != Y4M_OK)
- return err;
- /* non-zero on error */
- return (y4m_write(fd, s, strlen(s)) ? Y4M_ERR_SYSTEM : Y4M_OK);
-}
-#endif
-
-
-
-/*************************************************************************
- *
- * Read/Write entire frame
- *
- *************************************************************************/
-
-int y4m_read_frame(stream_t *s, y4m_stream_info_t *si,
- y4m_frame_info_t *fi, unsigned char *yuv[3])
-{
- int err;
- int w = si->width;
- int h = si->height;
-
- /* Read frame header */
- if ((err = y4m_read_frame_header(s, fi)) != Y4M_OK) return err;
- /* Read luminance scanlines */
- if (y4m_read(s, yuv[0], w*h)) return Y4M_ERR_SYSTEM;
- /* Read chrominance scanlines */
- if (y4m_read(s, yuv[1], w*h/4)) return Y4M_ERR_SYSTEM;
- if (y4m_read(s, yuv[2], w*h/4)) return Y4M_ERR_SYSTEM;
-
- return Y4M_OK;
-}
-
-
-
-#if 0
-int y4m_write_frame(int fd, y4m_stream_info_t *si,
- y4m_frame_info_t *fi, unsigned char *yuv[3])
-{
- int err;
- int w = si->width;
- int h = si->height;
-
- /* Write frame header */
- if ((err = y4m_write_frame_header(fd, fi)) != Y4M_OK) return err;
- /* Write luminance,chrominance scanlines */
- if (y4m_write(fd, yuv[0], w*h) ||
- y4m_write(fd, yuv[1], w*h/4) ||
- y4m_write(fd, yuv[2], w*h/4))
- return Y4M_ERR_SYSTEM;
- return Y4M_OK;
-}
-#endif
-
-
-/*************************************************************************
- *
- * Read/Write entire frame, (de)interleaved (to)from two separate fields
- *
- *************************************************************************/
-
-#if 0
-int y4m_read_fields(int fd, y4m_stream_info_t *si, y4m_frame_info_t *fi,
- unsigned char *upper_field[3],
- unsigned char *lower_field[3])
-{
- int i, y, err;
- int width = si->width;
- int height = si->height;
-
- /* Read frame header */
- if ((err = y4m_read_frame_header(fd, fi)) != Y4M_OK) return err;
- /* Read Y', Cb, and Cr planes */
- for (i = 0; i < 3; i++) {
- unsigned char *srctop = upper_field[i];
- unsigned char *srcbot = lower_field[i];
- /* alternately write one line from each */
- for (y = 0; y < height; y += 2) {
- if (y4m_read(fd, srctop, width)) return Y4M_ERR_SYSTEM;
- srctop += width;
- if (y4m_read(fd, srcbot, width)) return Y4M_ERR_SYSTEM;
- srcbot += width;
- }
- /* for chroma, width/height are half as big */
- if (i == 0) {
- width /= 2;
- height /= 2;
- }
- }
- return Y4M_OK;
-}
-
-
-
-int y4m_write_fields(int fd, y4m_stream_info_t *si, y4m_frame_info_t *fi,
- unsigned char *upper_field[3],
- unsigned char *lower_field[3])
-{
- int i, y, err;
- int width = si->width;
- int height = si->height;
-
- /* Write frame header */
- if ((err = y4m_write_frame_header(fd, fi)) != Y4M_OK) return err;
- /* Write Y', Cb, and Cr planes */
- for (i = 0; i < 3; i++) {
- unsigned char *srctop = upper_field[i];
- unsigned char *srcbot = lower_field[i];
- /* alternately write one line from each */
- for (y = 0; y < height; y += 2) {
- if (y4m_write(fd, srctop, width)) return Y4M_ERR_SYSTEM;
- srctop += width;
- if (y4m_write(fd, srcbot, width)) return Y4M_ERR_SYSTEM;
- srcbot += width;
- }
- /* for chroma, width/height are half as big */
- if (i == 0) {
- width /= 2;
- height /= 2;
- }
- }
- return Y4M_OK;
-}
-#endif
-
-
-/*************************************************************************
- *
- * Handy logging of stream info
- *
- *************************************************************************/
-
-void y4m_log_stream_info(const char *prefix, y4m_stream_info_t *i)
-{
- char s[256];
-
- snprintf(s, sizeof(s), " frame size: ");
- if (i->width == Y4M_UNKNOWN)
- snprintf(s+strlen(s), sizeof(s)-strlen(s), "(?)x");
- else
- snprintf(s+strlen(s), sizeof(s)-strlen(s), "%dx", i->width);
- if (i->height == Y4M_UNKNOWN)
- snprintf(s+strlen(s), sizeof(s)-strlen(s), "(?) pixels ");
- else
- snprintf(s+strlen(s), sizeof(s)-strlen(s), "%d pixels ", i->height);
- if (i->framelength == Y4M_UNKNOWN)
- snprintf(s+strlen(s), sizeof(s)-strlen(s), "(? bytes)");
- else
- snprintf(s+strlen(s), sizeof(s)-strlen(s), "(%d bytes)", i->framelength);
- mp_msg(MSGT_DEMUX, MSGL_V, "%s%s\n", prefix, s);
- if ((i->framerate.n == 0) && (i->framerate.d == 0))
- mp_msg(MSGT_DEMUX, MSGL_V, "%s frame rate: ??? fps\n", prefix);
- else
- mp_msg(MSGT_DEMUX, MSGL_V, "%s frame rate: %d/%d fps (~%f)\n", prefix,
- i->framerate.n, i->framerate.d,
- (double) i->framerate.n / (double) i->framerate.d);
- mp_msg(MSGT_DEMUX, MSGL_V, "%s interlace: %s\n", prefix,
- (i->interlace == Y4M_ILACE_NONE) ? "none/progressive" :
- (i->interlace == Y4M_ILACE_TOP_FIRST) ? "top-field-first" :
- (i->interlace == Y4M_ILACE_BOTTOM_FIRST) ? "bottom-field-first" :
- "anyone's guess");
- if ((i->sampleaspect.n == 0) && (i->sampleaspect.d == 0))
- mp_msg(MSGT_DEMUX, MSGL_V, "%ssample aspect ratio: ?:?\n", prefix);
- else
- mp_msg(MSGT_DEMUX, MSGL_V, "%ssample aspect ratio: %d:%d\n", prefix,
- i->sampleaspect.n, i->sampleaspect.d);
-}
-
-
-/*************************************************************************
- *
- * Convert error code to string
- *
- *************************************************************************/
-
-const char *y4m_strerr(int err)
-{
- switch (err) {
- case Y4M_OK: return "no error";
- case Y4M_ERR_RANGE: return "parameter out of range";
- case Y4M_ERR_SYSTEM: return "stream ended unexpectedly (failed read/write)";
- case Y4M_ERR_HEADER: return "bad stream or frame header";
- case Y4M_ERR_BADTAG: return "unknown header tag";
- case Y4M_ERR_MAGIC: return "bad header magic";
- case Y4M_ERR_XXTAGS: return "too many xtags";
- case Y4M_ERR_EOF: return "end-of-file";
- default:
- return "unknown error code";
- }
-}
diff --git a/libmpdemux/yuv4mpeg.h b/libmpdemux/yuv4mpeg.h
deleted file mode 100644
index 6e97662111..0000000000
--- a/libmpdemux/yuv4mpeg.h
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * yuv4mpeg.h: Functions for reading and writing "new" YUV4MPEG2 streams.
- *
- * Stream format is described at the end of this file.
- *
- *
- * Copyright (C) 2001 Matthew J. Marjanovic <maddog@mir.com>
- *
- * This file is part of the MJPEG Tools package (mjpeg.sourceforge.net).
- * Ported to mplayer by Rik Snel <rsnel@cube.dyndns.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef MPLAYER_YUV4MPEG_H
-#define MPLAYER_YUV4MPEG_H
-
-#include <stdlib.h>
-//#include "mp_msg.h"
-#include "stream/stream.h"
-
-
-
-/************************************************************************
- * error codes returned by y4m_* functions
- ************************************************************************/
-#define Y4M_OK 0
-#define Y4M_ERR_RANGE 1
-#define Y4M_ERR_SYSTEM 2
-#define Y4M_ERR_HEADER 3
-#define Y4M_ERR_BADTAG 4
-#define Y4M_ERR_MAGIC 5
-#define Y4M_ERR_EOF 6
-#define Y4M_ERR_XXTAGS 7
-
-
-/* generic 'unknown' value for integer parameters (e.g. interlace, height) */
-#define Y4M_UNKNOWN -1
-
-
-
-/************************************************************************
- * 'ratio' datatype, for rational numbers
- * (see 'ratio' functions down below)
- ************************************************************************/
-typedef struct y4m_ratio {
- int n; /* numerator */
- int d; /* denominator */
-} y4m_ratio_t;
-
-
-/************************************************************************
- * useful standard framerates (as ratios)
- ************************************************************************/
-extern const y4m_ratio_t y4m_fps_UNKNOWN;
-extern const y4m_ratio_t y4m_fps_NTSC_FILM; /* 24000/1001 film (in NTSC) */
-extern const y4m_ratio_t y4m_fps_FILM; /* 24fps film */
-extern const y4m_ratio_t y4m_fps_PAL; /* 25fps PAL */
-extern const y4m_ratio_t y4m_fps_NTSC; /* 30000/1001 NTSC */
-extern const y4m_ratio_t y4m_fps_30; /* 30fps */
-extern const y4m_ratio_t y4m_fps_PAL_FIELD; /* 50fps PAL field rate */
-extern const y4m_ratio_t y4m_fps_NTSC_FIELD; /* 60000/1001 NTSC field rate */
-extern const y4m_ratio_t y4m_fps_60; /* 60fps */
-
-/************************************************************************
- * useful standard sample (pixel) aspect ratios
- ************************************************************************/
-extern const y4m_ratio_t y4m_sar_UNKNOWN;
-extern const y4m_ratio_t y4m_sar_SQUARE; /* square pixels */
-extern const y4m_ratio_t y4m_sar_NTSC_CCIR601; /* 525-line (NTSC) Rec.601 */
-extern const y4m_ratio_t y4m_sar_NTSC_16_9; /* 16:9 NTSC/Rec.601 */
-extern const y4m_ratio_t y4m_sar_NTSC_SVCD_4_3; /* NTSC SVCD 4:3 */
-extern const y4m_ratio_t y4m_sar_NTSC_SVCD_16_9;/* NTSC SVCD 16:9 */
-extern const y4m_ratio_t y4m_sar_PAL_CCIR601; /* 625-line (PAL) Rec.601 */
-extern const y4m_ratio_t y4m_sar_PAL_16_9; /* 16:9 PAL/Rec.601 */
-extern const y4m_ratio_t y4m_sar_PAL_SVCD_4_3; /* PAL SVCD 4:3 */
-extern const y4m_ratio_t y4m_sar_PAL_SVCD_16_9; /* PAL SVCD 16:9 */
-
-
-/************************************************************************
- * 'xtag_list' --- list of unparsed and/or meta/X header tags
- *
- * Do not touch this structure directly!
- *
- * Use the y4m_xtag_*() functions (see below).
- * You must initialize/finalize this structure before/after use.
- ************************************************************************/
-#define Y4M_MAX_XTAGS 32 /* maximum number of xtags in list */
-#define Y4M_MAX_XTAG_SIZE 32 /* max length of an xtag (including 'X') */
-typedef struct y4m_xtag_list {
- int count;
- char *tags[Y4M_MAX_XTAGS];
-} y4m_xtag_list_t;
-
-
-
-/************************************************************************
- * 'stream_info' --- stream header information
- *
- * Do not touch this structure directly!
- *
- * Use the y4m_si_*() functions (see below).
- * You must initialize/finalize this structure before/after use.
- ************************************************************************/
-typedef struct y4m_stream_info {
- /* values from header */
- int width;
- int height;
- int interlace; /* see Y4M_ILACE_* definitions below */
- y4m_ratio_t framerate; /* frames-per-second; 0:0 == unknown */
- y4m_ratio_t sampleaspect; /* pixel width/height; 0:0 == unknown */
- /* computed/derivative values */
- int framelength; /* bytes of data per frame (not including header) */
- /* mystical X tags */
- y4m_xtag_list_t x_tags;
-} y4m_stream_info_t;
-
-/* possible options for the interlace parameter */
-#define Y4M_ILACE_NONE 0 /* non-interlaced, progressive frame */
-#define Y4M_ILACE_TOP_FIRST 1 /* interlaced, top-field first */
-#define Y4M_ILACE_BOTTOM_FIRST 2 /* interlaced, bottom-field first */
-
-
-/************************************************************************
- * 'frame_info' --- frame header information
- *
- * Do not touch this structure directly!
- *
- * Use the y4m_fi_*() functions (see below).
- * You must initialize/finalize this structure before/after use.
- ************************************************************************/
-typedef struct y4m_frame_info {
- /* mystical X tags */
- y4m_xtag_list_t x_tags;
-} y4m_frame_info_t;
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#else
-#endif
-
-
-/************************************************************************
- * 'ratio' functions
- ************************************************************************/
-
-/* 'normalize' a ratio (remove common factors) */
-void y4m_ratio_reduce(y4m_ratio_t *r);
-
-/* parse "nnn:ddd" into a ratio (returns Y4M_OK or Y4M_ERR_RANGE) */
-int y4m_parse_ratio(y4m_ratio_t *r, const char *s);
-
-/* quick test of two ratios for equality (i.e. identical components) */
-#define Y4M_RATIO_EQL(a,b) ( ((a).n == (b).n) && ((a).d == (b).d) )
-
-/* quick conversion of a ratio to a double (no divide-by-zero check!) */
-#define Y4M_RATIO_DBL(r) ((double)(r).n / (double)(r).d)
-
-
-
-/************************************************************************
- * 'xtag' functions
- *
- * o Before using an xtag_list (but after the structure/memory has been
- * allocated), you must initialize it via y4m_init_xtag_list().
- * o After using an xtag_list (but before the structure is released),
- * call y4m_fini_xtag_list() to free internal memory.
- *
- ************************************************************************/
-
-/* initialize an xtag_list structure */
-void y4m_init_xtag_list(y4m_xtag_list_t *xtags);
-
-/* finalize an xtag_list structure */
-void y4m_fini_xtag_list(y4m_xtag_list_t *xtags);
-
-/* make one xtag_list into a copy of another */
-void y4m_copy_xtag_list(y4m_xtag_list_t *dest, const y4m_xtag_list_t *src);
-
-/* return number of tags in an xtag_list */
-int y4m_xtag_count(const y4m_xtag_list_t *xtags);
-
-/* access n'th tag in an xtag_list */
-const char *y4m_xtag_get(const y4m_xtag_list_t *xtags, int n);
-
-/* append a new tag to an xtag_list
- returns: Y4M_OK - success
- Y4M_ERR_XXTAGS - list is already full */
-int y4m_xtag_add(y4m_xtag_list_t *xtags, const char *tag);
-
-/* remove a tag from an xtag_list
- returns: Y4M_OK - success
- Y4M_ERR_RANGE - n is out of range */
-int y4m_xtag_remove(y4m_xtag_list_t *xtags, int n);
-
-/* remove all tags from an xtag_list
- returns: Y4M_OK - success */
-int y4m_xtag_clearlist(y4m_xtag_list_t *xtags);
-
-/* append copies of tags from src list to dest list
- returns: Y4M_OK - success
- Y4M_ERR_XXTAGS - operation would overfill dest list */
-int y4m_xtag_addlist(y4m_xtag_list_t *dest, const y4m_xtag_list_t *src);
-
-
-
-/************************************************************************
- * '*_info' functions
- *
- * o Before using a *_info structure (but after the structure/memory has
- * been allocated), you must initialize it via y4m_init_*_info().
- * o After using a *_info structure (but before the structure is released),
- * call y4m_fini_*_info() to free internal memory.
- * o Use the 'set' and 'get' accessors to modify or access the fields in
- * the structures; don't touch the structure directly. (Ok, so there
- * is no really convenient C syntax to prevent you from doing this,
- * but we are all responsible programmers here, so just don't do it!)
- *
- ************************************************************************/
-
-/* initialize a stream_info structure */
-void y4m_init_stream_info(y4m_stream_info_t *i);
-
-/* finalize a stream_info structure */
-void y4m_fini_stream_info(y4m_stream_info_t *i);
-
-/* make one stream_info into a copy of another */
-void y4m_copy_stream_info(y4m_stream_info_t *dest, y4m_stream_info_t *src);
-
-/* access or set stream_info fields */
-void y4m_si_set_width(y4m_stream_info_t *si, int width);
-int y4m_si_get_width(y4m_stream_info_t *si);
-void y4m_si_set_height(y4m_stream_info_t *si, int height);
-int y4m_si_get_height(y4m_stream_info_t *si);
-void y4m_si_set_interlace(y4m_stream_info_t *si, int interlace);
-int y4m_si_get_interlace(y4m_stream_info_t *si);
-void y4m_si_set_framerate(y4m_stream_info_t *si, y4m_ratio_t framerate);
-y4m_ratio_t y4m_si_get_framerate(y4m_stream_info_t *si);
-void y4m_si_set_sampleaspect(y4m_stream_info_t *si, y4m_ratio_t sar);
-y4m_ratio_t y4m_si_get_sampleaspect(y4m_stream_info_t *si);
-int y4m_si_get_framelength(y4m_stream_info_t *si);
-
-/* access stream_info xtag_list */
-y4m_xtag_list_t *y4m_si_xtags(y4m_stream_info_t *si);
-
-
-/* initialize a frame_info structure */
-void y4m_init_frame_info(y4m_frame_info_t *i);
-
-/* finalize a frame_info structure */
-void y4m_fini_frame_info(y4m_frame_info_t *i);
-
-/* make one frame_info into a copy of another */
-void y4m_copy_frame_info(y4m_frame_info_t *dest, y4m_frame_info_t *src);
-
-/* access frame_info xtag_list */
-y4m_xtag_list_t *y4m_fi_xtags(y4m_frame_info_t *fi);
-
-
-
-/************************************************************************
- * blocking read and write functions
- *
- * o guaranteed to transfer entire payload (or fail)
- * o return values:
- * 0 (zero) complete success
- * -(# of remaining bytes) error (and errno left set)
- * +(# of remaining bytes) EOF (for y4m_read only)
- *
- ************************************************************************/
-
-/* read len bytes from fd into buf */
-ssize_t y4m_read(stream_t *s, char *buf, size_t len);
-
-#if 0
-/* write len bytes from fd into buf */
-ssize_t y4m_write(int fd, char *buf, size_t len);
-#endif
-
-
-/************************************************************************
- * stream header processing functions
- *
- * o return values:
- * Y4M_OK - success
- * Y4M_ERR_* - error (see y4m_strerr() for descriptions)
- *
- ************************************************************************/
-
-/* parse a string of stream header tags */
-int y4m_parse_stream_tags(char *s, y4m_stream_info_t *i);
-
-/* read a stream header from file descriptor fd */
-int y4m_read_stream_header(stream_t *s, y4m_stream_info_t *i);
-
-#if 0
-/* write a stream header to file descriptor fd */
-int y4m_write_stream_header(int fd, y4m_stream_info_t *i);
-#endif
-
-
-/************************************************************************
- * frame processing functions
- *
- * o return values:
- * Y4M_OK - success
- * Y4M_ERR_* - error (see y4m_strerr() for descriptions)
- *
- ************************************************************************/
-
-/* read a frame header from file descriptor fd */
-int y4m_read_frame_header(stream_t *s, y4m_frame_info_t *i);
-
-#if 0
-/* write a frame header to file descriptor fd */
-int y4m_write_frame_header(int fd, y4m_frame_info_t *i);
-#endif
-
-/* read a complete frame (header + data)
- o yuv[3] points to three buffers, one each for Y, U, V planes */
-int y4m_read_frame(stream_t *s, y4m_stream_info_t *si,
- y4m_frame_info_t *fi, unsigned char *yuv[3]);
-
-#if 0
-/* write a complete frame (header + data)
- o yuv[3] points to three buffers, one each for Y, U, V planes */
-int y4m_write_frame(int fd, y4m_stream_info_t *si,
- y4m_frame_info_t *fi, unsigned char *yuv[3]);
-#endif
-
-#if 0
-/* read a complete frame (header + data), but de-interleave fields
- into two separate buffers
- o upper_field[3] same as yuv[3] above, but for upper field
- o lower_field[3] same as yuv[3] above, but for lower field
-*/
-int y4m_read_fields(int fd, y4m_stream_info_t *si, y4m_frame_info_t *fi,
- unsigned char *upper_field[3],
- unsigned char *lower_field[3]);
-
-/* write a complete frame (header + data), but interleave fields
- from two separate buffers
- o upper_field[3] same as yuv[3] above, but for upper field
- o lower_field[3] same as yuv[3] above, but for lower field
-*/
-int y4m_write_fields(int fd, y4m_stream_info_t *si, y4m_frame_info_t *fi,
- unsigned char *upper_field[3],
- unsigned char *lower_field[3]);
-
-#endif
-
-/************************************************************************
- * miscellaneous functions
- ************************************************************************/
-
-/* convenient dump of stream header info via mjpeg_log facility
- * - each logged/printed line is prefixed by 'prefix'
- */
-void y4m_log_stream_info(const char *prefix, y4m_stream_info_t *i);
-
-/* convert a Y4M_ERR_* error code into mildly explanatory string */
-const char *y4m_strerr(int err);
-
-/* set 'allow_unknown_tag' flag for library...
- o yn = 0 : unknown header tags will produce a parsing error
- o yn = 1 : unknown header tags/values will produce a warning, but
- are otherwise passed along via the xtags list
- o yn = -1: don't change, just return current setting
-
- return value: previous setting of flag
-*/
-int y4m_allow_unknown_tags(int yn);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-/************************************************************************
- ************************************************************************
-
- Description of the (new!, forever?) YUV4MPEG2 stream format:
-
- STREAM consists of
- o one '\n' terminated STREAM-HEADER
- o unlimited number of FRAMEs
-
- FRAME consists of
- o one '\n' terminated FRAME-HEADER
- o "length" octets of planar YCrCb 4:2:0 image data
- (if frame is interlaced, then the two fields are interleaved)
-
-
- STREAM-HEADER consists of
- o string "YUV4MPEG2 " (note the space after the '2')
- o unlimited number of ' ' separated TAGGED-FIELDs
- o '\n' line terminator
-
- FRAME-HEADER consists of
- o string "FRAME " (note the space after the 'E')
- o unlimited number of ' ' separated TAGGED-FIELDs
- o '\n' line terminator
-
-
- TAGGED-FIELD consists of
- o single ascii character tag
- o VALUE (which does not contain whitespace)
-
- VALUE consists of
- o integer (base 10 ascii representation)
- or o RATIO
- or o single ascii character
- or o generic ascii string
-
- RATIO consists of
- o numerator (integer)
- o ':' (a colon)
- o denominator (integer)
-
-
- The currently supported tags for the STREAM-HEADER:
- W - [integer] frame width, pixels, should be > 0
- H - [integer] frame height, pixels, should be > 0
- I - [char] interlacing: p - progressive (none)
- t - top-field-first
- b - bottom-field-first
- ? - unknown
- F - [ratio] frame-rate, 0:0 == unknown
- A - [ratio] sample (pixel) aspect ratio, 0:0 == unknown
- X - [character string] 'metadata' (unparsed, but passed around)
-
- The currently supported tags for the FRAME-HEADER:
- X - character string 'metadata' (unparsed, but passed around)
-
- ************************************************************************
- ************************************************************************/
-
-#endif /* MPLAYER_YUV4MPEG_H */
diff --git a/libmpdemux/yuv4mpeg_intern.h b/libmpdemux/yuv4mpeg_intern.h
deleted file mode 100644
index 963f2e3240..0000000000
--- a/libmpdemux/yuv4mpeg_intern.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * yuv4mpeg_intern.h: Internal constants for "new" YUV4MPEG streams
- *
- * Copyright (C) 2001 Andrew Stevens <andrew.stevens@philips.com>
- *
- * This file is part of the MJPEG Tools package (mjpeg.sourceforge.net).
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public License
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef MPLAYER_YUV4MPEG_INTERN_H
-#define MPLAYER_YUV4MPEG_INTERN_H
-
-
-#define Y4M_MAGIC "YUV4MPEG2"
-#define Y4M_FRAME_MAGIC "FRAME"
-
-#define Y4M_DELIM " " /* single-character(space) separating tagged fields */
-
-#define Y4M_LINE_MAX 256 /* max number of characters in a header line
- (including the '\n', but not the '\0') */
-
-
-/* standard framerate ratios */
-#define Y4M_FPS_UNKNOWN { 0, 0 }
-#define Y4M_FPS_NTSC_FILM { 24000, 1001 }
-#define Y4M_FPS_FILM { 24, 1 }
-#define Y4M_FPS_PAL { 25, 1 }
-#define Y4M_FPS_NTSC { 30000, 1001 }
-#define Y4M_FPS_30 { 30, 1 }
-#define Y4M_FPS_PAL_FIELD { 50, 1 }
-#define Y4M_FPS_NTSC_FIELD { 60000, 1001 }
-#define Y4M_FPS_60 { 60, 1 }
-
-/* standard sample/pixel aspect ratios */
-#define Y4M_SAR_UNKNOWN { 0, 0 }
-#define Y4M_SAR_SQUARE { 1, 1 }
-#define Y4M_SAR_NTSC_CCIR601 { 10, 11 }
-#define Y4M_SAR_NTSC_16_9 { 40, 33 }
-#define Y4M_SAR_NTSC_SVCD_4_3 { 15, 11 }
-#define Y4M_SAR_NTSC_SVCD_16_9 { 20, 11 }
-#define Y4M_SAR_PAL_CCIR601 { 59, 54 }
-#define Y4M_SAR_PAL_16_9 { 118, 81 }
-#define Y4M_SAR_PAL_SVCD_4_3 { 59, 36 }
-#define Y4M_SAR_PAL_SVCD_16_9 { 59, 27 }
-
-#define Y4M_SAR_MPEG1_1 Y4M_SAR_SQUARE
-#define Y4M_SAR_MPEG1_2 { 10000, 6735 }
-#define Y4M_SAR_MPEG1_3 { 10000, 7031 } /* Anamorphic 16:9 PAL */
-#define Y4M_SAR_MPEG1_4 { 10000, 7615 }
-#define Y4M_SAR_MPEG1_5 { 10000, 8055 }
-#define Y4M_SAR_MPEG1_6 { 10000, 8437 } /* Anamorphic 16:9 NTSC */
-#define Y4M_SAR_MPEG1_7 { 10000, 8935 }
-#define Y4M_SAR_MPEG1_8 { 10000, 9375 } /* PAL/SECAM 4:3 */
-#define Y4M_SAR_MPEG1_9 { 10000, 9815 }
-#define Y4M_SAR_MPEG1_10 { 10000, 10255 }
-#define Y4M_SAR_MPEG1_11 { 10000, 10695 }
-#define Y4M_SAR_MPEG1_12 { 10000, 11250 } /* NTSC 4:3 */
-#define Y4M_SAR_MPEG1_13 { 10000, 11575 }
-#define Y4M_SAR_MPEG1_14 { 10000, 12015 }
-
-#define Y4M_DAR_MPEG2_1 { 1, 1}
-#define Y4M_DAR_MPEG2_2 { 4, 3 }
-#define Y4M_DAR_MPEG2_3 { 16, 9 }
-#define Y4M_DAR_MPEG2_4 { 221, 100 }
-
-#endif /* MPLAYER_YUV4MPEG_INTERN_H */
diff --git a/libmpdemux/yuv4mpeg_ratio.c b/libmpdemux/yuv4mpeg_ratio.c
deleted file mode 100644
index be5475c1b1..0000000000
--- a/libmpdemux/yuv4mpeg_ratio.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * yuv4mpeg_ratio.c: Functions for dealing with y4m_ratio_t datatype.
- *
- * Copyright (C) 2001 Matthew J. Marjanovic <maddog@mir.com>
- *
- * This file is part of the MJPEG Tools package (mjpeg.sourceforge.net).
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#include "config.h"
-
-#include <string.h>
-#include "yuv4mpeg.h"
-#include "yuv4mpeg_intern.h"
-
-
-/* useful list of standard framerates */
-const y4m_ratio_t y4m_fps_UNKNOWN = Y4M_FPS_UNKNOWN;
-const y4m_ratio_t y4m_fps_NTSC_FILM = Y4M_FPS_NTSC_FILM;
-const y4m_ratio_t y4m_fps_FILM = Y4M_FPS_FILM;
-const y4m_ratio_t y4m_fps_PAL = Y4M_FPS_PAL;
-const y4m_ratio_t y4m_fps_NTSC = Y4M_FPS_NTSC;
-const y4m_ratio_t y4m_fps_30 = Y4M_FPS_30;
-const y4m_ratio_t y4m_fps_PAL_FIELD = Y4M_FPS_PAL_FIELD;
-const y4m_ratio_t y4m_fps_NTSC_FIELD = Y4M_FPS_NTSC_FIELD;
-const y4m_ratio_t y4m_fps_60 = Y4M_FPS_60;
-
-/* useful list of standard pixel aspect ratios */
-const y4m_ratio_t y4m_sar_UNKNOWN = Y4M_SAR_UNKNOWN;
-const y4m_ratio_t y4m_sar_SQUARE = Y4M_SAR_SQUARE;
-const y4m_ratio_t y4m_sar_NTSC_CCIR601 = Y4M_SAR_NTSC_CCIR601;
-const y4m_ratio_t y4m_sar_NTSC_16_9 = Y4M_SAR_NTSC_16_9;
-const y4m_ratio_t y4m_sar_NTSC_SVCD_4_3 = Y4M_SAR_NTSC_SVCD_4_3;
-const y4m_ratio_t y4m_sar_NTSC_SVCD_16_9 = Y4M_SAR_NTSC_SVCD_16_9;
-const y4m_ratio_t y4m_sar_PAL_CCIR601 = Y4M_SAR_PAL_CCIR601;
-const y4m_ratio_t y4m_sar_PAL_16_9 = Y4M_SAR_PAL_16_9;
-const y4m_ratio_t y4m_sar_PAL_SVCD_4_3 = Y4M_SAR_PAL_SVCD_4_3;
-const y4m_ratio_t y4m_sar_PAL_SVCD_16_9 = Y4M_SAR_PAL_SVCD_16_9;
-
-
-/*
- * Euler's algorithm for greatest common divisor
- */
-
-static int gcd(int a, int b)
-{
- a = (a >= 0) ? a : -a;
- b = (b >= 0) ? b : -b;
-
- while (b > 0) {
- int x = b;
- b = a % b;
- a = x;
- }
- return a;
-}
-
-
-/*************************************************************************
- *
- * Remove common factors from a ratio
- *
- *************************************************************************/
-
-
-void y4m_ratio_reduce(y4m_ratio_t *r)
-{
- int d;
- if ((r->n == 0) && (r->d == 0)) return; /* "unknown" */
- d = gcd(r->n, r->d);
- r->n /= d;
- r->d /= d;
-}
-
-
-
-/*************************************************************************
- *
- * Parse "nnn:ddd" into a ratio
- *
- * returns: Y4M_OK - success
- * Y4M_ERR_RANGE - range error
- *
- *************************************************************************/
-
-int y4m_parse_ratio(y4m_ratio_t *r, const char *s)
-{
- char *t = strchr(s, ':');
-
- if (t == NULL) return Y4M_ERR_RANGE;
- r->n = atoi(s);
- r->d = atoi(t+1);
- if (r->d < 0) return Y4M_ERR_RANGE;
- /* 0:0 == unknown, so that is ok, otherwise zero denominator is bad */
- if ((r->d == 0) && (r->n != 0)) return Y4M_ERR_RANGE;
- y4m_ratio_reduce(r);
- return Y4M_OK;
-}
diff --git a/libvo/aspect.c b/libvo/aspect.c
index 8dcd8b6843..8a26a5ac00 100644
--- a/libvo/aspect.c
+++ b/libvo/aspect.c
@@ -143,11 +143,6 @@ static void panscan_calc_internal(struct vo *vo, int zoom)
vo->panscan_y = vo_panscan_area * vo->panscan_amount;
}
-void panscan_calc(struct vo *vo)
-{
- panscan_calc_internal(vo, A_ZOOM);
-}
-
/**
* vos that set vo_dwidth and v_dheight correctly should call this to update
* vo_panscan_x and vo_panscan_y
diff --git a/libvo/aspect.h b/libvo/aspect.h
index 07f928a9ff..f5ff1a8ad7 100644
--- a/libvo/aspect.h
+++ b/libvo/aspect.h
@@ -22,7 +22,6 @@
struct vo;
void panscan_init(struct vo *vo);
-void panscan_calc(struct vo *vo);
void panscan_calc_windowed(struct vo *vo);
void aspect_save_orig(struct vo *vo, int orgw, int orgh);
diff --git a/libvo/osd.c b/libvo/osd.c
index 4fabc5c9ac..0b5ef8efa2 100644
--- a/libvo/osd.c
+++ b/libvo/osd.c
@@ -128,20 +128,6 @@ void vo_draw_alpha_yuy2(int w,int h, unsigned char* src, unsigned char *srca, in
#endif
}
-void vo_draw_alpha_uyvy(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
-#if ARCH_X86
- // ordered by speed / fastest first
- if(gCpuCaps.hasMMX2)
- vo_draw_alpha_uyvy_MMX2(w, h, src, srca, srcstride, dstbase, dststride);
- else if(gCpuCaps.hasMMX)
- vo_draw_alpha_uyvy_MMX(w, h, src, srca, srcstride, dstbase, dststride);
- else
- vo_draw_alpha_uyvy_X86(w, h, src, srca, srcstride, dstbase, dststride);
-#else
- vo_draw_alpha_uyvy_C(w, h, src, srca, srcstride, dstbase, dststride);
-#endif
-}
-
void vo_draw_alpha_rgb24(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
#if ARCH_X86
// ordered by speed / fastest first
diff --git a/libvo/osd.h b/libvo/osd.h
index 4d79e854c8..8f57e6b444 100644
--- a/libvo/osd.h
+++ b/libvo/osd.h
@@ -26,7 +26,6 @@ void vo_draw_alpha_init(void); // build tables
void vo_draw_alpha_yv12(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_yuy2(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
-void vo_draw_alpha_uyvy(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb24(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb32(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
void vo_draw_alpha_rgb12(int w, int h, unsigned char* src, unsigned char *srca,
diff --git a/libvo/osd_template.c b/libvo/osd_template.c
index 16fe4cff11..2cc07bba39 100644
--- a/libvo/osd_template.c
+++ b/libvo/osd_template.c
@@ -177,30 +177,6 @@ static inline void RENAME(vo_draw_alpha_yuy2)(int w,int h, unsigned char* src, u
return;
}
-static inline void RENAME(vo_draw_alpha_uyvy)(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
- int y;
-#if defined(FAST_OSD)
- w=w>>1;
-#endif
- for(y=0;y<h;y++){
- register int x;
- for(x=0;x<w;x++){
-#ifdef FAST_OSD
- if(srca[2*x+0]) dstbase[4*x+2]=src[2*x+0];
- if(srca[2*x+1]) dstbase[4*x+0]=src[2*x+1];
-#else
- if(srca[x]) {
- dstbase[2*x+1]=((dstbase[2*x+1]*srca[x])>>8)+src[x];
- dstbase[2*x]=((((signed)dstbase[2*x]-128)*srca[x])>>8)+128;
- }
-#endif
- }
- src+=srcstride;
- srca+=srcstride;
- dstbase+=dststride;
- }
-}
-
static inline void RENAME(vo_draw_alpha_rgb24)(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
int y;
#if HAVE_MMX
diff --git a/libvo/video_out.h b/libvo/video_out.h
index 82302a91d4..e9d9e69202 100644
--- a/libvo/video_out.h
+++ b/libvo/video_out.h
@@ -49,7 +49,6 @@ enum mp_voctrl {
/* libmpcodecs direct rendering */
VOCTRL_GET_IMAGE,
VOCTRL_DRAW_IMAGE,
- VOCTRL_SET_SPU_PALETTE,
VOCTRL_GET_PANSCAN,
VOCTRL_SET_PANSCAN,
VOCTRL_SET_EQUALIZER, // struct voctrl_set_equalizer_args
diff --git a/m_struct.c b/m_struct.c
index f8bec673f5..5ee932945a 100644
--- a/m_struct.c
+++ b/m_struct.c
@@ -80,27 +80,6 @@ int m_struct_set(const m_struct_t *st, void *obj, const char *field,
return 1;
}
-void
-m_struct_reset(const m_struct_t* st, void* obj, const char* field) {
- const m_option_t* f;
-
- if(!field) { // Reset all options
- int i;
- for(i = 0 ; st->fields[i].name ; i++)
- m_option_copy(&st->fields[i],M_ST_MB_P(obj,st->fields[i].p),M_ST_MB_P(st->defaults,st->fields[i].p));
- return;
- }
-
- // Only one
- f = m_struct_get_field(st,field);
- if(!f) {
- mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Struct %s doesn't have any %s field\n",
- st->name,field);
- return;
- }
- m_option_copy(f,M_ST_MB_P(obj,f->p),M_ST_MB_P(st->defaults,f->p));
-}
-
/// Free an allocated struct
void
m_struct_free(const m_struct_t* st, void* obj) {
@@ -110,18 +89,3 @@ m_struct_free(const m_struct_t* st, void* obj) {
m_option_free(&st->fields[i],M_ST_MB_P(obj,st->fields[i].p));
free(obj);
}
-
-void*
-m_struct_copy(const m_struct_t* st, void* obj) {
- void* r = malloc(st->size);
- int i;
-
- memcpy(r,obj,st->size);
- for(i = 0 ; st->fields[i].name ; i++) {
- if(st->fields[i].type->flags & M_OPT_TYPE_DYNAMIC)
- memset(M_ST_MB_P(r,st->fields[i].p),0,st->fields[i].type->size);
- m_option_copy(&st->fields[i],M_ST_MB_P(r,st->fields[i].p),M_ST_MB_P(obj,st->fields[i].p));
- }
-
- return r;
-}
diff --git a/m_struct.h b/m_struct.h
index 79c7c24f2f..1645ae734a 100644
--- a/m_struct.h
+++ b/m_struct.h
@@ -92,22 +92,6 @@ m_struct_alloc(const m_struct_t* st);
int m_struct_set(const m_struct_t *st, void *obj, const char *field,
struct bstr param);
-/// Reset a field (or all if field == NULL) to defaults.
-/** \param st Struct definition.
- * \param obj Pointer to the struct to set.
- * \param field Name of the field to reset, if NULL all fields are reseted.
- */
-void
-m_struct_reset(const m_struct_t* st, void* obj, const char* field);
-
-/// Create a copy of an existing struct.
-/** \param st Struct definition.
- * \param obj Pointer to the struct to copy.
- * \return Newly allocated copy of obj.
- */
-void*
-m_struct_copy(const m_struct_t* st, void* obj);
-
/// Free an allocated struct.
/** \param st Struct definition.
* \param obj Pointer to the struct to copy.
diff --git a/mplayer.c b/mplayer.c
index 41f0106449..43ebe3cc88 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -74,7 +74,6 @@
#include "sub/subreader.h"
#include "sub/find_subfiles.h"
#include "sub/dec_sub.h"
-#include "sub/sub_cc.h"
#include "mp_osd.h"
#include "libvo/video_out.h"
@@ -4091,8 +4090,6 @@ goto_enable_cache:
reinit_video_chain(mpctx);
if (mpctx->sh_video) {
- if (mpctx->sh_video->output_flags & VFCAP_SPU && vo_spudec)
- spudec_set_hw_spu(vo_spudec, mpctx->video_out);
osd_font_invalidate();
} else if (!mpctx->sh_audio)
goto goto_next_file;
diff --git a/sub/spudec.c b/sub/spudec.c
index a871aa3cd9..6eabaf5723 100644
--- a/sub/spudec.c
+++ b/sub/spudec.c
@@ -1209,16 +1209,6 @@ nothing_to_do:
}
}
-void spudec_update_palette(void * this, unsigned int *palette)
-{
- spudec_handle_t *spu = this;
- if (spu && palette) {
- memcpy(spu->global_palette, palette, sizeof(spu->global_palette));
- if(spu->hw_spu)
- vo_control(spu->hw_spu, VOCTRL_SET_SPU_PALETTE, spu->global_palette);
- }
-}
-
void spudec_set_font_factor(void * this, double factor)
{
spudec_handle_t *spu = this;
@@ -1334,15 +1324,6 @@ void spudec_free(void *this)
}
}
-void spudec_set_hw_spu(void *this, struct vo *hw_spu)
-{
- spudec_handle_t *spu = this;
- if (!spu)
- return;
- spu->hw_spu = hw_spu;
- vo_control(hw_spu, VOCTRL_SET_SPU_PALETTE, spu->global_palette);
-}
-
/**
* palette must contain at least 256 32-bit entries, otherwise crashes
* are possible
diff --git a/sub/spudec.h b/sub/spudec.h
index 2b3828c34c..ad7ece4f7a 100644
--- a/sub/spudec.h
+++ b/sub/spudec.h
@@ -26,14 +26,12 @@ void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pt
void spudec_draw(void *this, void (*draw_alpha)(void *ctx, int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride), void *ctx);
void spudec_draw_scaled(void *this, unsigned int dxs, unsigned int dys, void (*draw_alpha)(void *ctx, int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride), void *ctx);
int spudec_apply_palette_crop(void *this, uint32_t palette, int sx, int ex, int sy, int ey);
-void spudec_update_palette(void *this, unsigned int *palette);
void *spudec_new_scaled(unsigned int *palette, unsigned int frame_width, unsigned int frame_height, uint8_t *extradata, int extradata_len);
void *spudec_new(unsigned int *palette);
void spudec_free(void *this);
void spudec_reset(void *this); // called after seek
int spudec_visible(void *this); // check if spu is visible
void spudec_set_font_factor(void * this, double factor); // sets the equivalent to ffactor
-void spudec_set_hw_spu(void *this, struct vo *hw_spu);
int spudec_changed(void *this);
void spudec_calc_bbox(void *me, unsigned int dxs, unsigned int dys, unsigned int* bbox);
void spudec_set_forced_subs_only(void * const this, const unsigned int flag);
diff --git a/sub/sub.c b/sub/sub.c
index 43fef147d2..933a53e37d 100644
--- a/sub/sub.c
+++ b/sub/sub.c
@@ -94,39 +94,6 @@ float font_factor = 0.75;
float sub_delay = 0;
float sub_fps = 0;
-// renders char to a big per-object buffer where alpha and bitmap are separated
-void draw_alpha_buf(mp_osd_obj_t* obj, int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
-{
- int dststride = obj->stride;
- int dstskip = obj->stride-w;
- int srcskip = stride-w;
- int i, j;
- unsigned char *b = obj->bitmap_buffer + (y0-obj->bbox.y1)*dststride + (x0-obj->bbox.x1);
- unsigned char *a = obj->alpha_buffer + (y0-obj->bbox.y1)*dststride + (x0-obj->bbox.x1);
- unsigned char *bs = src;
- unsigned char *as = srca;
-
- if (x0 < obj->bbox.x1 || x0+w > obj->bbox.x2 || y0 < obj->bbox.y1 || y0+h > obj->bbox.y2) {
- fprintf(stderr, "osd text out of range: bbox [%d %d %d %d], txt [%d %d %d %d]\n",
- obj->bbox.x1, obj->bbox.x2, obj->bbox.y1, obj->bbox.y2,
- x0, x0+w, y0, y0+h);
- return;
- }
-
- for (i = 0; i < h; i++) {
- for (j = 0; j < w; j++, b++, a++, bs++, as++) {
- if (*b < *bs) *b = *bs;
- if (*as) {
- if (*a == 0 || *a > *as) *a = *as;
- }
- }
- b+= dstskip;
- a+= dstskip;
- bs+= srcskip;
- as+= srcskip;
- }
-}
-
// allocates/enlarges the alpha/bitmap buffer
void osd_alloc_buf(mp_osd_obj_t* obj)
{
@@ -160,20 +127,6 @@ void vo_draw_text_from_buffer(mp_osd_obj_t* obj,void (*draw_alpha)(void *ctx, in
}
}
-unsigned utf8_get_char(const char **str) {
- const uint8_t *strp = (const uint8_t *)*str;
- unsigned c;
- GET_UTF8(c, *strp++, goto no_utf8;);
- *str = (const char *)strp;
- return c;
-
-no_utf8:
- strp = (const uint8_t *)*str;
- c = *strp++;
- *str = (const char *)strp;
- return c;
-}
-
#ifdef CONFIG_DVDNAV
void osd_set_nav_box (uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey) {
nav_hl.sx = sx;
@@ -392,28 +345,6 @@ void osd_set_text(struct osd_state *osd, const char *text) {
osd->osd_text = talloc_strdup(osd, text);
}
-int vo_osd_changed_flag=0;
-
-void osd_remove_text(struct osd_state *osd, int dxs, int dys,
- void (*remove)(int x0, int y0, int w, int h))
-{
- mp_osd_obj_t* obj=vo_osd_list;
- osd_update(osd, dxs, dys);
- while(obj){
- if(((obj->flags&OSDFLAG_CHANGED) || (obj->flags&OSDFLAG_VISIBLE)) &&
- (obj->flags&OSDFLAG_OLD_BBOX)){
- int w=obj->old_bbox.x2-obj->old_bbox.x1;
- int h=obj->old_bbox.y2-obj->old_bbox.y1;
- if(w>0 && h>0){
- vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack
- remove(obj->old_bbox.x1,obj->old_bbox.y1,w,h);
- }
-// obj->flags&=~OSDFLAG_OLD_BBOX;
- }
- obj=obj->next;
- }
-}
-
void osd_draw_text_ext(struct osd_state *osd, int dxs, int dys,
int left_border, int top_border, int right_border,
int bottom_border, int orig_w, int orig_h,
@@ -428,7 +359,6 @@ void osd_draw_text_ext(struct osd_state *osd, int dxs, int dys,
bottom_border, orig_w, orig_h);
while(obj){
if(obj->flags&OSDFLAG_VISIBLE){
- vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack
switch(obj->type){
case OSDTYPE_SPU:
vo_draw_spudec_sub(obj, draw_alpha, ctx); // FIXME
diff --git a/sub/sub.h b/sub/sub.h
index 5c2b6184c5..41b3b0ccff 100644
--- a/sub/sub.h
+++ b/sub/sub.h
@@ -166,8 +166,6 @@ void osd_draw_text_ext(struct osd_state *osd, int dxs, int dys,
unsigned char *srca,
int stride),
void *ctx);
-void osd_remove_text(struct osd_state *osd, int dxs, int dys,
- void (*remove)(int x0, int y0, int w, int h));
struct osd_state *osd_create(struct MPOpts *opts, struct ass_library *asslib);
void osd_set_text(struct osd_state *osd, const char *text);
@@ -177,10 +175,6 @@ void vo_osd_resized(void);
int vo_osd_check_range_update(int,int,int,int);
void osd_free(struct osd_state *osd);
-extern int vo_osd_changed_flag;
-
-unsigned utf8_get_char(const char **str);
-
#ifdef CONFIG_DVDNAV
#include <inttypes.h>
void osd_set_nav_box (uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey);
@@ -193,7 +187,6 @@ void osd_set_nav_box (uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey);
// used only by osd_ft.c or osd_libass.c
void osd_alloc_buf(mp_osd_obj_t* obj);
-void draw_alpha_buf(mp_osd_obj_t* obj, int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
void vo_draw_text_from_buffer(mp_osd_obj_t* obj,void (*draw_alpha)(void *ctx, int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride), void *ctx);
// defined in osd_ft.c or osd_libass.c
diff --git a/sub/sub_cc.c b/sub/sub_cc.c
deleted file mode 100644
index 8919ce84f4..0000000000
--- a/sub/sub_cc.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * decoder for Closed Captions
- *
- * This decoder relies on MPlayer's OSD to display subtitles.
- * Be warned that decoding is somewhat preliminary, though it basically works.
- *
- * Most notably, only the text information is decoded as of now, discarding
- * color, background and position info (see source below).
- *
- * uses source from the xine closed captions decoder
- *
- * Copyright (C) 2002 Matteo Giani
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "config.h"
-#include "sub_cc.h"
-
-#include "subreader.h"
-
-#include "libvo/video_out.h"
-#include "sub.h"
-
-
-#define CC_MAX_LINE_LENGTH 64
-
-static char chartbl[128];
-
-static subtitle buf1,buf2;
-static subtitle *fb,*bb;
-
-static unsigned int cursor_pos=0;
-
-static int initialized=0;
-
-#define CC_ROLLON 1
-#define CC_ROLLUP 2
-
-static int cc_mode=CC_ROLLON;
-static int cc_lines=4; ///< number of visible rows in CC roll-up mode, not used in CC roll-on mode
-
-int subcc_enabled = 0;
-
-static void build_char_table(void)
-{
- int i;
- /* first the normal ASCII codes */
- for (i = 0; i < 128; i++)
- chartbl[i] = (char) i;
- /* now the special codes */
- chartbl[0x2a] = 'á';
- chartbl[0x5c] = 'é';
- chartbl[0x5e] = 'í';
- chartbl[0x5f] = 'ó';
- chartbl[0x60] = 'ú';
- chartbl[0x7b] = 'ç';
- chartbl[0x7c] = '÷';
- chartbl[0x7d] = 'Ñ';
- chartbl[0x7e] = 'ñ';
- chartbl[0x7f] = '¤'; /* FIXME: this should be a solid block */
-}
-
-static void clear_buffer(subtitle *buf)
-{
- int i;
- buf->lines=0;
- for (i = 0; i < SUB_MAX_TEXT; i++) {
- free(buf->text[i]);
- buf->text[i] = NULL;
- }
-}
-
-
-/**
- \brief scroll buffer one line up
- \param buf buffer to scroll
-*/
-static void scroll_buffer(subtitle* buf)
-{
- int i;
-
- while(buf->lines > cc_lines)
- {
- free(buf->text[0]);
-
- for(i = 0; i < buf->lines - 1; i++) buf->text[i] = buf->text[i+1];
-
- buf->text[buf->lines-1] = NULL;
- buf->lines--;
- }
-}
-
-static int channel;
-
-void subcc_init(void)
-{
- int i;
- //printf("subcc_init(): initing...\n");
- build_char_table();
- for(i=0;i<SUB_MAX_TEXT;i++) {buf1.text[i]=buf2.text[i]=NULL;}
- buf1.lines=buf2.lines=0;
- fb=&buf1;
- bb=&buf2;
- channel = -1;
-
- initialized=1;
-}
-
-
-static void display_buffer(subtitle *buf)
-{
- vo_sub = buf;
- vo_osd_changed(OSDTYPE_SUBTITLE);
-}
-
-
-static void append_char(char c)
-{
- if(!bb->lines) {bb->lines++; cursor_pos=0;}
- if(bb->text[bb->lines - 1]==NULL)
- {
- bb->text[bb->lines - 1] = calloc(1, CC_MAX_LINE_LENGTH);
- cursor_pos=0;
- }
-
- if(c=='\n')
- {
- if(cursor_pos>0 && bb->lines < SUB_MAX_TEXT)
- {
- bb->lines++;cursor_pos=0;
- if(cc_mode==CC_ROLLUP){ //Carriage return - scroll buffer one line up
- bb->text[bb->lines - 1]=calloc(1, CC_MAX_LINE_LENGTH);
- scroll_buffer(bb);
- }
- }
- }
- else
- {
- if(cursor_pos==CC_MAX_LINE_LENGTH-1)
- {
- fprintf(stderr,"CC: append_char() reached CC_MAX_LINE_LENGTH!\n");
- return;
- }
- bb->text[bb->lines - 1][cursor_pos++]=c;
- }
- //In CC roll-up mode data should be shown immediately
- if(cc_mode==CC_ROLLUP) display_buffer(bb);
-}
-
-
-static void swap_buffers(void)
-{
- subtitle *foo;
- foo=fb;
- fb=bb;
- bb=foo;
-}
-
-static int selected_channel(void)
-{
- return subcc_enabled - 1;
-}
-
-static void cc_decode_EIA608(unsigned short int data)
-{
-
- static unsigned short int lastcode=0x0000;
- uint8_t c1 = data & 0x7f;
- uint8_t c2 = (data >> 8) & 0x7f;
-
- if (c1 & 0x60) { /* normal character, 0x20 <= c1 <= 0x7f */
- if (channel != (selected_channel() & 1))
- return;
- append_char(chartbl[c1]);
- if(c2 & 0x60) /*c2 might not be a normal char even if c1 is*/
- append_char(chartbl[c2]);
- }
- else if (c1 & 0x10) // control code / special char
- {
- channel = (c1 & 0x08) >> 3;
- if (channel != (selected_channel() & 1))
- return;
- c1&=~0x08;
- if(data!=lastcode)
- {
- if(c2 & 0x40) { /*PAC, Preamble Address Code */
- append_char('\n'); /*FIXME properly interpret PACs*/
- }
- else
- switch(c1)
- {
- case 0x10: break; // ext attribute
- case 0x11:
- if((c2 & 0x30)==0x30)
- {
- //printf("[debug]:Special char (ignored)\n");
- /*cc_decode_special_char()*/;
- }
- else if (c2 & 0x20)
- {
- //printf("[debug]: midrow_attr (ignored)\n");
- /*cc_decode_midrow_attr()*/;
- }
- break;
- case 0x14:
- switch(c2)
- {
- case 0x00: //CC roll-on mode
- cc_mode=CC_ROLLON;
- break;
- case 0x25: //CC roll-up, 2 rows
- case 0x26: //CC roll-up, 3 rows
- case 0x27: //CC roll-up, 4 rows
- cc_lines=c2-0x23;
- cc_mode=CC_ROLLUP;
- break;
- case 0x2C: display_buffer(NULL); //EDM
- clear_buffer(fb); break;
- case 0x2d: append_char('\n'); //carriage return
- break;
- case 0x2e: clear_buffer(bb); //ENM
- break;
- case 0x2f: swap_buffers(); //Swap buffers
- display_buffer(fb);
- clear_buffer(bb);
- break;
- }
- break;
- case 0x17:
- if( c2>=0x21 && c2<=0x23) //TAB
- {
- break;
- }
- }
- }
- }
- lastcode=data;
-}
-
-static void subcc_decode(const uint8_t *inputbuffer, unsigned int inputlength)
-{
- /* The first number may denote a channel number. I don't have the
- * EIA-708 standard, so it is hard to say.
- * From what I could figure out so far, the general format seems to be:
- *
- * repeat
- *
- * 0xfe starts 2 byte sequence of unknown purpose. It might denote
- * field #2 in line 21 of the VBI.
- * Treating it identical of 0xff fixes
- * http://samples.mplayerhq.hu/MPEG-VOB/ClosedCaptions/Starship_Troopers.vob
- *
- * 0xff starts 2 byte EIA-608 sequence, field #1 in line 21 of the VBI.
- * Followed by a 3-code triplet that starts either with 0xff or
- * 0xfe. In either case, the following triplet needs to be ignored
- * for line 21, field 1.
- *
- * 0x00 is padding, followed by 2 more 0x00.
- *
- * 0x01 always seems to appear at the beginning, always seems to
- * be followed by 0xf8, 8-bit number.
- * The lower 7 bits of this 8-bit number seem to denote the
- * number of code triplets that follow.
- * The most significant bit denotes whether the Line 21 field 1
- * captioning information is at odd or even triplet offsets from this
- * beginning triplet. 1 denotes odd offsets, 0 denotes even offsets.
- *
- * Most captions are encoded with odd offsets, so this is what we
- * will assume.
- *
- * until end of packet
- */
- const uint8_t *current = inputbuffer;
- unsigned int curbytes = 0;
- uint8_t data1, data2;
- uint8_t cc_code;
- int odd_offset = 1;
-
- while (curbytes < inputlength) {
- cc_code = current[0];
-
- if (inputlength - curbytes < 2) {
-#ifdef LOG_DEBUG
- fprintf(stderr, "Not enough data for 2-byte CC encoding\n");
-#endif
- break;
- }
-
- data1 = current[1];
- data2 = current[2];
- current += 3; curbytes += 3;
-
- switch (cc_code) {
- case 0xfe:
- case 0xff:
- odd_offset ^= 1;
- if (odd_offset != selected_channel() >> 1)
- break;
- /* expect EIA-608 CC1/CC2 encoding */
- // FIXME check parity!
- // Parity check omitted assuming we are reading from a DVD and therefore
- // we should encounter no "transmission errors".
- cc_decode_EIA608(data1 | (data2 << 8));
- break;
-
- case 0x00:
- /* This seems to be just padding */
- break;
-
- case 0x01:
- odd_offset = data2 >> 7;
- break;
-
- default:
-//#ifdef LOG_DEBUG
- fprintf(stderr, "Unknown CC encoding: %x\n", cc_code);
-//#endif
- break;
- }
- }
-}
-
-
-void subcc_process_data(const uint8_t *inputdata, unsigned int len)
-{
- if(!subcc_enabled) return;
- if(!initialized) subcc_init();
-
- subcc_decode(inputdata, len);
-}
diff --git a/sub/sub_cc.h b/sub/sub_cc.h
deleted file mode 100644
index f5f6924057..0000000000
--- a/sub/sub_cc.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef MPLAYER_SUB_CC_H
-#define MPLAYER_SUB_CC_H
-
-#include <stdint.h>
-
-extern int subcc_enabled;
-
-void subcc_init(void);
-void subcc_process_data(const uint8_t *inputdata, unsigned int len);
-
-#endif /* MPLAYER_SUB_CC_H */
diff --git a/sub/subreader.c b/sub/subreader.c
index 6c12ba08a4..ae6f009bc4 100644
--- a/sub/subreader.c
+++ b/sub/subreader.c
@@ -1790,265 +1790,6 @@ if ((suboverlap_enabled == 2) ||
return subt_data;
}
-void list_sub_file(sub_data* subd){
- int i,j;
- subtitle *subs = subd->subtitles;
-
- for(j=0; j < subd->sub_num; j++){
- subtitle* egysub=&subs[j];
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"%i line%c (%li-%li)\n",
- egysub->lines,
- (1==egysub->lines)?' ':'s',
- egysub->start,
- egysub->end);
- for (i=0; i<egysub->lines; i++) {
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"\t\t%d: %s%s", i,egysub->text[i], i==egysub->lines-1?"":" \n ");
- }
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"\n");
- }
-
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"Subtitle format %s time.\n",
- subd->sub_uses_time ? "uses":"doesn't use");
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"Read %i subtitles, %i errors.\n", subd->sub_num, subd->sub_errs);
-}
-
-void dump_srt(sub_data* subd, float fps){
- int i,j;
- int h,m,s,ms;
- FILE * fd;
- subtitle * onesub;
- unsigned long temp;
- subtitle *subs = subd->subtitles;
-
- if (!subd->sub_uses_time && sub_fps == 0)
- sub_fps = fps;
- fd=fopen("dumpsub.srt","w");
- if(!fd)
- {
- perror("dump_srt: fopen");
- return;
- }
- for(i=0; i < subd->sub_num; i++)
- {
- onesub=subs+i; //=&subs[i];
- fprintf(fd,"%d\n",i+1);//line number
-
- temp=onesub->start;
- if (!subd->sub_uses_time)
- temp = temp * 100 / sub_fps;
- temp -= sub_delay * 100;
- h=temp/360000;temp%=360000; //h =1*100*60*60
- m=temp/6000; temp%=6000; //m =1*100*60
- s=temp/100; temp%=100; //s =1*100
- ms=temp*10; //ms=1*10
- fprintf(fd,"%02d:%02d:%02d,%03d --> ",h,m,s,ms);
-
- temp=onesub->end;
- if (!subd->sub_uses_time)
- temp = temp * 100 / sub_fps;
- temp -= sub_delay * 100;
- h=temp/360000;temp%=360000;
- m=temp/6000; temp%=6000;
- s=temp/100; temp%=100;
- ms=temp*10;
- fprintf(fd,"%02d:%02d:%02d,%03d\n",h,m,s,ms);
-
- for(j=0;j<onesub->lines;j++)
- fprintf(fd,"%s\n",onesub->text[j]);
-
- fprintf(fd,"\n");
- }
- fclose(fd);
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.srt\'.\n");
-}
-
-void dump_mpsub(sub_data* subd, float fps){
- int i,j;
- FILE *fd;
- float a,b;
- subtitle *subs = subd->subtitles;
-
- mpsub_position = subd->sub_uses_time? (sub_delay*100) : (sub_delay*fps);
- if (sub_fps==0) sub_fps=fps;
-
- fd=fopen ("dump.mpsub", "w");
- if (!fd) {
- perror ("dump_mpsub: fopen");
- return;
- }
-
-
- if (subd->sub_uses_time) fprintf (fd,"FORMAT=TIME\n\n");
- else fprintf (fd, "FORMAT=%5.2f\n\n", fps);
-
- for(j=0; j < subd->sub_num; j++){
- subtitle* egysub=&subs[j];
- if (subd->sub_uses_time) {
- a=((egysub->start-mpsub_position)/100.0);
- b=((egysub->end-egysub->start)/100.0);
- if ( (float)((int)a) == a)
- fprintf (fd, "%.0f",a);
- else
- fprintf (fd, "%.2f",a);
-
- if ( (float)((int)b) == b)
- fprintf (fd, " %.0f\n",b);
- else
- fprintf (fd, " %.2f\n",b);
- } else {
- fprintf (fd, "%ld %ld\n", (long)((egysub->start*(fps/sub_fps))-((mpsub_position*(fps/sub_fps)))),
- (long)(((egysub->end)-(egysub->start))*(fps/sub_fps)));
- }
-
- mpsub_position = egysub->end;
- for (i=0; i<egysub->lines; i++) {
- fprintf (fd, "%s\n",egysub->text[i]);
- }
- fprintf (fd, "\n");
- }
- fclose (fd);
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dump.mpsub\'.\n");
-}
-
-void dump_microdvd(sub_data* subd, float fps) {
- int i, delay;
- FILE *fd;
- subtitle *subs = subd->subtitles;
- if (sub_fps == 0)
- sub_fps = fps;
- fd = fopen("dumpsub.sub", "w");
- if (!fd) {
- perror("dumpsub.sub: fopen");
- return;
- }
- delay = sub_delay * sub_fps;
- for (i = 0; i < subd->sub_num; ++i) {
- int j, start, end;
- start = subs[i].start;
- end = subs[i].end;
- if (subd->sub_uses_time) {
- start = start * sub_fps / 100 ;
- end = end * sub_fps / 100;
- }
- else {
- start = start * sub_fps / fps;
- end = end * sub_fps / fps;
- }
- start -= delay;
- end -= delay;
- fprintf(fd, "{%d}{%d}", start, end);
- for (j = 0; j < subs[i].lines; ++j)
- fprintf(fd, "%s%s", j ? "|" : "", subs[i].text[j]);
- fprintf(fd, "\n");
- }
- fclose(fd);
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.sub\'.\n");
-}
-
-void dump_jacosub(sub_data* subd, float fps) {
- int i,j;
- int h,m,s,cs;
- FILE * fd;
- subtitle * onesub;
- unsigned long temp;
- subtitle *subs = subd->subtitles;
-
- if (!subd->sub_uses_time && sub_fps == 0)
- sub_fps = fps;
- fd=fopen("dumpsub.jss","w");
- if(!fd)
- {
- perror("dump_jacosub: fopen");
- return;
- }
- fprintf(fd, "#TIMERES %d\n", (subd->sub_uses_time) ? 100 : (int)sub_fps);
- for(i=0; i < subd->sub_num; i++)
- {
- onesub=subs+i; //=&subs[i];
-
- temp=onesub->start;
- if (!subd->sub_uses_time)
- temp = temp * 100 / sub_fps;
- temp -= sub_delay * 100;
- h=temp/360000;temp%=360000; //h =1*100*60*60
- m=temp/6000; temp%=6000; //m =1*100*60
- s=temp/100; temp%=100; //s =1*100
- cs=temp; //cs=1*10
- fprintf(fd,"%02d:%02d:%02d.%02d ",h,m,s,cs);
-
- temp=onesub->end;
- if (!subd->sub_uses_time)
- temp = temp * 100 / sub_fps;
- temp -= sub_delay * 100;
- h=temp/360000;temp%=360000;
- m=temp/6000; temp%=6000;
- s=temp/100; temp%=100;
- cs=temp;
- fprintf(fd,"%02d:%02d:%02d.%02d {~} ",h,m,s,cs);
-
- for(j=0;j<onesub->lines;j++)
- fprintf(fd,"%s%s",j ? "\\n" : "", onesub->text[j]);
-
- fprintf(fd,"\n");
- }
- fclose(fd);
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.js\'.\n");
-}
-
-void dump_sami(sub_data* subd, float fps) {
- int i,j;
- FILE * fd;
- subtitle * onesub;
- unsigned long temp;
- subtitle *subs = subd->subtitles;
-
- if (!subd->sub_uses_time && sub_fps == 0)
- sub_fps = fps;
- fd=fopen("dumpsub.smi","w");
- if(!fd)
- {
- perror("dump_jacosub: fopen");
- return;
- }
- fprintf(fd, "<SAMI>\n"
- "<HEAD>\n"
- " <STYLE TYPE=\"Text/css\">\n"
- " <!--\n"
- " P {margin-left: 29pt; margin-right: 29pt; font-size: 24pt; text-align: center; font-family: Tahoma; font-weight: bold; color: #FCDD03; background-color: #000000;}\n"
- " .SUBTTL {Name: 'Subtitles'; Lang: en-US; SAMIType: CC;}\n"
- " -->\n"
- " </STYLE>\n"
- "</HEAD>\n"
- "<BODY>\n");
- for(i=0; i < subd->sub_num; i++)
- {
- onesub=subs+i; //=&subs[i];
-
- temp=onesub->start;
- if (!subd->sub_uses_time)
- temp = temp * 100 / sub_fps;
- temp -= sub_delay * 100;
- fprintf(fd,"\t<SYNC Start=%lu>\n"
- "\t <P>", temp * 10);
-
- for(j=0;j<onesub->lines;j++)
- fprintf(fd,"%s%s",j ? "<br>" : "", onesub->text[j]);
-
- fprintf(fd,"\n");
-
- temp=onesub->end;
- if (!subd->sub_uses_time)
- temp = temp * 100 / sub_fps;
- temp -= sub_delay * 100;
- fprintf(fd,"\t<SYNC Start=%lu>\n"
- "\t <P>&nbsp;\n", temp * 10);
- }
- fprintf(fd, "</BODY>\n"
- "</SAMI>\n");
- fclose(fd);
- mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.smi\'.\n");
-}
-
void sub_free( sub_data * subd )
{
int i, j;
diff --git a/sub/subreader.h b/sub/subreader.h
index a6d0831413..db84fdd9a8 100644
--- a/sub/subreader.h
+++ b/sub/subreader.h
@@ -91,12 +91,6 @@ void subcp_close (void); /* for demux_ogg.c */
const char* guess_buffer_cp(unsigned char* buffer, int buflen, const char *preferred_language, const char *fallback);
const char* guess_cp(struct stream *st, const char *preferred_language, const char *fallback);
#endif
-void list_sub_file(sub_data* subd);
-void dump_srt(sub_data* subd, float fps);
-void dump_mpsub(sub_data* subd, float fps);
-void dump_microdvd(sub_data* subd, float fps);
-void dump_jacosub(sub_data* subd, float fps);
-void dump_sami(sub_data* subd, float fps);
void sub_free( sub_data * subd );
struct MPContext;
void find_sub(struct MPContext *mpctx, sub_data* subd,int key);
diff --git a/sub/vobsub.c b/sub/vobsub.c
index c8480c89bd..ac2793062a 100644
--- a/sub/vobsub.c
+++ b/sub/vobsub.c
@@ -963,22 +963,6 @@ int vobsub_get_packet(void *vobhandle, float pts, void** data, int* timestamp)
return -1;
}
-int vobsub_get_next_packet(void *vobhandle, void** data, int* timestamp)
-{
- vobsub_t *vob = vobhandle;
- if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) {
- packet_queue_t *queue = vob->spu_streams + vobsub_id;
- if (queue->current_index < queue->packets_size) {
- packet_t *pkt = queue->packets + queue->current_index;
- ++queue->current_index;
- *data = pkt->data;
- *timestamp = pkt->pts100;
- return pkt->size;
- }
- }
- return -1;
-}
-
void vobsub_seek(void * vobhandle, float pts)
{
vobsub_t * vob = vobhandle;
@@ -994,228 +978,3 @@ void vobsub_seek(void * vobhandle, float pts)
vobsub_queue_reseek(queue, seek_pts100);
}
}
-
-void vobsub_reset(void *vobhandle)
-{
- vobsub_t *vob = vobhandle;
- if (vob->spu_streams) {
- unsigned int n = vob->spu_streams_size;
- while (n-- > 0)
- vob->spu_streams[n].current_index = 0;
- }
-}
-
-/**********************************************************************
- * Vobsub output
- **********************************************************************/
-
-typedef struct {
- FILE *fsub;
- FILE *fidx;
- unsigned int aid;
-} vobsub_out_t;
-
-static void create_idx(vobsub_out_t *me, const unsigned int *palette,
- unsigned int orig_width, unsigned int orig_height)
-{
- int i;
- fprintf(me->fidx,
- "# VobSub index file, v7 (do not modify this line!)\n"
- "#\n"
- "# Generated by %s\n"
- "# See <URL:http://www.mplayerhq.hu/> for more information about MPlayer\n"
- "# See <URL:http://wiki.multimedia.cx/index.php?title=VOBsub> for more information about Vobsub\n"
- "#\n"
- "size: %ux%u\n",
- mplayer_version, orig_width, orig_height);
- if (palette) {
- fputs("palette:", me->fidx);
- for (i = 0; i < 16; ++i) {
- const double y = palette[i] >> 16 & 0xff,
- u = (palette[i] >> 8 & 0xff) - 128.0,
- v = (palette[i] & 0xff) - 128.0;
- if (i)
- putc(',', me->fidx);
- fprintf(me->fidx, " %02x%02x%02x",
- av_clip_uint8(y + 1.4022 * u),
- av_clip_uint8(y - 0.3456 * u - 0.7145 * v),
- av_clip_uint8(y + 1.7710 * v));
- }
- putc('\n', me->fidx);
- }
-
- fprintf(me->fidx, "# ON: displays only forced subtitles, OFF: shows everything\n"
- "forced subs: OFF\n");
-}
-
-void *vobsub_out_open(const char *basename, const unsigned int *palette,
- unsigned int orig_width, unsigned int orig_height,
- const char *id, unsigned int index)
-{
- vobsub_out_t *result = NULL;
- char *filename;
- filename = malloc(strlen(basename) + 5);
- if (filename) {
- result = malloc(sizeof(vobsub_out_t));
- if (result) {
- result->aid = index;
- strcpy(filename, basename);
- strcat(filename, ".sub");
- result->fsub = fopen(filename, "ab");
- if (result->fsub == NULL)
- perror("Error: vobsub_out_open subtitle file open failed");
- strcpy(filename, basename);
- strcat(filename, ".idx");
- result->fidx = fopen(filename, "ab");
- if (result->fidx) {
- if (ftell(result->fidx) == 0) {
- create_idx(result, palette, orig_width, orig_height);
- /* Make the selected language the default language */
- fprintf(result->fidx, "\n# Language index in use\nlangidx: %u\n", index);
- }
- fprintf(result->fidx, "\nid: %s, index: %u\n", id ? id : "xx", index);
- /* So that we can check the file now */
- fflush(result->fidx);
- } else
- perror("Error: vobsub_out_open index file open failed");
- free(filename);
- }
- }
- return result;
-}
-
-void vobsub_out_close(void *me)
-{
- vobsub_out_t *vob = me;
- if (vob->fidx)
- fclose(vob->fidx);
- if (vob->fsub)
- fclose(vob->fsub);
- free(vob);
-}
-
-void vobsub_out_output(void *me, const unsigned char *packet,
- int len, double pts)
-{
- static double last_pts;
- static int last_pts_set = 0;
- vobsub_out_t *vob = me;
- if (vob->fsub) {
- /* Windows' Vobsub require that every packet is exactly 2kB long */
- unsigned char buffer[2048];
- unsigned char *p;
- int remain = 2048;
- /* Do not output twice a line with the same timestamp, this
- breaks Windows' Vobsub */
- if (vob->fidx && (!last_pts_set || last_pts != pts)) {
- static unsigned int last_h = 9999, last_m = 9999, last_s = 9999, last_ms = 9999;
- unsigned int h, m, ms;
- double s;
- s = pts;
- h = s / 3600;
- s -= h * 3600;
- m = s / 60;
- s -= m * 60;
- ms = (s - (unsigned int) s) * 1000;
- if (ms >= 1000) /* prevent overflows or bad float stuff */
- ms = 0;
- if (h != last_h || m != last_m || (unsigned int) s != last_s || ms != last_ms) {
- fprintf(vob->fidx, "timestamp: %02u:%02u:%02u:%03u, filepos: %09lx\n",
- h, m, (unsigned int) s, ms, ftell(vob->fsub));
- last_h = h;
- last_m = m;
- last_s = (unsigned int) s;
- last_ms = ms;
- }
- }
- last_pts = pts;
- last_pts_set = 1;
-
- /* Packet start code: Windows' Vobsub needs this */
- p = buffer;
- *p++ = 0; /* 0x00 */
- *p++ = 0;
- *p++ = 1;
- *p++ = 0xba;
- *p++ = 0x40;
- memset(p, 0, 9);
- p += 9;
- { /* Packet */
- static unsigned char last_pts[5] = { 0, 0, 0, 0, 0};
- unsigned char now_pts[5];
- int pts_len, pad_len, datalen = len;
- pts *= 90000;
- now_pts[0] = 0x21 | (((unsigned long)pts >> 29) & 0x0e);
- now_pts[1] = ((unsigned long)pts >> 22) & 0xff;
- now_pts[2] = 0x01 | (((unsigned long)pts >> 14) & 0xfe);
- now_pts[3] = ((unsigned long)pts >> 7) & 0xff;
- now_pts[4] = 0x01 | (((unsigned long)pts << 1) & 0xfe);
- pts_len = memcmp(last_pts, now_pts, sizeof(now_pts)) ? sizeof(now_pts) : 0;
- memcpy(last_pts, now_pts, sizeof(now_pts));
-
- datalen += 3; /* Version, PTS_flags, pts_len */
- datalen += pts_len;
- datalen += 1; /* AID */
- pad_len = 2048 - (p - buffer) - 4 /* MPEG ID */ - 2 /* payload len */ - datalen;
- /* XXX - Go figure what should go here! In any case the
- packet has to be completely filled. If I can fill it
- with padding (0x000001be) latter I'll do that. But if
- there is only room for 6 bytes then I can not write a
- padding packet. So I add some padding in the PTS
- field. This looks like a dirty kludge. Oh well... */
- if (pad_len < 0) {
- /* Packet is too big. Let's try omitting the PTS field */
- datalen -= pts_len;
- pts_len = 0;
- pad_len = 0;
- } else if (pad_len > 6)
- pad_len = 0;
- datalen += pad_len;
-
- *p++ = 0; /* 0x0e */
- *p++ = 0;
- *p++ = 1;
- *p++ = 0xbd;
-
- *p++ = (datalen >> 8) & 0xff; /* length of payload */
- *p++ = datalen & 0xff;
- *p++ = 0x80; /* System-2 (.VOB) stream */
- *p++ = pts_len ? 0x80 : 0x00; /* pts_flags */
- *p++ = pts_len + pad_len;
- memcpy(p, now_pts, pts_len);
- p += pts_len;
- memset(p, 0, pad_len);
- p += pad_len;
- }
- *p++ = 0x20 | vob->aid; /* aid */
- if (fwrite(buffer, p - buffer, 1, vob->fsub) != 1
- || fwrite(packet, len, 1, vob->fsub) != 1)
- perror("ERROR: vobsub write failed");
- else
- remain -= p - buffer + len;
-
- /* Padding */
- if (remain >= 6) {
- p = buffer;
- *p++ = 0x00;
- *p++ = 0x00;
- *p++ = 0x01;
- *p++ = 0xbe;
- *p++ = (remain - 6) >> 8;
- *p++ = (remain - 6) & 0xff;
- /* for better compression, blank this */
- memset(buffer + 6, 0, remain - (p - buffer));
- if (fwrite(buffer, remain, 1, vob->fsub) != 1)
- perror("ERROR: vobsub padding write failed");
- } else if (remain > 0) {
- /* I don't know what to output. But anyway the block
- needs to be 2KB big */
- memset(buffer, 0, remain);
- if (fwrite(buffer, remain, 1, vob->fsub) != 1)
- perror("ERROR: vobsub blank padding write failed");
- } else if (remain < 0)
- fprintf(stderr,
- "\nERROR: wrong thing happened...\n"
- " I wrote a %i data bytes spu packet and that's too long\n", len);
- }
-}
diff --git a/sub/vobsub.h b/sub/vobsub.h
index 3cef1347e5..0851e90c14 100644
--- a/sub/vobsub.h
+++ b/sub/vobsub.h
@@ -23,7 +23,6 @@ void *vobsub_open(const char *subname, const char *const ifo, const int force, v
void vobsub_reset(void *vob);
int vobsub_parse_ifo(void* this, const char *const name, unsigned int *palette, unsigned int *width, unsigned int *height, int force, int sid, char *langid);
int vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp);
-int vobsub_get_next_packet(void *vobhandle, void** data, int* timestamp);
void vobsub_close(void *this);
unsigned int vobsub_get_indexes_count(void * /* vobhandle */);
char *vobsub_get_id(void * /* vobhandle */, unsigned int /* index */);
@@ -38,9 +37,6 @@ unsigned int vobsub_palette_to_yuv(unsigned int pal);
/// Convert rgb value to yuv.
unsigned int vobsub_rgb_to_yuv(unsigned int rgb);
-void *vobsub_out_open(const char *basename, const unsigned int *palette, unsigned int orig_width, unsigned int orig_height, const char *id, unsigned int index);
-void vobsub_out_output(void *me, const unsigned char *packet, int len, double pts);
-void vobsub_out_close(void *me);
int vobsub_set_from_lang(void *vobhandle, char **lang);
void vobsub_seek(void * vobhandle, float pts);
diff --git a/subopt-helper.c b/subopt-helper.c
index bc7a14ba47..901a2de09e 100644
--- a/subopt-helper.c
+++ b/subopt-helper.c
@@ -336,11 +336,3 @@ int strargcmp(strarg_t *arg, const char *str) {
res = arg->len - strlen(str);
return res;
}
-
-/** \brief compare the stings just as strcasecmp does */
-int strargcasecmp(strarg_t *arg, char *str) {
- int res = strncasecmp(arg->str, str, arg->len);
- if (!res && arg->len != strlen(str))
- res = arg->len - strlen(str);
- return res;
-}
diff --git a/subopt-helper.h b/subopt-helper.h
index 38bd39ec66..e234db4ed2 100644
--- a/subopt-helper.h
+++ b/subopt-helper.h
@@ -60,6 +60,5 @@ int int_non_neg(void *iptr);
int int_pos(void *iptr);
int strargcmp(strarg_t *arg, const char *str);
-int strargcasecmp(strarg_t *arg, char *str);
#endif /* MPLAYER_SUBOPT_HELPER_H */