mirror of https://github.com/FFmpeg/FFmpeg.git
parent
abe150c9de
commit
072788c46e
13 changed files with 281 additions and 58 deletions
@ -1,34 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
# Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a |
||||
# copy of this software and associated documentation files (the "Software"), |
||||
# to deal in the Software without restriction, including without limitation |
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
# and/or sell copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included in |
||||
# all copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
# DEALINGS IN THE SOFTWARE. |
||||
|
||||
set -e |
||||
|
||||
OUT="$1" |
||||
IN="$2" |
||||
NAME="$(basename "$IN" | sed 's/\..*//')" |
||||
|
||||
printf "const char %s_ptx[] = \\" "$NAME" > "$OUT" |
||||
echo >> "$OUT" |
||||
sed -e "$(printf 's/\r//g')" -e 's/["\\]/\\&/g' -e "$(printf 's/^/\t"/')" -e 's/$/\\n"/' < "$IN" >> "$OUT" |
||||
echo ";" >> "$OUT" |
||||
|
||||
exit 0 |
@ -0,0 +1,76 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a |
||||
* copy of this software and associated documentation files (the "Software"), |
||||
* to deal in the Software without restriction, including without limitation |
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
* and/or sell copies of the Software, and to permit persons to whom the |
||||
* Software is furnished to do so, subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice shall be included in |
||||
* all copies or substantial portions of the Software. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
* DEALINGS IN THE SOFTWARE. |
||||
*/ |
||||
|
||||
#include <string.h> |
||||
#include <stdio.h> |
||||
|
||||
int main(int argc, char **argv) |
||||
{ |
||||
const char *name; |
||||
FILE *input, *output; |
||||
unsigned int length = 0; |
||||
unsigned char data; |
||||
|
||||
if (argc < 3 || argc > 4) |
||||
return 1; |
||||
|
||||
input = fopen(argv[1], "rb"); |
||||
if (!input) |
||||
return -1; |
||||
|
||||
output = fopen(argv[2], "wb"); |
||||
if (!output) |
||||
return -1; |
||||
|
||||
if (argc == 4) { |
||||
name = argv[3]; |
||||
} else { |
||||
size_t arglen = strlen(argv[1]); |
||||
name = argv[1]; |
||||
|
||||
for (int i = 0; i < arglen; i++) { |
||||
if (argv[1][i] == '.') |
||||
argv[1][i] = '_'; |
||||
else if (argv[1][i] == '/') |
||||
name = &argv[1][i+1]; |
||||
} |
||||
} |
||||
|
||||
fprintf(output, "const unsigned char ff_%s_data[] = { ", name); |
||||
|
||||
while (fread(&data, 1, 1, input) > 0) { |
||||
fprintf(output, "0x%02x, ", data); |
||||
length++; |
||||
} |
||||
|
||||
fprintf(output, "0x00 };\n"); |
||||
fprintf(output, "const unsigned int ff_%s_len = %u;\n", name, length); |
||||
|
||||
fclose(output); |
||||
|
||||
if (ferror(input) || !feof(input)) |
||||
return -1; |
||||
|
||||
fclose(input); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,96 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg 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 |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#include "config.h" |
||||
|
||||
#include "libavutil/hwcontext.h" |
||||
#include "libavutil/hwcontext_cuda_internal.h" |
||||
#include "libavutil/cuda_check.h" |
||||
|
||||
#if CONFIG_PTX_COMPRESSION |
||||
#include <zlib.h> |
||||
#define CHUNK_SIZE 1024 * 64 |
||||
#endif |
||||
|
||||
#include "load_helper.h" |
||||
|
||||
#define CHECK_CU(x) FF_CUDA_CHECK_DL(avctx, cu, x) |
||||
|
||||
int ff_cuda_load_module(void *avctx, AVCUDADeviceContext *hwctx, CUmodule *cu_module, |
||||
const unsigned char *data, const unsigned int length) |
||||
{ |
||||
CudaFunctions *cu = hwctx->internal->cuda_dl; |
||||
|
||||
#if CONFIG_PTX_COMPRESSION |
||||
z_stream stream = { 0 }; |
||||
uint8_t *buf, *tmp; |
||||
uint64_t buf_size; |
||||
int ret; |
||||
|
||||
if (inflateInit2(&stream, 32 + 15) != Z_OK) { |
||||
av_log(avctx, AV_LOG_ERROR, "Error during zlib initialisation: %s\n", stream.msg); |
||||
return AVERROR(ENOSYS); |
||||
} |
||||
|
||||
buf_size = CHUNK_SIZE * 4; |
||||
buf = av_realloc(NULL, buf_size); |
||||
if (!buf) { |
||||
inflateEnd(&stream); |
||||
return AVERROR(ENOMEM); |
||||
} |
||||
|
||||
stream.next_in = data; |
||||
stream.avail_in = length; |
||||
|
||||
do { |
||||
stream.avail_out = buf_size - stream.total_out; |
||||
stream.next_out = buf + stream.total_out; |
||||
|
||||
ret = inflate(&stream, Z_FINISH); |
||||
if (ret != Z_OK && ret != Z_STREAM_END) { |
||||
av_log(avctx, AV_LOG_ERROR, "zlib inflate error: %s\n", stream.msg); |
||||
inflateEnd(&stream); |
||||
av_free(buf); |
||||
return AVERROR(EINVAL); |
||||
} |
||||
|
||||
if (stream.avail_out == 0) { |
||||
buf_size += CHUNK_SIZE; |
||||
tmp = av_realloc(buf, buf_size); |
||||
if (!tmp) { |
||||
inflateEnd(&stream); |
||||
av_free(buf); |
||||
return AVERROR(ENOMEM); |
||||
} |
||||
buf = tmp; |
||||
} |
||||
} while (ret != Z_STREAM_END); |
||||
|
||||
// NULL-terminate string
|
||||
// there is guaranteed to be space for this, due to condition in loop
|
||||
buf[stream.total_out] = 0; |
||||
|
||||
inflateEnd(&stream); |
||||
|
||||
ret = CHECK_CU(cu->cuModuleLoadData(cu_module, buf)); |
||||
av_free(buf); |
||||
return ret; |
||||
#else |
||||
return CHECK_CU(cu->cuModuleLoadData(cu_module, data)); |
||||
#endif |
||||
} |
@ -0,0 +1,28 @@ |
||||
/*
|
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg 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 |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVFILTER_CUDA_DECOMPRESS_H |
||||
#define AVFILTER_CUDA_DECOMPRESS_H |
||||
|
||||
/**
|
||||
* Loads a CUDA module and applies any decompression, if neccesary. |
||||
*/ |
||||
int ff_cuda_load_module(void *avctx, AVCUDADeviceContext *hwctx, CUmodule *cu_module, |
||||
const unsigned char *data, const unsigned int length); |
||||
|
||||
#endif |
Loading…
Reference in new issue