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;