1/* 2 * Copyright (c) 2008 Reimar Döffinger 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21#include "libavutil/common.h" 22#include "libavutil/intreadwrite.h" 23#include "bsf.h" 24#include "bsf_internal.h" 25 26static int text2movsub(AVBSFContext *ctx, AVPacket *out) 27{ 28 AVPacket *in; 29 int ret = 0; 30 31 ret = ff_bsf_get_packet(ctx, &in); 32 if (ret < 0) 33 return ret; 34 35 if (in->size > 0xffff) { 36 ret = AVERROR_INVALIDDATA; 37 goto fail; 38 } 39 40 ret = av_new_packet(out, in->size + 2); 41 if (ret < 0) { 42 ret = AVERROR(ENOMEM); 43 goto fail; 44 } 45 46 ret = av_packet_copy_props(out, in); 47 if (ret < 0) 48 goto fail; 49 50 AV_WB16(out->data, in->size); 51 memcpy(out->data + 2, in->data, in->size); 52 53fail: 54 if (ret < 0) 55 av_packet_unref(out); 56 av_packet_free(&in); 57 return ret; 58} 59 60const FFBitStreamFilter ff_text2movsub_bsf = { 61 .p.name = "text2movsub", 62 .filter = text2movsub, 63}; 64 65static int mov2textsub(AVBSFContext *ctx, AVPacket *pkt) 66{ 67 int ret = 0; 68 69 ret = ff_bsf_get_packet_ref(ctx, pkt); 70 if (ret < 0) 71 return ret; 72 73 if (pkt->size < 2) { 74 av_packet_unref(pkt); 75 return AVERROR_INVALIDDATA; 76 } 77 78 pkt->size = FFMIN(pkt->size - 2, AV_RB16(pkt->data)); 79 pkt->data += 2; 80 81 return 0; 82} 83 84const FFBitStreamFilter ff_mov2textsub_bsf = { 85 .p.name = "mov2textsub", 86 .filter = mov2textsub, 87}; 88