Mercurial > libavformat.hg
comparison matroskadec.c @ 2873:3fad6c2f343a libavformat
export raw SSA tracks with their own codec ID (patch by Evgeniy Stepanov)
author | aurel |
---|---|
date | Sat, 29 Dec 2007 20:49:03 +0000 |
parents | a9bb4614c0f8 |
children | dc2e92d4a903 |
comparison
equal
deleted
inserted
replaced
2872:a9bb4614c0f8 | 2873:3fad6c2f343a |
---|---|
92 //.. | 92 //.. |
93 } MatroskaAudioTrack; | 93 } MatroskaAudioTrack; |
94 | 94 |
95 typedef struct MatroskaSubtitleTrack { | 95 typedef struct MatroskaSubtitleTrack { |
96 MatroskaTrack track; | 96 MatroskaTrack track; |
97 | |
98 int ass; | |
99 //.. | 97 //.. |
100 } MatroskaSubtitleTrack; | 98 } MatroskaSubtitleTrack; |
101 | 99 |
102 #define MAX_TRACK_SIZE (FFMAX(FFMAX(sizeof(MatroskaVideoTrack), \ | 100 #define MAX_TRACK_SIZE (FFMAX(FFMAX(sizeof(MatroskaVideoTrack), \ |
103 sizeof(MatroskaAudioTrack)), \ | 101 sizeof(MatroskaAudioTrack)), \ |
2156 } else { | 2154 } else { |
2157 audiotrack->block_align = audiotrack->sub_packet_size; | 2155 audiotrack->block_align = audiotrack->sub_packet_size; |
2158 extradata_offset = 78; | 2156 extradata_offset = 78; |
2159 track->codec_priv_size -= extradata_offset; | 2157 track->codec_priv_size -= extradata_offset; |
2160 } | 2158 } |
2161 } | |
2162 | |
2163 else if (codec_id == CODEC_ID_TEXT) { | |
2164 MatroskaSubtitleTrack *subtrack=(MatroskaSubtitleTrack *)track; | |
2165 if (!strcmp(track->codec_id, "S_TEXT/ASS") || | |
2166 !strcmp(track->codec_id, "S_TEXT/SSA") || | |
2167 !strcmp(track->codec_id, "S_ASS") || | |
2168 !strcmp(track->codec_id, "S_SSA")) | |
2169 subtrack->ass = 1; | |
2170 } | 2159 } |
2171 | 2160 |
2172 if (codec_id == CODEC_ID_NONE) { | 2161 if (codec_id == CODEC_ID_NONE) { |
2173 av_log(matroska->ctx, AV_LOG_INFO, | 2162 av_log(matroska->ctx, AV_LOG_INFO, |
2174 "Unknown/unsupported CodecID %s.\n", | 2163 "Unknown/unsupported CodecID %s.\n", |
2436 matroska_queue_packet(matroska, pkt); | 2425 matroska_queue_packet(matroska, pkt); |
2437 } | 2426 } |
2438 } else { | 2427 } else { |
2439 int offset = 0; | 2428 int offset = 0; |
2440 | 2429 |
2441 if (st->codec->codec_id == CODEC_ID_TEXT | |
2442 && ((MatroskaSubtitleTrack *)(matroska->tracks[track]))->ass) { | |
2443 int i; | |
2444 for (i=0; i<8 && data[offset]; offset++) | |
2445 if (data[offset] == ',') | |
2446 i++; | |
2447 } | |
2448 | |
2449 pkt = av_mallocz(sizeof(AVPacket)); | 2430 pkt = av_mallocz(sizeof(AVPacket)); |
2450 /* XXX: prevent data copy... */ | 2431 /* XXX: prevent data copy... */ |
2451 if (av_new_packet(pkt, lace_size[n]-offset) < 0) { | 2432 if (av_new_packet(pkt, lace_size[n]-offset) < 0) { |
2452 res = AVERROR(ENOMEM); | 2433 res = AVERROR(ENOMEM); |
2453 n = laces-1; | 2434 n = laces-1; |